diff --git a/.github/workflows/ci-py-only.yml b/.github/workflows/ci-py-only.yml
index 6b13686022..08d29461b0 100644
--- a/.github/workflows/ci-py-only.yml
+++ b/.github/workflows/ci-py-only.yml
@@ -88,7 +88,6 @@ jobs:
sudo /usr/bin/python -m pip install networkx
sudo /usr/bin/python -m pip install tabulate
sudo /usr/bin/python -m pip install python-dateutil
- sudo /usr/bin/python -m pip install mathutils
- name: Test
run: |
@@ -96,4 +95,4 @@ jobs:
sudo /usr/bin/python tests.py
cd ../src/ifcopenshell-python
mv ifcopenshell ifcopenshell-local # Force testing on installed module
- make test
+ make test-safe
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 06c247f325..6b8026111b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -114,7 +114,6 @@ jobs:
sudo /usr/bin/python -m pip install https://github.com/Andrej730/aud/archive/refs/heads/master-reduced-size.zip
sudo /usr/bin/python -m pip install tabulate
sudo /usr/bin/python -m pip install python-dateutil
- sudo /usr/bin/python -m pip install mathutils
- name: Test
run: |
@@ -122,4 +121,4 @@ jobs:
sudo /usr/bin/python tests.py
cd ../src/ifcopenshell-python
mv ifcopenshell ifcopenshell-local # Force testing on installed module
- make test
+ make test-safe
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 05b9c9cfb5..6d8fac006e 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -58,6 +58,7 @@ option(BUILD_PACKAGE "" OFF)
option(COLLADA_SUPPORT "Build IfcConvert with COLLADA support (requires OpenCOLLADA)." ON)
option(GLTF_SUPPORT "Build IfcConvert with glTF support (requires json.hpp)." OFF)
option(HDF5_SUPPORT "Enable HDF5 support (requires HDF5, zlib)" ON)
+option(WITH_PROJ "Enable output of Earth-Centered Earth-Fixed glTF output using the PROJ library" OFF)
option(IFCXML_SUPPORT "Build IfcParse with ifcXML support (requires libxml2)." ON)
option(USD_SUPPORT "Build IfcConvert with USD support (requires pixar's USD library)." OFF)
@@ -438,9 +439,13 @@ if(BUILD_IFCGEOM)
if(WASM_BUILD)
set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
else()
- # OPENCASCADE_LIBRARIES repeated N times below in order to fix cyclic dependencies - use --start-group ... --end-group instead?
+ # OPENCASCADE_LIBRARIES repeated N times below in order to fix cyclic dependencies
# tfk: --start-group ... --end-group didn't work on the apple linker when last tested
- set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+ if(APPLE)
+ set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+ else()
+ set(OPENCASCADE_LIBRARIES -Wl,--start-group ${OPENCASCADE_LIBRARIES} -Wl,--end-group ${CMAKE_THREAD_LIBS_INIT})
+ endif()
endif()
if (NOT APPLE AND NOT WIN32)
@@ -738,7 +743,7 @@ if(NOT SCHEMA_VERSIONS)
# super arbitrarily try to keep size down at least a little bit
set(SCHEMA_VERSIONS "2x3" "4")
else()
- set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3_rc1" "4x3_rc2" "4x3_rc3" "4x3_rc4" "4x3" "4x3_tc1" "4x3_add1")
+ set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3_rc1" "4x3_rc2" "4x3_rc3" "4x3_rc4" "4x3" "4x3_tc1" "4x3_add1" "4x3_add2")
endif()
endif()
@@ -934,6 +939,15 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON)
add_library(Serializers ${SERIALIZERS_FILES})
set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+ if (WITH_PROJ)
+ target_compile_definitions(Serializers PRIVATE "WITH_PROJ")
+ if (PROJ_STATIC)
+ target_compile_definitions(Serializers PRIVATE "PROJ_DLL=")
+ endif()
+ target_include_directories(Serializers PRIVATE ${PROJ_INCLUDE_DIR} ${SQLITE_INCLUDE_DIR})
+ target_link_libraries(Serializers ${PROJ_LIBRARIES})
+ endif()
+
target_link_libraries(Serializers ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES})
endif(BUILD_CONVERT OR BUILD_IFCPYTHON)
diff --git a/src/blenderbim/Makefile b/src/blenderbim/Makefile
index 08f291afa1..78a71de230 100644
--- a/src/blenderbim/Makefile
+++ b/src/blenderbim/Makefile
@@ -169,7 +169,7 @@ endif
cp -r blenderbim/* dist/blenderbim/
# Provides IfcOpenShell Python functionality
- cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-9cc1f5f-$(PLATFORM)64.zip
+ cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-6c9e130-$(PLATFORM)64.zip
cd dist/working && unzip ifcopenshell-python*
cp -r dist/working/ifcopenshell dist/blenderbim/libs/site/packages/
diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py
index ccafb12784..5ac6de6011 100644
--- a/src/blenderbim/blenderbim/bim/__init__.py
+++ b/src/blenderbim/blenderbim/bim/__init__.py
@@ -125,26 +125,33 @@ classes = [
ui.BIM_UL_generic,
ui.BIM_UL_topics,
ui.BIM_ADDON_preferences,
- # Project overview
- ui.BIM_PT_project_info,
- ui.BIM_PT_project_setup,
- ui.BIM_PT_geometry,
- ui.BIM_PT_tab_grouping_and_filtering,
# Tabs panel
ui.BIM_PT_tabs,
+ # Project overview
+ ui.BIM_PT_tab_project_info,
+ ui.BIM_PT_tab_project_setup,
+ ui.BIM_PT_tab_geometry,
+ ui.BIM_PT_tab_stakeholders,
+ ui.BIM_PT_tab_grouping_and_filtering,
# Object information
ui.BIM_PT_tab_object_metadata,
ui.BIM_PT_tab_misc,
# Geometry and materials
+ ui.BIM_PT_tab_placement,
ui.BIM_PT_tab_representations,
ui.BIM_PT_tab_geometric_relationships,
ui.BIM_PT_tab_parametric_geometry,
+ ui.BIM_PT_tab_profiles,
ui.BIM_PT_tab_materials,
ui.BIM_PT_tab_styles,
# Drawings and documents
+ ui.BIM_PT_tab_sheets,
+ ui.BIM_PT_tab_drawings,
+ ui.BIM_PT_tab_schedules,
+ ui.BIM_PT_tab_references,
# Services and systems
ui.BIM_PT_tab_services,
- ui.BIM_PT_tab_services_object,
+ ui.BIM_PT_tab_zones,
# Structural analysis
ui.BIM_PT_tab_structural,
# Construction scheduling
@@ -212,8 +219,8 @@ def register():
wm = bpy.context.window_manager
if wm.keyconfigs.addon:
- km = wm.keyconfigs.addon.keymaps.new(name='Window', space_type='EMPTY')
- kmi = km.keymap_items.new('bim.switch_tab', 'TAB', 'PRESS', ctrl=True)
+ km = wm.keyconfigs.addon.keymaps.new(name="Window", space_type="EMPTY")
+ kmi = km.keymap_items.new("bim.switch_tab", "TAB", "PRESS", ctrl=True)
addon_keymaps.append((km, kmi))
global icons
@@ -231,12 +238,14 @@ def register():
global last_commit_hash
try:
import git
+
path = Path(__file__).resolve().parent
repo = git.Repo(str(path), search_parent_directories=True)
last_commit_hash = repo.head.object.hexsha
except:
pass
+
def unregister():
global icons
@@ -280,6 +289,7 @@ def unregister():
"SCENE_PT_rigid_body_world",
"SCENE_PT_audio",
"SCENE_PT_keying_sets",
+ "SCENE_PT_simulation",
"SCENE_PT_custom_props",
]:
try:
diff --git a/src/blenderbim/blenderbim/bim/handler.py b/src/blenderbim/blenderbim/bim/handler.py
index 7f2657e5ab..a2d54c47c2 100644
--- a/src/blenderbim/blenderbim/bim/handler.py
+++ b/src/blenderbim/blenderbim/bim/handler.py
@@ -319,6 +319,17 @@ if getattr(bpy.types, "SCENE_PT_custom_props"):
return tool.Blender.is_tab(context, "BLENDER")
+# available on Blender 4.0+
+if getattr(bpy.types, "SCENE_PT_simulation", None):
+
+ class Override_SCENE_PT_simulation(bpy.types.SCENE_PT_simulation):
+ bl_idname = "SCENE_PT_simulation_override"
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "BLENDER")
+
+
@persistent
def load_post(scene):
global global_subscription_owner
@@ -361,6 +372,7 @@ def load_post(scene):
"SCENE_PT_rigid_body_world",
"SCENE_PT_audio",
"SCENE_PT_keying_sets",
+ "SCENE_PT_simulation",
"SCENE_PT_custom_props",
]:
if getattr(bpy.types, panel, None):
diff --git a/src/blenderbim/blenderbim/bim/helper.py b/src/blenderbim/blenderbim/bim/helper.py
index 85b0ddf607..4dd29f6454 100644
--- a/src/blenderbim/blenderbim/bim/helper.py
+++ b/src/blenderbim/blenderbim/bim/helper.py
@@ -260,12 +260,7 @@ def convert_property_group_from_si(property_group, skip_props=()):
for prop_name in property_group.bl_rna.properties.keys():
if prop_name in skip_props:
continue
- prop_bl_rna = property_group.bl_rna.properties[prop_name]
- if prop_bl_rna.array_length > 0:
- prop_value = prop_bl_rna.default_array
- else:
- prop_value = prop_bl_rna.default
-
+ prop_value = tool.Blender.get_blender_prop_default_value(property_group, prop_name)
if type(prop_value) is float:
prop_value = prop_value * conversion_k
elif type(prop_value) is bpy.types.bpy_prop_array:
diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py
index 762a482382..6312ce7f50 100644
--- a/src/blenderbim/blenderbim/bim/import_ifc.py
+++ b/src/blenderbim/blenderbim/bim/import_ifc.py
@@ -96,7 +96,9 @@ class MaterialCreator:
has_parsed = True
elif hasattr(element, "RepresentationMaps"):
for representation_map in element.RepresentationMaps:
- if self.parse_representation(representation_map.MappedRepresentation):
+ if not representation_map.MappedRepresentation:
+ has_parsed = True # Accommodate invalid IFC data from Revit
+ elif self.parse_representation(representation_map.MappedRepresentation):
has_parsed = True
return has_parsed
@@ -214,20 +216,8 @@ class IfcImporter:
self.ifc_import_settings = ifc_import_settings
self.diff = None
self.file = None
- self.settings = ifcopenshell.geom.settings()
- self.settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
- self.settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance)
- self.settings.set(self.settings.STRICT_TOLERANCE, True)
- self.settings_body_2d = ifcopenshell.geom.settings()
- self.settings_body_2d.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
- self.settings_body_2d.set_angular_tolerance(self.ifc_import_settings.angular_tolerance)
- self.settings_body_2d.set(self.settings_body_2d.STRICT_TOLERANCE, True)
- self.settings_body_2d.set(self.settings_body_2d.INCLUDE_CURVES, True)
- self.settings_native = ifcopenshell.geom.settings()
- self.settings_native.set(self.settings_native.INCLUDE_CURVES, True)
- self.settings_plan_2d = ifcopenshell.geom.settings()
- self.settings_plan_2d.set(self.settings_plan_2d.INCLUDE_CURVES, True)
- self.settings_plan_2d.set(self.settings_plan_2d.STRICT_TOLERANCE, True)
+ self.context_settings = []
+ self.contexts = []
self.project = None
self.has_existing_project = False
self.collections = {}
@@ -311,7 +301,8 @@ class IfcImporter:
self.profile_code("Merging by colour")
self.set_default_context()
self.profile_code("Setting default context")
- self.setup_viewport_camera()
+ if self.ifc_import_settings.should_setup_viewport_camera:
+ self.setup_viewport_camera()
self.setup_arrays()
self.update_progress(100)
bpy.context.window_manager.progress_end()
@@ -335,34 +326,83 @@ class IfcImporter:
return abs(coords[0]) > limit or abs(coords[1]) > limit or abs(coords[2]) > limit
def process_context_filter(self):
- # Facetation is to accommodate broken Revit files
- # See https://forums.buildingsmart.org/t/suggestions-on-how-to-improve-clarity-of-representation-context-usage-in-documentation/3663/6?u=moult
- self.body_contexts = [
- c.id()
- for c in self.file.by_type("IfcGeometricRepresentationSubContext")
- if c.ContextIdentifier in ["Body", "Facetation"]
- ]
- # Ideally, all representations should be in a subcontext, but some BIM programs don't do this correctly
- if not self.body_contexts:
- self.body_contexts.extend(
- [
- c.id()
- for c in self.file.by_type("IfcGeometricRepresentationContext", include_subtypes=False)
- if c.ContextType == "Model"
- ]
- )
- if self.body_contexts:
- self.settings.set_context_ids(self.body_contexts)
- self.settings_body_2d.set_context_ids(self.body_contexts)
# Annotation ContextType is to accommodate broken Revit files
# See https://github.com/Autodesk/revit-ifc/issues/187
- self.plan_contexts = [
- c.id()
- for c in self.file.by_type("IfcGeometricRepresentationContext")
- if c.ContextType in ["Plan", "Annotation"] or c.ContextIdentifier == "Annotation"
+ type_priority = ["Model", "Plan", "Annotation"]
+ identifier_priority = [
+ "Body",
+ "Body-FallBack",
+ "Facetation",
+ "FootPrint",
+ "Profile",
+ "Surface",
+ "Reference",
+ "Axis",
+ "Clearance",
+ "Box",
+ "Lighting",
+ "Annotation",
+ "CoG",
]
- if self.plan_contexts:
- self.settings_plan_2d.set_context_ids(self.plan_contexts)
+ target_view_priority = [
+ "MODEL_VIEW",
+ "PLAN_VIEW",
+ "REFLECTED_PLAN_VIEW",
+ "ELEVATION_VIEW",
+ "SECTION_VIEW",
+ "GRAPH_VIEW",
+ "SKETCH_VIEW",
+ "USERDEFINED",
+ "NOTDEFINED",
+ ]
+
+ def sort_context(context):
+ priority = []
+ if context.ContextType in type_priority:
+ priority.append(len(type_priority) - type_priority.index(context.ContextType))
+ else:
+ priority.append(0)
+ return tuple(priority)
+
+ def sort_subcontext(context):
+ priority = []
+
+ if context.ContextType in type_priority:
+ priority.append(len(type_priority) - type_priority.index(context.ContextType))
+ else:
+ priority.append(0)
+
+ if context.ContextIdentifier in identifier_priority:
+ priority.append(len(identifier_priority) - identifier_priority.index(context.ContextIdentifier))
+ else:
+ priority.append(0)
+
+ if context.TargetView in target_view_priority:
+ priority.append(len(target_view_priority) - target_view_priority.index(context.TargetView))
+ else:
+ priority.append(0)
+
+ priority.append(context.TargetScale or 0) # Big then small
+
+ return tuple(priority)
+
+ # Ideally, all representations should be in a subcontext, but some BIM programs don't do this correctly
+ self.contexts = sorted(
+ self.file.by_type("IfcGeometricRepresentationSubContext"), key=sort_subcontext, reverse=True
+ ) + sorted(
+ self.file.by_type("IfcGeometricRepresentationContext", include_subtypes=False),
+ key=sort_context,
+ reverse=True,
+ )
+
+ for context in self.contexts:
+ settings = ifcopenshell.geom.settings()
+ settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
+ settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance)
+ settings.set(settings.STRICT_TOLERANCE, True)
+ settings.set(settings.INCLUDE_CURVES, True)
+ settings.set_context_ids([context.id()])
+ self.context_settings.append(settings)
def process_element_filter(self):
offset = self.ifc_import_settings.element_offset
@@ -433,13 +473,51 @@ class IfcImporter:
or getattr(element, "HasOpenings", None)
):
return
- representations = self.get_transformed_body_representations(element.Representation.Representations)
+
+ representation = None
+ representation_priority = None
+ context = None
+
+ for rep in element.Representation.Representations:
+ if rep.ContextOfItems in self.contexts:
+ rep_priority = self.contexts.index(rep.ContextOfItems)
+ if representation is None or rep_priority < representation_priority:
+ representation = rep
+ representation_priority = rep_priority
+ context = rep.ContextOfItems
+
+ if not representation:
+ return
+
+ matrix = np.eye(4)
+ representation_id = None
+
+ rep = representation
+ while True:
+ if len(rep.Items) == 1 and rep.Items[0].is_a("IfcMappedItem"):
+ rep_matrix = ifcopenshell.util.placement.get_mappeditem_transformation(rep.Items[0])
+ if not np.allclose(rep_matrix, np.eye(4)):
+ matrix = rep_matrix @ matrix
+ if representation_id is None:
+ representation_id = rep.id()
+ rep = rep.Items[0].MappingSource.MappedRepresentation
+ else:
+ if representation_id is None:
+ representation_id = rep.id()
+ break
+ resolved_representation = ifcopenshell.util.representation.resolve_representation(representation)
+
+ matrix[0][3] *= self.unit_scale
+ matrix[1][3] *= self.unit_scale
+ matrix[2][3] *= self.unit_scale
# Single swept disk solids (e.g. rebar) are better natively represented as beveled curves
- if self.is_native_swept_disk_solid(element, representations):
+ if self.is_native_swept_disk_solid(element, resolved_representation):
self.native_data[element.GlobalId] = {
- "representations": representations,
- "representation": self.get_body_representation(element.Representation.Representations),
+ "matrix": matrix,
+ "context": context,
+ "geometry_id": representation_id,
+ "representation": resolved_representation,
"type": "IfcSweptDiskSolid",
}
return True
@@ -448,51 +526,53 @@ class IfcImporter:
return False # Performance improvements only occur on edge cases currently
# FacetedBreps (without voids) are meshes. See #841.
- if self.is_native_faceted_brep(representations):
+ if self.is_native_faceted_brep(resolved_representation):
self.native_data[element.GlobalId] = {
- "representations": representations,
- "representation": self.get_body_representation(element.Representation.Representations),
+ "matrix": matrix,
+ "context": context,
+ "geometry_id": representation_id,
+ "representation": resolved_representation,
"type": "IfcFacetedBrep",
}
return True
- if self.is_native_face_based_surface_model(representations):
+ if self.is_native_face_based_surface_model(resolved_representation):
self.native_data[element.GlobalId] = {
- "representations": representations,
- "representation": self.get_body_representation(element.Representation.Representations),
+ "matrix": matrix,
+ "context": context,
+ "geometry_id": representation_id,
+ "representation": resolved_representation,
"type": "IfcFaceBasedSurfaceModel",
}
return True
- def is_native_swept_disk_solid(self, element, representations):
- for representation in representations:
- items = representation["raw"].Items or [] # Be forgiving of invalid IFCs because Revit :(
- if len(items) == 1 and items[0].is_a("IfcSweptDiskSolid"):
- if tool.Blender.Modifier.is_railing(element):
- return False
- return True
- elif len(items) and ( # See #2508 why we accommodate for invalid IFCs here
- items[0].is_a("IfcSweptDiskSolid")
- and len({i.is_a() for i in items}) == 1
- and len({i.Radius for i in items}) == 1
- ):
- if tool.Blender.Modifier.is_railing(element):
- return False
- return True
+ def is_native_swept_disk_solid(self, element, representation):
+ items = [i["item"] for i in ifcopenshell.util.representation.resolve_items(representation)]
+ if len(items) == 1 and items[0].is_a("IfcSweptDiskSolid"):
+ if tool.Blender.Modifier.is_railing(element):
+ return False
+ return True
+ elif len(items) and ( # See #2508 why we accommodate for invalid IFCs here
+ items[0].is_a("IfcSweptDiskSolid")
+ and len({i.is_a() for i in items}) == 1
+ and len({i.Radius for i in items}) == 1
+ ):
+ if tool.Blender.Modifier.is_railing(element):
+ return False
+ return True
return False
- def is_native_faceted_brep(self, representations):
- for representation in representations:
- for i in representation["raw"].Items:
- if i.is_a() != "IfcFacetedBrep":
- return False
+ def is_native_faceted_brep(self, representation):
+ # TODO handle mapped items
+ for i in representation.Items:
+ if i.is_a() != "IfcFacetedBrep":
+ return False
return True
- def is_native_face_based_surface_model(self, representations):
- for representation in representations:
- for i in representation["raw"].Items:
- if i.is_a() != "IfcFaceBasedSurfaceModel":
- return False
+ def is_native_face_based_surface_model(self, representation):
+ for i in representation.Items:
+ if i.is_a() != "IfcFaceBasedSurfaceModel":
+ return False
return True
def get_products_from_shape_representation(self, element):
@@ -590,13 +670,9 @@ class IfcImporter:
return
if not self.does_element_likely_have_geometry_far_away(element):
continue
- try:
- shape = ifcopenshell.geom.create_shape(self.settings, element)
- except:
- try:
- shape = ifcopenshell.geom.create_shape(self.settings_body_2d, element)
- except:
- continue
+ shape = self.create_generic_shape(element)
+ if not shape:
+ continue
m = shape.transformation.matrix.data
mat = np.array(
([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])
@@ -668,7 +744,7 @@ class IfcImporter:
self.ifc_import_settings.logger.error("An invalid grid was found %s", grid)
continue
if grid.Representation:
- shape = ifcopenshell.geom.create_shape(self.settings_plan_2d, grid)
+ shape = self.create_generic_shape(grid)
grid_obj = self.create_product(grid, shape)
if bpy.context.preferences.addons["blenderbim"].preferences.lock_grids_on_import:
grid_obj.lock_location = (True, True, True)
@@ -687,7 +763,7 @@ class IfcImporter:
def create_grid_axes(self, axes, grid_collection, grid_obj):
for axis in axes:
- shape = ifcopenshell.geom.create_shape(self.settings_plan_2d, axis.AxisCurve)
+ shape = self.create_generic_shape(axis.AxisCurve)
mesh = self.create_mesh(axis, shape)
obj = bpy.data.objects.new(f"IfcGridAxis/{axis.AxisTag}", mesh)
if bpy.context.preferences.addons["blenderbim"].preferences.lock_grids_on_import:
@@ -707,27 +783,21 @@ class IfcImporter:
self.ifc_import_settings.logger.info("Creating object %s", element)
mesh = None
if self.ifc_import_settings.should_load_geometry:
- representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
- if not representation:
- representation = ifcopenshell.util.representation.get_representation(element, "Plan", "Annotation")
- if not representation:
- representation = ifcopenshell.util.representation.get_representation(element, "Model", "Annotation")
- if representation:
+ for context in self.contexts:
+ representation = ifcopenshell.util.representation.get_representation(element, context)
+ if not representation:
+ continue
mesh_name = "{}/{}".format(representation.ContextOfItems.id(), representation.id())
mesh = self.meshes.get(mesh_name)
if mesh is None:
- shape = None
- try:
- shape = ifcopenshell.geom.create_shape(self.settings, representation)
- except:
- try:
- shape = ifcopenshell.geom.create_shape(self.settings_plan_2d, representation)
- except:
- self.ifc_import_settings.logger.error("Failed to generate shape for %s", element)
+ shape = self.create_generic_shape(representation)
if shape:
mesh = self.create_mesh(element, shape)
tool.Loader.link_mesh(shape, mesh)
self.meshes[mesh_name] = mesh
+ else:
+ self.ifc_import_settings.logger.error("Failed to generate shape for %s", element)
+ break
obj = bpy.data.objects.new(tool.Loader.get_name(element), mesh)
self.link_element(element, obj)
self.material_creator.create(element, obj, mesh)
@@ -751,20 +821,16 @@ class IfcImporter:
checkpoint = time.time()
self.incrementally_merge_objects()
native_data = self.native_data[element.GlobalId]
- representation = native_data["representation"]
- if not representation:
- continue
- context_id = representation.ContextOfItems.id() if hasattr(representation, "ContextOfItems") else 0
- mesh_name = f"{context_id}/{representation.id()}"
+ mesh_name = f"{native_data['context'].id()}/{native_data['geometry_id']}"
mesh = self.meshes.get(mesh_name)
if mesh is None:
if native_data["type"] == "IfcSweptDiskSolid":
- mesh = self.create_native_swept_disk_solid(element, mesh_name)
+ mesh = self.create_native_swept_disk_solid(element, mesh_name, native_data)
elif native_data["type"] == "IfcFacetedBrep":
- mesh = self.create_native_faceted_brep(element, mesh_name)
+ mesh = self.create_native_faceted_brep(element, mesh_name, native_data)
elif native_data["type"] == "IfcFaceBasedSurfaceModel":
- mesh = self.create_native_faceted_brep(element, mesh_name)
- tool.Ifc.link(representation, mesh)
+ mesh = self.create_native_faceted_brep(element, mesh_name, native_data)
+ tool.Ifc.link(tool.Ifc.get().by_id(native_data["geometry_id"]), mesh)
mesh.name = mesh_name
self.meshes[mesh_name] = mesh
self.create_product(element, mesh=mesh)
@@ -776,21 +842,25 @@ class IfcImporter:
def create_elements(self):
self.create_generic_elements(self.elements)
+ def create_generic_shape(self, element):
+ for settings in self.context_settings:
+ try:
+ result = ifcopenshell.geom.create_shape(settings, element)
+ if result:
+ return result
+ except:
+ pass
+
def create_generic_elements(self, elements):
if isinstance(self.file, ifcopenshell.sqlite):
return self.create_generic_sqlite_elements(elements)
- # Based on my experience in viewing BIM models, representations are prioritised as follows:
- # 1. 3D Body, 2. 2D Body, 3. 2D Plans / annotations, 4. Point clouds, 5. No representation
- # If an element has a representation that doesn't follow 1, 2, 3, or 4, it will not show by default.
- # The user can load them later if they want to view them.
if self.ifc_import_settings.should_load_geometry:
- products = self.create_products(elements)
- elements -= products
- products = self.create_products(elements, settings=self.settings_body_2d)
- elements -= products
- products = self.create_products(elements, settings=self.settings_plan_2d)
- elements -= products
+ for settings in self.context_settings:
+ if not elements:
+ break
+ products = self.create_products(elements, settings=settings)
+ elements -= products
products = self.create_pointclouds(elements)
elements -= products
@@ -848,9 +918,6 @@ class IfcImporter:
self.create_product(element, mesh=mesh)
def create_products(self, products, settings=None):
- if settings is None:
- settings = self.settings
-
results = set()
if not products:
return results
@@ -887,16 +954,8 @@ class IfcImporter:
shape = iterator.get()
if shape:
product = self.file.by_id(shape.id)
- if self.body_contexts:
- self.create_product(product, shape)
- results.add(product)
- else:
- if shape.context not in ["Body", "Facetation"] and IfcStore.get_element(shape.id):
- # We only load a single context, and we prioritise the Body context. See #1290.
- pass
- else:
- self.create_product(product, shape)
- results.add(product)
+ self.create_product(product, shape)
+ results.add(product)
if not iterator.next():
break
print("Done creating geometry")
@@ -924,10 +983,10 @@ class IfcImporter:
self.structural_collection.children.link(self.structural_connection_collection)
self.project["blender"].children.link(self.structural_collection)
- self.create_products(self.file.by_type("IfcStructuralCurveMember"), settings=self.settings_plan_2d)
- self.create_products(self.file.by_type("IfcStructuralCurveConnection"), settings=self.settings_plan_2d)
- self.create_products(self.file.by_type("IfcStructuralSurfaceMember"), settings=self.settings_plan_2d)
- self.create_products(self.file.by_type("IfcStructuralSurfaceConnection"), settings=self.settings_plan_2d)
+ self.create_generic_elements(set(self.file.by_type("IfcStructuralCurveMember")))
+ self.create_generic_elements(set(self.file.by_type("IfcStructuralCurveConnection")))
+ self.create_generic_elements(set(self.file.by_type("IfcStructuralSurfaceMember")))
+ self.create_generic_elements(set(self.file.by_type("IfcStructuralSurfaceConnection")))
self.create_structural_point_connections()
def create_structural_point_connections(self):
@@ -1076,7 +1135,7 @@ class IfcImporter:
elif style.is_a("IfcPresentationStyleAssignment"):
styles.extend(style.Styles)
- def create_native_faceted_brep(self, element, mesh_name):
+ def create_native_faceted_brep(self, element, mesh_name, native_data):
# TODO: georeferencing?
# co [x y z x y z x y z ...]
# vertex_index [i i i i i ...]
@@ -1093,10 +1152,11 @@ class IfcImporter:
"material_ids": [],
}
- for representation in element.Representation.Representations:
- if representation.ContextOfItems.id() not in self.body_contexts:
- continue
- self.convert_representation(representation)
+ for item in native_data["representation"].Items:
+ if item.is_a() == "IfcFacetedBrep":
+ self.convert_representation_item_faceted_brep(item)
+ elif item.is_a() == "IfcFaceBasedSurfaceModel":
+ self.convert_representation_item_face_based_surface_model(item)
mesh = bpy.data.meshes.new("Native")
@@ -1113,19 +1173,33 @@ class IfcImporter:
)
verts = [None] * len(self.mesh_data["co"])
for i in range(0, len(self.mesh_data["co"]), 3):
- verts[i], verts[i + 1], verts[i + 2] = ifcopenshell.util.geolocation.enh2xyz(
- self.mesh_data["co"][i] * self.unit_scale,
- self.mesh_data["co"][i + 1] * self.unit_scale,
- self.mesh_data["co"][i + 2] * self.unit_scale,
- offset_point[0] * self.unit_scale,
- offset_point[1] * self.unit_scale,
- offset_point[2] * self.unit_scale,
- float(props.blender_x_axis_abscissa),
- float(props.blender_x_axis_ordinate),
+ verts[i], verts[i + 1], verts[i + 2], _ = native_data["matrix"] @ mathutils.Vector(
+ (
+ *ifcopenshell.util.geolocation.enh2xyz(
+ self.mesh_data["co"][i] * self.unit_scale,
+ self.mesh_data["co"][i + 1] * self.unit_scale,
+ self.mesh_data["co"][i + 2] * self.unit_scale,
+ offset_point[0] * self.unit_scale,
+ offset_point[1] * self.unit_scale,
+ offset_point[2] * self.unit_scale,
+ float(props.blender_x_axis_abscissa),
+ float(props.blender_x_axis_ordinate),
+ ),
+ 1,
+ )
)
mesh["has_cartesian_point_offset"] = True
else:
- verts = [c * self.unit_scale for c in self.mesh_data["co"]]
+ verts = [None] * len(self.mesh_data["co"])
+ for i in range(0, len(self.mesh_data["co"]), 3):
+ verts[i], verts[i + 1], verts[i + 2], _ = native_data["matrix"] @ mathutils.Vector(
+ (
+ self.mesh_data["co"][i] * self.unit_scale,
+ self.mesh_data["co"][i + 1] * self.unit_scale,
+ self.mesh_data["co"][i + 2] * self.unit_scale,
+ 1,
+ )
+ )
mesh["has_cartesian_point_offset"] = False
mesh.vertices.add(self.mesh_data["total_verts"])
@@ -1135,25 +1209,13 @@ class IfcImporter:
mesh.polygons.add(self.mesh_data["total_polygons"])
mesh.polygons.foreach_set("loop_start", self.mesh_data["loop_start"])
mesh.polygons.foreach_set("loop_total", self.mesh_data["loop_total"])
+ mesh.polygons.foreach_set("use_smooth", [0] * self.mesh_data["total_polygons"])
mesh.update()
mesh["ios_materials"] = self.mesh_data["materials"]
mesh["ios_material_ids"] = self.mesh_data["material_ids"]
return mesh
- def convert_representation(self, representation):
- for item in representation.Items:
- self.convert_representation_item(item)
-
- def convert_representation_item(self, item):
- if item.is_a("IfcMappedItem"):
- # mapping_target = matrix
- self.convert_representation(item.MappingSource.MappedRepresentation)
- elif item.is_a() == "IfcFacetedBrep":
- self.convert_representation_item_faceted_brep(item)
- elif item.is_a() == "IfcFaceBasedSurfaceModel":
- self.convert_representation_item_face_based_surface_model(item)
-
def convert_representation_item_face_based_surface_model(self, item):
mesh = item.get_info_2(recursive=True)
for face_set in mesh["FbsmFaces"]:
@@ -1248,63 +1310,39 @@ class IfcImporter:
self.mesh_data["loop_start"].extend(loop_start)
# list(di1.keys())
- def create_native_swept_disk_solid(self, element, mesh_name):
+ def create_native_swept_disk_solid(self, element, mesh_name, native_data):
# TODO: georeferencing?
curve = bpy.data.curves.new(mesh_name, type="CURVE")
curve.dimensions = "3D"
curve.resolution_u = 2
polyline = curve.splines.new("POLY")
- for representation in self.native_data[element.GlobalId]["representations"]:
- for item in representation["raw"].Items:
- # TODO: support inner radius, start param, and end param
- geometry = ifcopenshell.geom.create_shape(self.settings_native, item.Directrix)
- e = geometry.edges
- v = geometry.verts
- vertices = [[v[i], v[i + 1], v[i + 2], 1] for i in range(0, len(v), 3)]
- edges = [[e[i], e[i + 1]] for i in range(0, len(e), 2)]
- v2 = None
- for edge in edges:
- v1 = vertices[edge[0]]
- if v1 != v2:
- polyline = curve.splines.new("POLY")
- polyline.points[-1].co = representation["matrix"] @ mathutils.Vector(v1)
- v2 = vertices[edge[1]]
- polyline.points.add(1)
- polyline.points[-1].co = representation["matrix"] @ mathutils.Vector(v2)
+ for item_data in ifcopenshell.util.representation.resolve_items(native_data["representation"]):
+ item = item_data["item"]
+ matrix = item_data["matrix"]
+ matrix[0][3] *= self.unit_scale
+ matrix[1][3] *= self.unit_scale
+ matrix[2][3] *= self.unit_scale
+ # TODO: support inner radius, start param, and end param
+ geometry = self.create_generic_shape(item.Directrix)
+ e = geometry.edges
+ v = geometry.verts
+ vertices = [list(matrix @ [v[i], v[i + 1], v[i + 2], 1]) for i in range(0, len(v), 3)]
+ edges = [[e[i], e[i + 1]] for i in range(0, len(e), 2)]
+ v2 = None
+ for edge in edges:
+ v1 = vertices[edge[0]]
+ if v1 != v2:
+ polyline = curve.splines.new("POLY")
+ polyline.points[-1].co = native_data["matrix"] @ mathutils.Vector(v1)
+ v2 = vertices[edge[1]]
+ polyline.points.add(1)
+ polyline.points[-1].co = native_data["matrix"] @ mathutils.Vector(v2)
curve.bevel_depth = self.unit_scale * item.Radius
curve.use_fill_caps = True
return curve
- def create_native_annotation(self, element, mesh_name):
- # TODO: georeferencing?
- curve = bpy.data.curves.new(mesh_name, type="CURVE")
- curve.dimensions = "3D"
- curve.resolution_u = 2
- polyline = curve.splines.new("POLY")
-
- for representation in self.native_data[element.GlobalId]["representations"]:
- for item in representation["raw"].Items:
- # TODO: support inner radius, start param, and end param
- geometry = ifcopenshell.geom.create_shape(self.settings_native, item.Directrix)
- e = geometry.edges
- v = geometry.verts
- vertices = [[v[i], v[i + 1], v[i + 2], 1] for i in range(0, len(v), 3)]
- edges = [[e[i], e[i + 1]] for i in range(0, len(e), 2)]
- v2 = None
- for edge in edges:
- v1 = vertices[edge[0]]
- if v1 != v2:
- polyline = curve.splines.new("POLY")
- polyline.points[-1].co = representation["matrix"] @ mathutils.Vector(v1)
- v2 = vertices[edge[1]]
- polyline.points.add(1)
- polyline.points[-1].co = representation["matrix"] @ mathutils.Vector(v2)
-
- curve.bevel_depth = self.unit_scale * item.Radius
- return curve
-
def merge_by_class(self):
merge_set = {}
id_set = {}
@@ -1369,7 +1407,8 @@ class IfcImporter:
context_override = {}
context_override["object"] = context_override["active_object"] = target
context_override["selected_objects"] = context_override["selected_editable_objects"] = objs
- bpy.ops.object.join(context_override)
+ with bpy.context.temp_override(**context_override):
+ bpy.ops.object.join()
target.data.name += "-merge"
for ifc_definition_id in id_set[group_name][1:]:
del self.added_data[ifc_definition_id]
@@ -1426,11 +1465,10 @@ class IfcImporter:
types_collection.hide_viewport = False
bpy.context.view_layer.objects.active = last_obj
- context_override = {}
- bpy.ops.object.editmode_toggle(context_override)
- bpy.ops.mesh.tris_convert_to_quads(context_override)
- bpy.ops.mesh.normals_make_consistent(context_override)
- bpy.ops.object.editmode_toggle(context_override)
+ bpy.ops.object.editmode_toggle()
+ bpy.ops.mesh.tris_convert_to_quads()
+ bpy.ops.mesh.normals_make_consistent()
+ bpy.ops.object.editmode_toggle()
types_collection.hide_viewport = True
bpy.context.view_layer.objects.active = last_obj
@@ -1706,41 +1744,6 @@ class IfcImporter:
result[2][3] *= self.unit_scale
return result
- def get_body_representation(self, representations):
- for representation in representations:
- if (
- representation.RepresentationIdentifier == "Body"
- and representation.RepresentationType == "MappedRepresentation"
- ):
- if len(representation.Items) > 1:
- return representation
- return self.get_body_representation([representation.Items[0].MappingSource.MappedRepresentation])
- elif representation.RepresentationIdentifier == "Body":
- return representation
-
- def get_transformed_body_representations(self, representations, matrix=None):
- if matrix is None:
- matrix = mathutils.Matrix()
- results = []
- for representation in representations:
- if (
- representation.RepresentationIdentifier == "Body"
- and representation.RepresentationType == "MappedRepresentation"
- ):
- for item in representation.Items:
- # TODO: Confirm if this transformation is right
- transform = self.get_axis2placement(item.MappingSource.MappingOrigin)
- if item.MappingTarget:
- transform = transform @ self.get_cartesiantransformationoperator(item.MappingTarget)
- results.extend(
- self.get_transformed_body_representations(
- [item.MappingSource.MappedRepresentation], transform @ matrix
- )
- )
- elif representation.RepresentationIdentifier == "Body":
- results.append({"raw": representation, "matrix": self.scale_matrix(matrix)})
- return results
-
def scale_matrix(self, matrix):
matrix[0][3] *= self.unit_scale
matrix[1][3] *= self.unit_scale
@@ -1923,7 +1926,7 @@ class IfcImporter:
def link_element(self, element, obj):
self.added_data[element.id()] = obj
- IfcStore.link_element(element, obj)
+ tool.Ifc.link(element, obj)
def set_matrix_world(self, obj, matrix_world):
obj.matrix_world = matrix_world
@@ -1967,6 +1970,7 @@ class IfcImportSettings:
self.element_limit = 30000
self.has_filter = None
self.should_filter_spatial_elements = True
+ self.should_setup_viewport_camera = True
self.elements = set()
self.collection_mode = "DECOMPOSITION"
diff --git a/src/blenderbim/blenderbim/bim/module/boundary/decorator.py b/src/blenderbim/blenderbim/bim/module/boundary/decorator.py
index 360bdc6496..d48b60fe18 100644
--- a/src/blenderbim/blenderbim/bim/module/boundary/decorator.py
+++ b/src/blenderbim/blenderbim/bim/module/boundary/decorator.py
@@ -62,14 +62,14 @@ class BoundaryDecorator:
gpu.state.point_size_set(6)
gpu.state.blend_set("ALPHA")
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
self.line_shader.bind() # required to be able to change uniforms of the shader
# POLYLINE_UNIFORM_COLOR specific uniforms
self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height))
self.line_shader.uniform_float("lineWidth", 2.0)
# general shader
- self.shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ self.shader = gpu.shader.from_builtin("UNIFORM_COLOR")
selected_vertices = []
selected_edges = []
diff --git a/src/blenderbim/blenderbim/bim/module/boundary/operator.py b/src/blenderbim/blenderbim/bim/module/boundary/operator.py
index 4acf4b9e54..50c076e61c 100644
--- a/src/blenderbim/blenderbim/bim/module/boundary/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/boundary/operator.py
@@ -421,7 +421,7 @@ class EnableEditingBoundaryGeometry(bpy.types.Operator, tool.Ifc.Operator):
bpy.ops.object.mode_set(mode="EDIT")
ProfileDecorator.install(context, exit_edit_mode_callback=lambda: disable_editing_boundary_geometry(context))
if not bpy.app.background:
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/boundary/ui.py b/src/blenderbim/blenderbim/bim/module/boundary/ui.py
index 1e1068077f..fada4c0ca3 100644
--- a/src/blenderbim/blenderbim/bim/module/boundary/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/boundary/ui.py
@@ -31,7 +31,7 @@ class BIM_PT_SceneBoundaries(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_geometry"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/bsdd/ui.py b/src/blenderbim/blenderbim/bim/module/bsdd/ui.py
index 8577c3242a..9b0e3a8446 100644
--- a/src/blenderbim/blenderbim/bim/module/bsdd/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/bsdd/ui.py
@@ -28,7 +28,7 @@ class BIM_PT_bsdd(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
def draw(self, context):
props = context.scene.BIMBSDDProperties
diff --git a/src/blenderbim/blenderbim/bim/module/classification/ui.py b/src/blenderbim/blenderbim/bim/module/classification/ui.py
index f63c887fdf..9cc7a970a0 100644
--- a/src/blenderbim/blenderbim/bim/module/classification/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/classification/ui.py
@@ -36,7 +36,7 @@ class BIM_PT_classifications(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/constraint/ui.py b/src/blenderbim/blenderbim/bim/module/constraint/ui.py
index 2b017e89c3..0f3b522c7e 100644
--- a/src/blenderbim/blenderbim/bim/module/constraint/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/constraint/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_constraints(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/context/ui.py b/src/blenderbim/blenderbim/bim/module/context/ui.py
index c8fe010625..85635fe86b 100644
--- a/src/blenderbim/blenderbim/bim/module/context/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/context/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_context(bpy.types.Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_geometry"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/cost/data.py b/src/blenderbim/blenderbim/bim/module/cost/data.py
index 9786151c6b..12af066c9d 100644
--- a/src/blenderbim/blenderbim/bim/module/cost/data.py
+++ b/src/blenderbim/blenderbim/bim/module/cost/data.py
@@ -136,13 +136,11 @@ class CostSchedulesData:
data["UnitBasisUnitSymbol"] = "U"
if cost_value.Category == "*":
is_sum = True
+ cost_quantity = data["TotalCostQuantity"] or 1
if has_unit_basis:
- data["TotalCost"] = data["TotalAppliedValue"] / data["UnitBasisValueComponent"]
+ data["TotalCost"] = data["TotalAppliedValue"] * cost_quantity / data["UnitBasisValueComponent"]
else:
- if data["TotalCostQuantity"] is not None:
- data["TotalCost"] = data["TotalAppliedValue"] * data["TotalCostQuantity"]
- else:
- data["TotalCost"] = data["TotalAppliedValue"]
+ data["TotalCost"] = data["TotalAppliedValue"] * cost_quantity
if is_sum:
data["TotalAppliedValue"] = None
@@ -160,8 +158,10 @@ class CostSchedulesData:
unit = ifcopenshell.util.unit.get_property_unit(quantity, tool.Ifc.get())
if unit:
data["UnitSymbol"] = ifcopenshell.util.unit.get_unit_symbol(unit)
- else:
- data["UnitSymbol"] = "U"
+ if quantity.is_a("IfcPhysicalSimpleQuantity"):
+ measure_class = quantity.wrapped_data.declaration().as_entity().attribute_by_index(3).type_of_attribute().declared_type().name()
+ if "Count" in measure_class:
+ data["UnitSymbol"] = "U"
# same_unit_nested_cost_item = set()
# data["DerivedTotalCostQuantity"] = None
diff --git a/src/blenderbim/blenderbim/bim/module/covering/prop.py b/src/blenderbim/blenderbim/bim/module/covering/prop.py
index d66aac26cd..76cd6ee3e0 100644
--- a/src/blenderbim/blenderbim/bim/module/covering/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/covering/prop.py
@@ -30,11 +30,10 @@ from bpy.props import (
FloatVectorProperty,
CollectionProperty,
)
-import blenderbim.tool as tool
-import blenderbim.core.geometry
-import ifcopenshell
+#import blenderbim.tool as tool
+#import blenderbim.core.geometry
+#import ifcopenshell
class BIMCoveringProperties(PropertyGroup):
- pass
-# depth: bpy.props.FloatProperty(name="Depth", default=0.1, subtype="DISTANCE", description="Flooring depth")
+ ceiling_height: bpy.props.FloatProperty(name="ceiling_height", default=2.7, subtype="DISTANCE", description="Ceiling height")
diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py
index 336d3bc2ef..abae481529 100644
--- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py
+++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py
@@ -19,6 +19,7 @@
import os
import bpy
+import ifcopenshell
import blenderbim.tool as tool
from blenderbim.bim.helper import prop_with_search
from blenderbim.bim.module.model.data import AuthoringData
@@ -42,13 +43,15 @@ class CoveringTool(WorkSpaceTool):
bl_description = "Create and edit coverings"
bl_icon = os.path.join(os.path.dirname(__file__), "ops.authoring.covering")
bl_widget = None
+ ifc_element_type = "IfcCoveringType"
bl_keymap = tool.Blender.get_default_selection_keypmap() + (
("bim.covering_hotkey", {"type": "A", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_A")]}),
+ ("bim.covering_hotkey", {"type": "G", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_G")]}),
)
@classmethod
def draw_settings(cls, context, layout, ws_tool):
- CoveringToolUI.draw(context, layout, ifc_element_type="IfcCoveringType")
+ CoveringToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type)
def add_layout_hotkey(layout, text, hotkey, description):
args = ["covering", layout, text, hotkey, description]
@@ -61,6 +64,7 @@ class CoveringToolUI:
cls.props = context.scene.BIMModelProperties
cls.covering_props = context.scene.BIMCoveringProperties
+
row = cls.layout.row(align=True)
if not tool.Ifc.get():
row.label(text="No IFC Project", icon="ERROR")
@@ -71,7 +75,6 @@ class CoveringToolUI:
elif AuthoringData.data["ifc_element_type"] != ifc_element_type:
AuthoringData.load(ifc_element_type)
-
if context.region.type == "TOOL_HEADER":
cls.draw_header_interface()
elif context.region.type in ("UI", "WINDOW"):
@@ -87,15 +90,94 @@ class CoveringToolUI:
@classmethod
def draw_default_interface(cls):
+ row = cls.layout.row(align=True)
+ row.prop(data=cls.props, property="rl3", text="RL")
+ row = cls.layout.row(align=True)
+ row.prop(data=cls.covering_props, property="ceiling_height", text="Ceiling Height")
if AuthoringData.data["ifc_classes"]:
- row = cls.layout.row(align=True)
- row.label(text="", icon="EVENT_SHIFT")
- row.label(text="", icon="EVENT_A")
active_obj = bpy.context.active_object
element = tool.Ifc.get_entity(active_obj)
- if element and bpy.context.selected_objects and element.is_a("IfcWall"):
- op = row.operator("bim.add_instance_flooring_coverings_from_walls")
+ collection = bpy.context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+
+ relating_type_id = int(cls.props.relating_type_id)
+ type_material_usage = ifcopenshell.util.element.get_material(tool.Ifc.get().by_id(relating_type_id)).is_a()
+
+# PLEASE KEEP COMMENTS AS A REMINDER
+# elif element and bpy.context.selected_objects and element.is_a("IfcSpace"):
+# op. = row.operator("bim.add_istance_flooring_from_spaces"):
+
+ if (type_material_usage == "IfcMaterialLayerSet" and
+ not bpy.context.selected_objects):
+ row = cls.layout.row(align=True)
+ row.label(text="", icon="EVENT_SHIFT")
+ row.label(text="", icon="EVENT_A")
+ if tool.Ifc.get_entity(collection_obj):
+ if AuthoringData.data["predefined_type"] == "FLOORING":
+ op = row.operator("bim.add_instance_flooring_covering_from_cursor")
+ elif AuthoringData.data["predefined_type"] == "CEILING":
+ op = row.operator("bim.add_instance_ceiling_covering_from_cursor")
+ else:
+ op = row.operator("bim.add_constr_type_instance", text="Add")
+ op.from_invoke = True
+ if cls.props.relating_type_id.isnumeric():
+ op.relating_type_id = int(cls.props.relating_type_id)
+
+ else:
+ op = row.operator("bim.add_constr_type_instance", text="Add")
+ op.from_invoke = True
+ if cls.props.relating_type_id.isnumeric():
+ op.relating_type_id = int(cls.props.relating_type_id)
+
+ elif (AuthoringData.data["predefined_type"] == "FLOORING" and
+ type_material_usage == "IfcMaterialLayerSet" and
+ element and
+ bpy.context.selected_objects and
+ element.is_a("IfcWall")):
+ row = cls.layout.row(align=True)
+ row.label(text="", icon="EVENT_SHIFT")
+ row.label(text="", icon="EVENT_A")
+ op = row.operator("bim.add_instance_flooring_coverings_from_walls")
+
+ elif (AuthoringData.data["predefined_type"] == "CEILING" and
+ type_material_usage == "IfcMaterialLayerSet" and
+ element and
+ bpy.context.selected_objects and
+ element.is_a("IfcWall")):
+ row = cls.layout.row(align=True)
+ row.label(text="", icon="EVENT_SHIFT")
+ row.label(text="", icon="EVENT_A")
+ op = row.operator("bim.add_instance_ceiling_coverings_from_walls")
+
+ elif (element and
+ bpy.context.selected_objects and
+ element.is_a("IfcCovering") and
+# AuthoringData.data["predefined_type"] == "FLOORING" and
+ AuthoringData.data["active_material_usage"] == "LAYER3"):
+ row = cls.layout.row(align=True)
+ row.label(text="", icon="EVENT_SHIFT")
+ row.label(text="", icon="EVENT_G")
+ op = row.operator("bim.regen_selected_covering_object")
+
+
+
+# elif AuthoringData.data["predefined_type"] == "CEILING":
+# row = cls.layout.row(align=True)
+# row.prop(data=cls.props, property="ceiling_height", text="ceiling height")
+# if element and bpy.context.selected_objects and element.is_a("IfcWall"):
+# op = row.operator("bim.add_instance_ceiling_coverings_from_walls")
+# elif element and bpy.context.selected_objects and element.is_a("IfcSpace"):
+# op. = row.operator("bim.add_istance_flooring_from_spaces"):
+# else:
+# op = row.operator("bim.add_instance_ceiling_from_cursor")
+# op = row.operator("bim.add_constr_type_instance", text="Add")
+# op.from_invoke = True
+# if cls.props.relating_type_id.isnumeric():
+# op.relating_type_id = int(cls.props.relating_type_id)
else:
+ row = cls.layout.row(align=True)
+ row.label(text="", icon="EVENT_SHIFT")
+ row.label(text="", icon="EVENT_A")
op = row.operator("bim.add_constr_type_instance", text="Add")
op.from_invoke = True
if cls.props.relating_type_id.isnumeric():
@@ -159,8 +241,32 @@ class Hotkey(bpy.types.Operator, Operator):
def hotkey_S_A(self):
active_obj = bpy.context.active_object
element = tool.Ifc.get_entity(active_obj)
- if element and bpy.context.selected_objects and element.is_a("IfcWall"):
- bpy.ops.bim.add_instance_flooring_coverings_from_walls()
+ collection = bpy.context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+
+ if AuthoringData.data["predefined_type"] == "FLOORING":
+ if element and bpy.context.selected_objects and element.is_a("IfcWall"):
+ bpy.ops.bim.add_instance_flooring_coverings_from_walls()
+ elif tool.Ifc.get_entity(collection_obj):
+ bpy.ops.bim.add_instance_flooring_covering_from_cursor()
+ else:
+ bpy.ops.bim.add_constr_type_instance()
+ elif AuthoringData.data["predefined_type"] == "CEILING":
+ if element and bpy.context.selected_objects and element.is_a("IfcWall"):
+ bpy.ops.bim.add_instance_ceiling_coverings_from_walls()
+ elif tool.Ifc.get_entity(collection_obj):
+ bpy.ops.bim.add_instance_ceiling_covering_from_cursor()
+ else:
+ bpy.ops.bim.add_constr_type_instance()
else:
bpy.ops.bim.add_constr_type_instance()
+ def hotkey_S_G(self):
+ active_obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(active_obj)
+ if (element and
+ bpy.context.selected_objects and
+ element.is_a("IfcCovering") and
+ AuthoringData.data["active_material_usage"] == "LAYER3"):
+ bpy.ops.bim.regen_selected_covering_object()
+
diff --git a/src/blenderbim/blenderbim/bim/module/csv/operator.py b/src/blenderbim/blenderbim/bim/module/csv/operator.py
index 78e980e99e..ee8de3647d 100644
--- a/src/blenderbim/blenderbim/bim/module/csv/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/csv/operator.py
@@ -207,6 +207,7 @@ class ExportIfcCsv(bpy.types.Operator):
empty=props.empty_value,
bool_true=props.true_value,
bool_false=props.false_value,
+ concat=props.concat_value,
sort=sort,
groups=groups,
summaries=summaries,
diff --git a/src/blenderbim/blenderbim/bim/module/csv/prop.py b/src/blenderbim/blenderbim/bim/module/csv/prop.py
index c04fc18ee6..1d696a61eb 100644
--- a/src/blenderbim/blenderbim/bim/module/csv/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/csv/prop.py
@@ -72,6 +72,7 @@ class CsvProperties(PropertyGroup):
empty_value: StringProperty(default="-", name="Empty String Value")
true_value: StringProperty(default="YES", name="True Value")
false_value: StringProperty(default="NO", name="False Value")
+ concat_value: StringProperty(default=", ", name="Concat Value")
csv_delimiter: EnumProperty(
items=[
(";", ";", ""),
diff --git a/src/blenderbim/blenderbim/bim/module/csv/ui.py b/src/blenderbim/blenderbim/bim/module/csv/ui.py
index 49e096c2bc..b5269e14f8 100644
--- a/src/blenderbim/blenderbim/bim/module/csv/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/csv/ui.py
@@ -79,6 +79,8 @@ class BIM_PT_ifccsv(Panel):
row.prop(props, "true_value")
row = layout.row()
row.prop(props, "false_value")
+ row = layout.row()
+ row.prop(props, "concat_value")
layout.use_property_split = False
blenderbim.bim.helper.draw_filter(self.layout, props, SearchData, "csv")
diff --git a/src/blenderbim/blenderbim/bim/module/debug/operator.py b/src/blenderbim/blenderbim/bim/module/debug/operator.py
index bad542c984..2b7d767a88 100644
--- a/src/blenderbim/blenderbim/bim/module/debug/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/debug/operator.py
@@ -218,7 +218,7 @@ class CreateAllShapes(bpy.types.Operator):
len(shape.geometry.edges),
len(shape.geometry.faces),
)
- print(f"Failures: {len(failures)}")
+ self.report({"INFO"}, f"Failed shapes: {len(failures)}, check the system console for details.")
for failure in failures:
print(failure)
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/document/ui.py b/src/blenderbim/blenderbim/bim/module/document/ui.py
index a656f4f576..289e2f992f 100644
--- a/src/blenderbim/blenderbim/bim/module/document/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/document/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_documents(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py
index 031d4a4972..6e0e9f80d2 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py
@@ -92,10 +92,10 @@ classes = (
prop.BIMTextProperties,
prop.BIMAssignedProductProperties,
prop.BIMAnnotationProperties,
- ui.BIM_PT_camera,
- ui.BIM_PT_drawing_underlay,
ui.BIM_PT_sheets,
ui.BIM_PT_drawings,
+ ui.BIM_PT_camera,
+ ui.BIM_PT_drawing_underlay,
ui.BIM_PT_schedules,
ui.BIM_PT_references,
ui.BIM_PT_product_assignments,
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/data.py b/src/blenderbim/blenderbim/bim/module/drawing/data.py
index 3d0a65b48f..a57e843b82 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/data.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/data.py
@@ -123,6 +123,8 @@ class DrawingsData:
[(str(s.id()), s.Name or "Unnamed", "") for s in tool.Ifc.get().by_type("IfcBuildingStorey")]
)
return results
+ elif bpy.context.scene.DocProperties.target_view in ["MODEL_VIEW"]:
+ return [(h.upper(), h, "") for h in ["Orthographic", "Perspective"]]
return [(h.upper(), h, "") for h in ["North", "South", "East", "West"]]
@classmethod
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py
index 2c0bf10b1f..a2195bdb7d 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py
@@ -161,9 +161,9 @@ class BaseDecorator:
os.path.join(bpy.context.scene.BIMProperties.data_dir, "fonts", "OpenGost Type B TT.ttf")
)
- # 3D_POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
- self.base_shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ # POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
+ self.base_shader = gpu.shader.from_builtin("UNIFORM_COLOR")
def get_camera_width_mm(self):
# Horrific prototype code to ensure bgl draws at drawing scales
@@ -390,8 +390,6 @@ class BaseDecorator:
# 0 is the default font, but we're fancier than that
font_id = self.font_id
- dpi = context.preferences.system.dpi
-
color = context.preferences.addons["blenderbim"].preferences.decorations_colour
ang = -Vector((1, 0)).angle_signed(text_dir)
@@ -411,7 +409,7 @@ class BaseDecorator:
font_size_px = int(0.004118616 * mm_to_px) * font_size_mm / 2.5
pos = pos - line_no * font_size_px * rotation_matrix[1]
- blf.size(font_id, font_size_px, dpi)
+ blf.size(font_id, font_size_px)
if box_alignment or center or vcenter:
w, h = blf.dimensions(font_id, text)
@@ -1563,15 +1561,15 @@ class CutDecorator:
gpu.state.point_size_set(1)
gpu.state.blend_set("ALPHA")
- # 3D_POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
+ # POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
self.line_shader.bind()
# POLYLINE_UNIFORM_COLOR specific uniforms
self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height))
self.line_shader.uniform_float("lineWidth", 2.0)
# general shader
- self.shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ self.shader = gpu.shader.from_builtin("UNIFORM_COLOR")
self.shader.bind()
black = (0, 0, 0, 1)
@@ -1931,7 +1929,7 @@ class DecorationsHandler:
if cls.installed:
cls.uninstall()
handler = cls()
- # NOTE: we USE POST_PIXEL here so that we can use both 3D_POLYLINE_UNIFORM_COLOR
+ # NOTE: we USE POST_PIXEL here so that we can use both POLYLINE_UNIFORM_COLOR
# and drawing text in the same handler. BUT this means that we supply coordinates in WINSPACE
cls.installed = SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_PIXEL")
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/handler.py b/src/blenderbim/blenderbim/bim/module/drawing/handler.py
index 1553e2cc98..d553fcb113 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/handler.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/handler.py
@@ -18,6 +18,7 @@
import bpy
import blenderbim.bim.module.drawing.decoration as decoration
+import blenderbim.tool as tool
from bpy.app.handlers import persistent
@@ -37,10 +38,28 @@ def depsgraph_update_pre_handler(scene):
def set_active_camera_resolution(scene):
if not scene.camera or "/" not in scene.camera.name or not scene.DocProperties.drawings:
return
+ props = scene.camera.data.BIMCameraProperties
+ ortho_scale = max((props.width, props.height))
+ aspect_ratio = props.width / props.height
if (
- scene.render.resolution_x != scene.camera.data.BIMCameraProperties.raster_x
- or scene.render.resolution_y != scene.camera.data.BIMCameraProperties.raster_y
+ (scene.camera.data.ortho_scale != ortho_scale)
+ or (scene.render.resolution_x / scene.render.resolution_y != aspect_ratio)
):
- scene.render.resolution_x = scene.camera.data.BIMCameraProperties.raster_x
- scene.render.resolution_y = scene.camera.data.BIMCameraProperties.raster_y
+ scene.camera.data.ortho_scale = ortho_scale
+
+ diagram_scale = tool.Drawing.get_diagram_scale(scene.camera)
+ scale_ratio = tool.Drawing.get_scale_ratio(diagram_scale["Scale"])
+
+ if props.width > props.height:
+ aspect_ratio = props.height / props.width
+ raster_x = ortho_scale * scale_ratio * props.dpi / 0.0254
+ raster_y = ortho_scale * aspect_ratio * scale_ratio * props.dpi / 0.0254
+ else:
+ aspect_ratio = props.width / props.height
+ raster_x = ortho_scale * aspect_ratio * scale_ratio * props.dpi / 0.0254
+ raster_y = ortho_scale * scale_ratio * props.dpi / 0.0254
+
+ scene.render.resolution_x = scene.camera.data.BIMCameraProperties.raster_x = int(raster_x)
+ scene.render.resolution_y = scene.camera.data.BIMCameraProperties.raster_y = int(raster_y)
+
current_drawing = scene.DocProperties.drawings[scene.DocProperties.current_drawing_index]
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py
index caa9ed66ed..05f0aaf9c5 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py
@@ -259,7 +259,9 @@ class CreateDrawing(bpy.types.Operator):
with profile("Combine SVG layers"):
svg_path = self.combine_svgs(context, underlay_svg, linework_svg, annotation_svg)
- tool.Drawing.open_with_user_command(context.preferences.addons["blenderbim"].preferences.svg_command, svg_path)
+ tool.Drawing.open_with_user_command(
+ context.preferences.addons["blenderbim"].preferences.svg_command, svg_path
+ )
if self.print_all:
bpy.ops.bim.activate_drawing(drawing=original_drawing_id, camera_view_point=False)
@@ -534,7 +536,7 @@ class CreateDrawing(bpy.types.Operator):
root = etree.fromstring(results)
group = root.find("{http://www.w3.org/2000/svg}g")
- if not group:
+ if group is None:
with open(svg_path, "wb") as svg:
svg.write(etree.tostring(root))
@@ -918,7 +920,7 @@ class CreateDrawing(bpy.types.Operator):
join_criteria = join_criteria.split(",")
else:
# Drawing convention states that same objects classes with the same material are merged when cut.
- join_criteria = ["class", "material.Name", 'r"Pset.*Common"."Status"']
+ join_criteria = ["class", "material.Name", "/Pset_.*Common/.Status", "EPset_Status.Status"]
group = root.find("{http://www.w3.org/2000/svg}g")
joined_paths = {}
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/prop.py b/src/blenderbim/blenderbim/bim/module/drawing/prop.py
index 0578ff8105..3374b9e97a 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/prop.py
@@ -312,7 +312,6 @@ class DocProperties(PropertyGroup):
should_use_underlay_cache: BoolProperty(name="Use Underlay Cache", default=False)
should_use_linework_cache: BoolProperty(name="Use Linework Cache", default=False)
should_use_annotation_cache: BoolProperty(name="Use Annotation Cache", default=False)
- should_extract: BoolProperty(name="Should Extract", default=True)
is_editing_drawings: BoolProperty(name="Is Editing Drawings", default=False)
is_editing_schedules: BoolProperty(name="Is Editing Schedules", default=False)
is_editing_references: BoolProperty(name="Is Editing References", default=False)
@@ -375,6 +374,9 @@ class BIMCameraProperties(PropertyGroup):
custom_scale_denominator: bpy.props.StringProperty(default="100", update=update_diagram_scale)
raster_x: IntProperty(name="Raster X", default=1000)
raster_y: IntProperty(name="Raster Y", default=1000)
+ dpi: IntProperty(name="DPI", default=75)
+ width: FloatProperty(name="Width", default=50, subtype="DISTANCE")
+ height: FloatProperty(name="Height", default=50, subtype="DISTANCE")
is_nts: BoolProperty(name="Is NTS", update=update_is_nts)
active_drawing_style_index: IntProperty(name="Active Drawing Style Index")
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/shaders.py b/src/blenderbim/blenderbim/bim/module/drawing/shaders.py
index 70d0742de5..1bd35ce297 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/shaders.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/shaders.py
@@ -288,9 +288,9 @@ class BaseShader:
"""
def __init__(self):
- # 3D_POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
- self.base_shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ # POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
+ self.base_shader = gpu.shader.from_builtin("UNIFORM_COLOR")
def get_shader(self):
"""Returns shader for this type"""
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py b/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
index ee0e5506e8..f4fd9a4503 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
@@ -160,7 +160,8 @@ class SheetBuilder:
x = float(image.attrib["x"])
y = float(image.attrib["y"])
if image.attrib["data-type"] == "view-title":
- image.attrib["x"] = str(x - readjust.x)
+ image.attrib["x"] = str(x + readjust.x)
+ # negate y offset because view-title comes AFTER foreground
image.attrib["y"] = str(y - readjust.y)
else:
image.attrib["x"] = str(x + readjust.x)
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py
index 0ded5f35e2..b56d5a795e 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py
@@ -160,7 +160,7 @@ class SvgWriter:
def find_xml_symbol_by_id(self, id):
tree = ET.parse(self.resource_paths["Symbols"])
xml_symbol = tree.find(f'.//*[@id="{id}"]')
- return External(xml_symbol) if xml_symbol else None
+ return External(xml_symbol) if xml_symbol is not None else None
def add_patterns(self):
path = self.resource_paths["Patterns"]
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py
index e96eb9defe..e051207dbc 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py
@@ -31,28 +31,28 @@ from blenderbim.bim.module.drawing.prop import ANNOTATION_TYPES_DATA
class BIM_PT_camera(Panel):
- bl_label = "Drawing Generation"
+ bl_label = "Active Drawing"
bl_idname = "BIM_PT_camera"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
- bl_context = "data"
-
- @classmethod
- def poll(cls, context):
- return context.camera and hasattr(context.active_object.data, "BIMCameraProperties")
+ bl_context = "scene"
+ bl_parent_id = "BIM_PT_tab_drawings"
def draw(self, context):
- layout = self.layout
-
- if "/" not in context.active_object.name:
- layout.label(text="This is not a BIM camera.")
+ if not (context.scene.camera and hasattr(context.scene.camera.data, "BIMCameraProperties")):
+ row = self.layout.row()
+ row.label(text="No Active Drawing", icon="ERROR")
return
- layout.use_property_split = True
- dprops = context.scene.DocProperties
- props = context.active_object.data.BIMCameraProperties
+ if "/" not in context.scene.camera.name:
+ self.layout.label(text="This is not a BIM camera.")
+ return
- col = layout.column(align=True)
+ self.layout.use_property_split = True
+ dprops = context.scene.DocProperties
+ props = context.scene.camera.data.BIMCameraProperties
+
+ col = self.layout.column(align=True)
row = col.row(align=True)
row.prop(props, "has_underlay", icon="OUTLINER_OB_IMAGE")
row.prop(dprops, "should_use_underlay_cache", text="", icon="FILE_REFRESH")
@@ -63,32 +63,36 @@ class BIM_PT_camera(Panel):
row.prop(props, "has_annotation", icon="MOD_EDGESPLIT")
row.prop(dprops, "should_use_annotation_cache", text="", icon="FILE_REFRESH")
- row = layout.row()
+ row = self.layout.row()
row.prop(props, "calculate_shapely_surfaces")
- row = layout.row()
+ row = self.layout.row()
row.prop(props, "calculate_svgfill_surfaces")
- row = layout.row()
- row.prop(dprops, "should_extract")
+ row = self.layout.row()
+ row.prop(props, "width")
+ row = self.layout.row()
+ row.prop(props, "height")
- row = layout.row()
- row.prop(props, "raster_x")
- row = layout.row()
- row.prop(props, "raster_y")
+ row = self.layout.row()
+ row.prop(context.scene.camera.data, "clip_end", text="Depth")
- row = layout.row(align=True)
- row.prop(props, "diagram_scale")
+ row = self.layout.row(align=True)
+ row.prop(props, "diagram_scale", text="Scale")
row.prop(props, "is_nts", text="", icon="MOD_EDGESPLIT")
if props.diagram_scale == "CUSTOM":
- row = layout.row(align=True)
+ row = self.layout.row(align=True)
row.prop(props, "custom_scale_numerator", text="Custom Scale")
row.prop(props, "custom_scale_denominator", text="")
- row = layout.row(align=True)
+ if props.has_underlay:
+ row = self.layout.row()
+ row.prop(props, "dpi")
+
+ row = self.layout.row(align=True)
row.operator("bim.create_drawing", text="Create Drawing", icon="OUTPUT")
op = row.operator("bim.open_drawing", icon="URL", text="")
- op.view = context.active_object.name.split("/")[1]
+ op.view = context.scene.camera.name.split("/")[1]
class BIM_PT_drawing_underlay(Panel):
@@ -97,12 +101,12 @@ class BIM_PT_drawing_underlay(Panel):
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
- bl_context = "data"
+ bl_context = "scene"
bl_parent_id = "BIM_PT_camera"
@classmethod
def poll(cls, context):
- return context.camera and hasattr(context.active_object.data, "BIMCameraProperties")
+ return context.scene.camera and hasattr(context.active_object.data, "BIMCameraProperties")
def draw(self, context):
layout = self.layout
@@ -164,10 +168,8 @@ class BIM_PT_drawings(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
-
- @classmethod
- def poll(cls, context):
- return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+ bl_parent_id = "BIM_PT_tab_drawings"
+ bl_options = {"HIDE_HEADER"}
def draw(self, context):
if not DrawingsData.is_loaded:
@@ -245,10 +247,8 @@ class BIM_PT_schedules(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
-
- @classmethod
- def poll(cls, context):
- return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+ bl_parent_id = "BIM_PT_tab_schedules"
+ bl_options = {"HIDE_HEADER"}
def draw(self, context):
if not DocumentsData.is_loaded:
@@ -297,10 +297,8 @@ class BIM_PT_references(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
-
- @classmethod
- def poll(cls, context):
- return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+ bl_parent_id = "BIM_PT_tab_references"
+ bl_options = {"HIDE_HEADER"}
def draw(self, context):
if not DocumentsData.is_loaded:
@@ -341,10 +339,8 @@ class BIM_PT_sheets(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
-
- @classmethod
- def poll(cls, context):
- return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+ bl_parent_id = "BIM_PT_tab_sheets"
+ bl_options = {"HIDE_HEADER"}
def draw(self, context):
if not SheetsData.is_loaded:
diff --git a/src/blenderbim/blenderbim/bim/module/fm/__init__.py b/src/blenderbim/blenderbim/bim/module/fm/__init__.py
index de3f0f9448..bae513a98f 100644
--- a/src/blenderbim/blenderbim/bim/module/fm/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/fm/__init__.py
@@ -20,8 +20,10 @@ import bpy
from . import ui, prop, operator
classes = (
- operator.SelectFMIfcFile,
operator.ExecuteIfcFM,
+ operator.ExecuteIfcFMFederate,
+ operator.SelectFMIfcFile,
+ operator.SelectFMSpreadsheetFiles,
prop.BIMFMProperties,
ui.BIM_PT_fm,
)
diff --git a/src/blenderbim/blenderbim/bim/module/fm/operator.py b/src/blenderbim/blenderbim/bim/module/fm/operator.py
index d48502790a..813ceae37a 100644
--- a/src/blenderbim/blenderbim/bim/module/fm/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/fm/operator.py
@@ -19,6 +19,7 @@
import os
import bpy
import json
+import ifcfm
import logging
import tempfile
import ifcopenshell
@@ -32,9 +33,16 @@ class SelectFMIfcFile(bpy.types.Operator):
filename_ext = ".ifc"
filter_glob: bpy.props.StringProperty(default="*.ifc;*.ifczip;*.ifcxml", options={"HIDDEN"})
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
+ files: bpy.props.CollectionProperty(name="File Path", type=bpy.types.OperatorFileListElement)
def execute(self, context):
- context.scene.BIMFMProperties.ifc_file = self.filepath
+ props = context.scene.BIMFMProperties
+ props.ifc_files.clear()
+ dirname = os.path.dirname(self.filepath)
+ for f in self.files:
+ new = props.ifc_files.add()
+ new.name = os.path.join(dirname, f.name)
+ props.ifc_file = self.filepath
return {"FINISHED"}
def invoke(self, context, event):
@@ -62,20 +70,87 @@ class ExecuteIfcFM(bpy.types.Operator):
return {"RUNNING_MODAL"}
def execute(self, context):
- import ifcfm
-
props = context.scene.BIMFMProperties
ifc_file = tool.Ifc.get()
+ filepaths = []
if not (ifc_file and props.should_load_from_memory):
- ifc_file = ifcopenshell.open(props.ifc_file)
+ if len(props.ifc_files):
+ ifc_files = [ifcopenshell.open(f.name) for f in props.ifc_files]
+ filepaths = [f.name for f in props.ifc_files]
+ else:
+ ifc_files = [ifcopenshell.open(props.ifc_file)]
+ else:
+ ifc_files = [ifc_file]
+ for i, ifc_file in enumerate(ifc_files):
+ if filepaths:
+ dirname = os.path.dirname(self.filepath)
+ prefix, _ = os.path.splitext(os.path.basename(filepaths[i]))
+ basename = os.path.basename(self.filepath)
+ filepath = os.path.join(dirname, f"{prefix}-{basename}")
+ else:
+ filepath = self.filepath
+ parser = ifcfm.Parser(preset=props.engine)
+ parser.parse(ifc_file)
+ writer = ifcfm.Writer(parser)
+ writer.write()
+ if props.format == "csv":
+ writer.write_csv("tmp/")
+ elif props.format == "ods":
+ writer.write_ods(filepath)
+ elif props.format == "xlsx":
+ writer.write_xlsx(filepath)
+ return {"FINISHED"}
+
+
+class SelectFMSpreadsheetFiles(bpy.types.Operator):
+ bl_idname = "bim.select_fm_spreadsheet_files"
+ bl_label = "Select FM Spreadsheet Files"
+ bl_options = {"REGISTER", "UNDO"}
+ filter_glob: bpy.props.StringProperty(default="*.ods;*.xlsx", options={"HIDDEN"})
+ filepath: bpy.props.StringProperty(subtype="FILE_PATH")
+ files: bpy.props.CollectionProperty(name="File Path", type=bpy.types.OperatorFileListElement)
+
+ def execute(self, context):
+ props = context.scene.BIMFMProperties
+ props.spreadsheet_files.clear()
+ dirname = os.path.dirname(self.filepath)
+ for f in self.files:
+ new = props.spreadsheet_files.add()
+ new.name = os.path.join(dirname, f.name)
+ return {"FINISHED"}
+
+ def invoke(self, context, event):
+ context.window_manager.fileselect_add(self)
+ return {"RUNNING_MODAL"}
+
+
+class ExecuteIfcFMFederate(bpy.types.Operator):
+ bl_idname = "bim.execute_ifcfm_federate"
+ bl_label = "Execute IfcFM"
+ file_format: bpy.props.StringProperty()
+ filter_glob: bpy.props.StringProperty(default="*.ods;*.xlsx", options={"HIDDEN"})
+ filepath: bpy.props.StringProperty(subtype="FILE_PATH")
+
+ @classmethod
+ def poll(cls, context):
+ props = context.scene.BIMFMProperties
+ return props.spreadsheet_files
+
+ def invoke(self, context, event):
+ props = context.scene.BIMFMProperties
+ self.filepath = bpy.path.ensure_ext(bpy.data.filepath, f".{props.format}")
+ WindowManager = context.window_manager
+ WindowManager.fileselect_add(self)
+ return {"RUNNING_MODAL"}
+
+ def execute(self, context):
+ props = context.scene.BIMFMProperties
parser = ifcfm.Parser(preset=props.engine)
- parser.parse(ifc_file)
+ parser.federate([f.name for f in props.spreadsheet_files])
writer = ifcfm.Writer(parser)
writer.write()
- if props.format == "csv":
- writer.write_csv('tmp/')
- elif props.format == "ods":
+ if props.format == "ods":
writer.write_ods(self.filepath)
elif props.format == "xlsx":
writer.write_xlsx(self.filepath)
diff --git a/src/blenderbim/blenderbim/bim/module/fm/prop.py b/src/blenderbim/blenderbim/bim/module/fm/prop.py
index f6a3074da3..696c27a084 100644
--- a/src/blenderbim/blenderbim/bim/module/fm/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/fm/prop.py
@@ -17,6 +17,7 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
+from blenderbim.bim.prop import StrProperty
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
@@ -32,6 +33,8 @@ from bpy.props import (
class BIMFMProperties(PropertyGroup):
ifc_file: StringProperty(default="", name="IFC File")
+ ifc_files: CollectionProperty(name="IFC Files", type=StrProperty)
+ spreadsheet_files: CollectionProperty(name="Spreadsheets", type=StrProperty)
should_load_from_memory: BoolProperty(default=False, name="Load from Memory")
engine: EnumProperty(
items=[
diff --git a/src/blenderbim/blenderbim/bim/module/fm/ui.py b/src/blenderbim/blenderbim/bim/module/fm/ui.py
index 8ef8a4dd43..502e463e19 100644
--- a/src/blenderbim/blenderbim/bim/module/fm/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/fm/ui.py
@@ -42,7 +42,10 @@ class BIM_PT_fm(Panel):
if not IfcStore.get_file() or not props.should_load_from_memory:
row = layout.row(align=True)
- row.prop(props, "ifc_file")
+ if len(props.ifc_files) > 1:
+ row.label(text=f"{len(props.ifc_files)} Files Selected")
+ else:
+ row.prop(props, "ifc_file")
row.operator("bim.select_fm_ifc_file", icon="FILE_FOLDER", text="")
row = layout.row()
@@ -52,3 +55,10 @@ class BIM_PT_fm(Panel):
row = layout.row()
op = row.operator("bim.execute_ifcfm", text="Convert To Spreadsheet")
+
+ row = layout.row(align=True)
+ row.label(text=f"{len(props.spreadsheet_files)} Spreadsheets Selected")
+ row.operator("bim.select_fm_spreadsheet_files", icon="FILE_FOLDER", text="")
+
+ row = layout.row()
+ op = row.operator("bim.execute_ifcfm_federate", text="Merge Spreadsheets")
diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py
index 611795167b..db955f013f 100644
--- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py
@@ -22,7 +22,10 @@ from . import ui, prop, operator
classes = (
operator.AddRepresentation,
operator.CopyRepresentation,
+ operator.DisableEditingRepresentationItems,
operator.EditObjectPlacement,
+ operator.EnableEditingRepresentationItems,
+ operator.FlipObject,
operator.GetRepresentationIfcParameters,
operator.DuplicateMoveLinkedAggregate,
operator.DuplicateMoveLinkedAggregateMacro,
@@ -46,15 +49,20 @@ classes = (
operator.SwitchRepresentation,
operator.UpdateParametricRepresentation,
operator.UpdateRepresentation,
+ prop.RepresentationItem,
prop.BIMObjectGeometryProperties,
prop.BIMGeometryProperties,
- ui.BIM_PT_derived_placements,
+ ui.BIM_PT_placement,
ui.BIM_PT_representations,
+ ui.BIM_PT_representation_items,
ui.BIM_PT_connections,
ui.BIM_PT_mesh,
+ ui.BIM_PT_derived_coordinates,
ui.BIM_PT_workarounds,
ui.BIM_MT_object_set_origin,
ui.BIM_MT_separate,
+ ui.BIM_MT_hotkey_separate,
+ ui.BIM_UL_representation_items,
)
@@ -71,7 +79,6 @@ def register():
bpy.types.Object.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMObjectGeometryProperties)
bpy.types.Scene.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMGeometryProperties)
- bpy.types.OBJECT_PT_transform.append(ui.BIM_PT_transform)
bpy.types.VIEW3D_MT_object.append(ui.object_menu)
bpy.types.OUTLINER_MT_object.append(ui.outliner_menu)
bpy.types.VIEW3D_MT_object_context_menu.append(ui.object_menu)
@@ -100,6 +107,9 @@ def register():
km = wm.keyconfigs.addon.keymaps.new(name="Mesh", space_type="EMPTY")
kmi = km.keymap_items.new("bim.override_mode_set_object", "TAB", "PRESS")
addon_keymaps.append((km, kmi))
+ kmi = km.keymap_items.new("wm.call_menu", "P", "PRESS")
+ kmi.properties.name = ui.BIM_MT_hotkey_separate.bl_idname
+ addon_keymaps.append((km, kmi))
km = wm.keyconfigs.addon.keymaps.new(name="Curve", space_type="EMPTY")
kmi = km.keymap_items.new("bim.override_mode_set_object", "TAB", "PRESS")
@@ -116,7 +126,6 @@ def register():
def unregister():
bpy.types.VIEW3D_MT_object.remove(ui.object_menu)
- bpy.types.OBJECT_PT_transform.remove(ui.BIM_PT_transform)
bpy.types.OUTLINER_MT_object.remove(ui.outliner_menu)
bpy.types.VIEW3D_MT_object_context_menu.remove(ui.outliner_menu)
bpy.types.VIEW3D_MT_edit_mesh.remove(ui.edit_mesh_menu)
diff --git a/src/blenderbim/blenderbim/bim/module/geometry/data.py b/src/blenderbim/blenderbim/bim/module/geometry/data.py
index 22575778d3..d1e3b7fa1e 100644
--- a/src/blenderbim/blenderbim/bim/module/geometry/data.py
+++ b/src/blenderbim/blenderbim/bim/module/geometry/data.py
@@ -23,8 +23,10 @@ from mathutils import Vector
def refresh():
- DerivedPlacementsData.is_loaded = False
+ PlacementData.is_loaded = False
+ DerivedCoordinatesData.is_loaded = False
RepresentationsData.is_loaded = False
+ RepresentationItemsData.is_loaded = False
ConnectionsData.is_loaded = False
@@ -91,6 +93,50 @@ class RepresentationsData:
return results
+class RepresentationItemsData:
+ data = {}
+ is_loaded = False
+
+ @classmethod
+ def load(cls):
+ cls.data = {
+ "total_items": cls.total_items(),
+ "active_surface_style": cls.active_surface_style(),
+ "active_layer": cls.active_layer(),
+ }
+ cls.is_loaded = True
+
+ @classmethod
+ def total_items(cls):
+ active_representation_id = None
+ result = 0
+ if bpy.context.active_object.data and hasattr(bpy.context.active_object.data, "BIMMeshProperties"):
+ active_representation_id = bpy.context.active_object.data.BIMMeshProperties.ifc_definition_id
+ element = tool.Ifc.get().by_id(active_representation_id)
+ if not element.is_a("IfcShapeRepresentation"):
+ return 0
+ queue = list(element.Items)
+ while queue:
+ item = queue.pop()
+ if item.is_a("IfcMappedItem"):
+ queue.extend(item.MappingSource.MappedRepresentation.Items)
+ else:
+ result += 1
+ return result
+
+ @classmethod
+ def active_surface_style(cls):
+ props = bpy.context.active_object.BIMGeometryProperties
+ if props.active_item_index < len(props.items):
+ return props.items[props.active_item_index].surface_style
+
+ @classmethod
+ def active_layer(cls):
+ props = bpy.context.active_object.BIMGeometryProperties
+ if props.active_item_index < len(props.items):
+ return props.items[props.active_item_index].layer
+
+
class ConnectionsData:
data = {}
is_loaded = False
@@ -184,7 +230,7 @@ class ConnectionsData:
return results
-class DerivedPlacementsData:
+class DerivedCoordinatesData:
data = {}
is_loaded = False
@@ -263,6 +309,25 @@ class DerivedPlacementsData:
for i, storey in enumerate(storeys):
if storey[0] != element:
continue
- if i >= len(storeys):
+ if i >= len(storeys) - 1:
return "N/A"
return "{0:.3f}".format(round(storeys[i + 1][1] - storey[1], 3))
+
+
+class PlacementData:
+ data = {}
+ is_loaded = False
+
+ @classmethod
+ def load(cls):
+ cls.data = {
+ "has_placement": cls.has_placement(),
+ }
+ cls.is_loaded = True
+
+ @classmethod
+ def has_placement(cls):
+ element = tool.Ifc.get_entity(bpy.context.active_object)
+ if element and hasattr(element, "ObjectPlacement"):
+ return True
+ return False
diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py
index 1f40dd7b98..bf5ae488a0 100644
--- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py
@@ -34,6 +34,7 @@ import blenderbim.core.drawing
import blenderbim.tool as tool
import blenderbim.bim.handler
from mathutils import Vector, Matrix
+from time import time
from blenderbim.bim import import_ifc
from blenderbim.bim.ifc import IfcStore
@@ -66,9 +67,12 @@ class OverrideMeshSeparate(bpy.types.Operator, Operator):
def _execute(self, context):
obj = context.active_object
+ element = tool.Ifc.get_entity(obj)
+ if not element:
+ return
# You cannot separate meshes if the representation is mapped.
- relating_type = tool.Root.get_element_type(tool.Ifc.get_entity(obj))
+ relating_type = tool.Root.get_element_type(element)
if relating_type and tool.Root.does_type_have_representations(relating_type):
# We toggle edit mode to ensure that once representations are
# unmapped, our Blender mesh only has a single user.
@@ -210,18 +214,22 @@ class SwitchRepresentation(bpy.types.Operator, Operator):
should_switch_all_meshes: bpy.props.BoolProperty()
def _execute(self, context):
- target = tool.Ifc.get().by_id(self.ifc_definition_id).ContextOfItems
+ target_representation = tool.Ifc.get().by_id(self.ifc_definition_id)
+ target = target_representation.ContextOfItems
is_subcontext = target.is_a("IfcGeometricRepresentationSubContext")
for obj in set(context.selected_objects + [context.active_object]):
element = tool.Ifc.get_entity(obj)
if not element:
continue
- if is_subcontext:
- representation = ifcopenshell.util.representation.get_representation(
- element, target.ContextType, target.ContextIdentifier, target.TargetView
- )
+ if obj == context.active_object:
+ representation = target_representation
else:
- representation = ifcopenshell.util.representation.get_representation(element, target.ContextType)
+ if is_subcontext:
+ representation = ifcopenshell.util.representation.get_representation(
+ element, target.ContextType, target.ContextIdentifier, target.TargetView
+ )
+ else:
+ representation = ifcopenshell.util.representation.get_representation(element, target.ContextType)
if not representation:
continue
core.switch_representation(
@@ -465,7 +473,7 @@ class CopyRepresentation(bpy.types.Operator, Operator):
if not element:
continue
bm.to_mesh(obj.data)
- old_rep = self.get_representation_by_context(element, geometric_context)
+ old_rep = tool.Geometry.get_representation_by_context(element, geometric_context)
if old_rep:
ifcopenshell.api.run(
"geometry.unassign_representation", tool.Ifc.get(), product=element, representation=old_rep
@@ -482,16 +490,6 @@ class CopyRepresentation(bpy.types.Operator, Operator):
profile_set_usage=None,
)
- def get_representation_by_context(self, element, context):
- if element.is_a("IfcProduct") and element.Representation:
- for r in element.Representation.Representations:
- if r.ContextOfItems == context:
- return r
- elif element.is_a("IfcTypeProduct") and element.RepresentationMaps:
- for r in element.RepresentationMaps:
- if r.MappedRepresentation.ContextOfItems == context:
- return r.MappedRepresentation
-
class OverrideDelete(bpy.types.Operator):
bl_idname = "bim.override_object_delete"
@@ -800,7 +798,8 @@ class OverrideDuplicateMove(bpy.types.Operator):
new = blenderbim.core.root.copy_class(tool.Ifc, tool.Collector, tool.Geometry, tool.Root, obj=new_obj)
# clean up the orphaned mesh with ifc id of the original object to avoid confusion
- if new and temp_data:
+ # IfcGridAxis keeps the same mesh data (it's pointing to ifc id 0, so it's not a problem)
+ if new and temp_data and not new.is_a("IfcGridAxis"):
tool.Blender.remove_data_block(temp_data)
if new:
@@ -1003,6 +1002,9 @@ class RefreshLinkedAggregate(bpy.types.Operator):
def _execute(self, context):
self.group_name = 'Linked Aggregate'
+ refresh_start_time = time()
+ self.new_active_obj = None
+ old_to_new = {}
def delete_objects(element):
parts = ifcopenshell.util.element.get_parts(element)
@@ -1084,6 +1086,11 @@ class RefreshLinkedAggregate(bpy.types.Operator):
blenderbim.bim.handler.refresh_ui_data()
+ operator_time = time() - refresh_start_time
+ if operator_time > 10:
+ self.report({"INFO"}, "Refresh Aggregate was finished in {:.2f} seconds".format(operator_time))
+ return {"FINISHED"}
+
class OverrideJoin(bpy.types.Operator, Operator):
bl_idname = "bim.override_object_join"
@@ -1429,3 +1436,70 @@ class OverrideModeSetObject(bpy.types.Operator):
if self.edited_objs:
return context.window_manager.invoke_props_dialog(self)
return self.execute(context)
+
+
+class FlipObject(bpy.types.Operator):
+ bl_idname = "bim.flip_object"
+ bl_label = "Flip Object"
+ bl_description = "Flip object's local axes, keep the position"
+ bl_options = {"REGISTER", "UNDO"}
+
+ flip_local_axes: bpy.props.EnumProperty(
+ name="Flip Local Axes", items=(("XY", "XY", ""), ("YZ", "YZ", ""), ("XZ", "XZ", "")), default="XY"
+ )
+
+ def execute(self, context):
+ for obj in context.selected_objects:
+ tool.Geometry.flip_object(obj, self.flip_local_axes)
+ return {"FINISHED"}
+
+
+class EnableEditingRepresentationItems(bpy.types.Operator, Operator):
+ bl_idname = "bim.enable_editing_representation_items"
+ bl_label = "Enable Editing Representation Items"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ obj = context.active_object
+
+ props = obj.BIMGeometryProperties
+ props.is_editing = True
+
+ props.items.clear()
+
+ if bpy.context.active_object.data and hasattr(bpy.context.active_object.data, "BIMMeshProperties"):
+ active_representation_id = bpy.context.active_object.data.BIMMeshProperties.ifc_definition_id
+ element = tool.Ifc.get().by_id(active_representation_id)
+ if not element.is_a("IfcShapeRepresentation"):
+ return
+ queue = list(element.Items)
+ while queue:
+ item = queue.pop()
+ if item.is_a("IfcMappedItem"):
+ queue.extend(item.MappingSource.MappedRepresentation.Items)
+ else:
+ new = props.items.add()
+ new.name = item.is_a()
+ new.ifc_definition_id = item.id()
+
+ styles = []
+ for inverse in tool.Ifc.get().get_inverse(item):
+ if inverse.is_a("IfcStyledItem"):
+ styles = inverse.Styles
+ if styles and styles[0].is_a("IfcPresentationStyleAssignment"):
+ styles = styles[0].Styles
+ for style in styles:
+ if style.is_a("IfcSurfaceStyle"):
+ new.surface_style = style.Name or "Unnamed"
+ elif inverse.is_a("IfcPresentationLayerAssignment"):
+ new.layer = inverse.Name or "Unnamed"
+
+
+class DisableEditingRepresentationItems(bpy.types.Operator, Operator):
+ bl_idname = "bim.disable_editing_representation_items"
+ bl_label = "Disable Editing Representation Items"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ obj = context.active_object
+ obj.BIMGeometryProperties.is_editing = False
diff --git a/src/blenderbim/blenderbim/bim/module/geometry/prop.py b/src/blenderbim/blenderbim/bim/module/geometry/prop.py
index e3fbd5517b..f874172d28 100644
--- a/src/blenderbim/blenderbim/bim/module/geometry/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/geometry/prop.py
@@ -38,8 +38,18 @@ def get_contexts(self, context):
return RepresentationsData.data["contexts"]
+class RepresentationItem(PropertyGroup):
+ name: StringProperty(name="Name")
+ surface_style: StringProperty(name="Surface Style")
+ layer: StringProperty(name="Layer")
+ ifc_definition_id: IntProperty(name="IFC Definition ID")
+
+
class BIMObjectGeometryProperties(PropertyGroup):
contexts: EnumProperty(items=get_contexts, name="Contexts")
+ is_editing: BoolProperty(name="Is Editing", default=False)
+ items: CollectionProperty(name="Representation Items", type=RepresentationItem)
+ active_item_index: IntProperty(name="Active Representation Item Index")
class BIMGeometryProperties(PropertyGroup):
diff --git a/src/blenderbim/blenderbim/bim/module/geometry/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py
index a91cf340ee..53c65b3b28 100644
--- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py
@@ -17,11 +17,18 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
+import blenderbim.bim
import blenderbim.tool as tool
-from bpy.types import Panel, Menu
+from bpy.types import Panel, Menu, UIList
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.helper import prop_with_search
-from blenderbim.bim.module.geometry.data import RepresentationsData, ConnectionsData, DerivedPlacementsData
+from blenderbim.bim.module.geometry.data import (
+ RepresentationsData,
+ RepresentationItemsData,
+ ConnectionsData,
+ PlacementData,
+ DerivedCoordinatesData,
+)
def object_menu(self, context):
@@ -47,6 +54,22 @@ class BIM_MT_separate(Menu):
self.layout.operator("bim.override_mesh_separate", icon="PLUGIN", text="IFC By Loose Parts").type = "LOOSE"
+class BIM_MT_hotkey_separate(Menu):
+ bl_idname = "BIM_MT_hotkey_separate"
+ bl_label = "Separate"
+
+ def draw(self, context):
+ self.layout.label(text="IFC Separate", icon_value=blenderbim.bim.icons["IFC"].icon_id)
+ self.layout.operator("bim.override_mesh_separate", text="Selection").type = "SELECTED"
+ self.layout.operator("bim.override_mesh_separate", text="By Material").type = "MATERIAL"
+ self.layout.operator("bim.override_mesh_separate", text="By Loose Parts").type = "LOOSE"
+ self.layout.separator()
+ self.layout.label(text="Blender Separate", icon="BLENDER")
+ self.layout.operator("mesh.separate", text="Selection").type = "SELECTED"
+ self.layout.operator("mesh.separate", text="By Material").type = "MATERIAL"
+ self.layout.operator("mesh.separate", text="By Loose Parts").type = "LOOSE"
+
+
class BIM_MT_object_set_origin(Menu):
bl_idname = "BIM_MT_object_set_origin"
bl_label = "IFC Set Origin"
@@ -124,6 +147,53 @@ class BIM_PT_representations(Panel):
row.operator("bim.remove_representation", icon="X", text="").representation_id = representation["id"]
+class BIM_PT_representation_items(Panel):
+ bl_label = "Representation Items"
+ bl_idname = "BIM_PT_representation_items"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+ bl_parent_id = "BIM_PT_tab_representations"
+
+ @classmethod
+ def poll(cls, context):
+ if not context.active_object:
+ return False
+ if not IfcStore.get_element(context.active_object.BIMObjectProperties.ifc_definition_id):
+ return False
+ return IfcStore.get_file()
+
+ def draw(self, context):
+ if not RepresentationItemsData.is_loaded:
+ RepresentationItemsData.load()
+
+ props = context.active_object.BIMGeometryProperties
+
+ row = self.layout.row(align=True)
+ row.label(text=f"{RepresentationItemsData.data['total_items']} Items Found")
+
+ if props.is_editing:
+ row.operator("bim.disable_editing_representation_items", icon="CANCEL", text="")
+ else:
+ row.operator("bim.enable_editing_representation_items", icon="IMPORT", text="")
+ return
+
+ self.layout.template_list("BIM_UL_representation_items", "", props, "items", props, "active_item_index")
+
+ row = self.layout.row()
+ if RepresentationItemsData.data["active_surface_style"]:
+ row.label(text=RepresentationItemsData.data["active_surface_style"], icon="MATERIAL")
+ else:
+ row.label(text="No Surface Style", icon="MESH_UVSPHERE")
+
+ row = self.layout.row()
+ if RepresentationItemsData.data["active_layer"]:
+ row.label(text=RepresentationItemsData.data["active_layer"], icon="STICKY_UVS_LOC")
+ else:
+ row.label(text="No Presentation Layer", icon="STICKY_UVS_LOC")
+
+
class BIM_PT_connections(Panel):
bl_label = "Connections"
bl_idname = "BIM_PT_connections"
@@ -227,6 +297,9 @@ class BIM_PT_mesh(Panel):
layout = self.layout
+ row = layout.row()
+ row.operator("bim.update_representation", text="Manually Save Representation")
+
row = layout.row()
row.operator("bim.copy_representation", text="Copy Mesh From Active To Selected")
@@ -250,50 +323,99 @@ class BIM_PT_mesh(Panel):
op = row.operator("bim.update_representation", text="Convert To Arbitrary Extrusion With Voids")
op.ifc_representation_class = "IfcExtrudedAreaSolid/IfcArbitraryProfileDefWithVoids"
-
-def BIM_PT_transform(self, context):
- if context.active_object and context.active_object.BIMObjectProperties.ifc_definition_id:
- row = self.layout.row(align=True)
- row.label(text="Blender Offset")
- row.label(text=context.active_object.BIMObjectProperties.blender_offset_type)
-
- row = self.layout.row()
- row.operator("bim.edit_object_placement")
+ if context.active_object and context.active_object.data:
+ mprops = context.active_object.data.BIMMeshProperties
+ row = layout.row()
+ row.operator("bim.get_representation_ifc_parameters")
+ for index, ifc_parameter in enumerate(mprops.ifc_parameters):
+ row = layout.row(align=True)
+ row.prop(ifc_parameter, "name", text="")
+ row.prop(ifc_parameter, "value", text="")
+ row.operator("bim.update_parametric_representation", icon="FILE_REFRESH", text="").index = index
-class BIM_PT_derived_placements(Panel):
- bl_label = "Derived Placements"
- bl_idname = "BIM_PT_derived_placements"
- bl_options = {"DEFAULT_CLOSED"}
+class BIM_PT_placement(Panel):
+ bl_label = "Placement"
+ bl_idname = "BIM_PT_placement"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
- bl_context = "object"
+ bl_context = "scene"
bl_order = 1
- bl_parent_id = "OBJECT_PT_transform"
+ bl_parent_id = "BIM_PT_tab_placement"
+ bl_options = {"HIDE_HEADER"}
+
+ @classmethod
+ def poll(cls, context):
+ return context.active_object and context.active_object.BIMObjectProperties.ifc_definition_id
def draw(self, context):
- if not DerivedPlacementsData.is_loaded:
- DerivedPlacementsData.load()
+ if not PlacementData.is_loaded:
+ PlacementData.load()
+
+ if PlacementData.data["has_placement"]:
+ row = self.layout.row()
+ row.prop(context.active_object, "location", text="Location")
+ row = self.layout.row()
+ row.prop(context.active_object, "rotation_euler", text="Rotation")
+ else:
+ row = self.layout.row()
+ row.label(text="No Object Placement Found")
+
+ if context.active_object.BIMObjectProperties.blender_offset_type != "NONE":
+ row = self.layout.row(align=True)
+ row.label(text="Blender Offset", icon="TRACKING_REFINE_FORWARDS")
+ row.label(text=context.active_object.BIMObjectProperties.blender_offset_type)
+
+
+class BIM_PT_derived_coordinates(Panel):
+ bl_label = "Derived Coordinates"
+ bl_idname = "BIM_PT_derived_coordinates"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 3
+ bl_parent_id = "BIM_PT_tab_placement"
+ bl_options = {"DEFAULT_CLOSED"}
+
+ @classmethod
+ def poll(cls, context):
+ return context.active_object is not None
+
+ def draw(self, context):
+ if not DerivedCoordinatesData.is_loaded:
+ DerivedCoordinatesData.load()
+
+ row = self.layout.row()
+ row.operator("bim.edit_object_placement", icon="EXPORT")
+
+ row = self.layout.row()
+ row.label(text="XYZ Dimensions")
+
+ row = self.layout.row(align=True)
+ row.enabled = False
+ row.prop(context.active_object, "dimensions", text="X", index=0, slider=True)
+ row.prop(context.active_object, "dimensions", text="Y", index=1, slider=True)
+ row.prop(context.active_object, "dimensions", text="Z", index=2, slider=True)
row = self.layout.row(align=True)
row.label(text="Min Global Z")
- row.label(text=DerivedPlacementsData.data["min_global_z"])
+ row.label(text=DerivedCoordinatesData.data["min_global_z"])
row = self.layout.row(align=True)
row.label(text="Max Global Z")
- row.label(text=DerivedPlacementsData.data["max_global_z"])
+ row.label(text=DerivedCoordinatesData.data["max_global_z"])
- if DerivedPlacementsData.data["has_collection"]:
+ if DerivedCoordinatesData.data["has_collection"]:
row = self.layout.row(align=True)
row.label(text="Min Decomposed Z")
- row.label(text=DerivedPlacementsData.data["min_decomposed_z"])
+ row.label(text=DerivedCoordinatesData.data["min_decomposed_z"])
row = self.layout.row(align=True)
row.label(text="Max Decomposed Z")
- row.label(text=DerivedPlacementsData.data["max_decomposed_z"])
+ row.label(text=DerivedCoordinatesData.data["max_decomposed_z"])
- if DerivedPlacementsData.data["is_storey"]:
+ if DerivedCoordinatesData.data["is_storey"]:
row = self.layout.row(align=True)
row.label(text="Storey Height")
- row.label(text=DerivedPlacementsData.data["storey_height"])
+ row.label(text=DerivedCoordinatesData.data["storey_height"])
class BIM_PT_workarounds(Panel):
@@ -322,3 +444,13 @@ class BIM_PT_workarounds(Panel):
row.prop(props, "should_force_triangulation")
row = self.layout.row()
row.prop(props, "should_use_presentation_style_assignment")
+
+
+class BIM_UL_representation_items(UIList):
+ def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
+ if item:
+ icon = "MATERIAL" if item.surface_style else "MESH_UVSPHERE"
+ row = layout.row(align=True)
+ row.label(text=item.name, icon=icon)
+ if item.layer:
+ row.label(text="", icon="STICKY_UVS_LOC")
diff --git a/src/blenderbim/blenderbim/bim/module/georeference/data.py b/src/blenderbim/blenderbim/bim/module/georeference/data.py
index 66df12b93b..d362027939 100644
--- a/src/blenderbim/blenderbim/bim/module/georeference/data.py
+++ b/src/blenderbim/blenderbim/bim/module/georeference/data.py
@@ -56,7 +56,12 @@ class GeoreferenceData:
@classmethod
def map_conversion(cls):
if tool.Ifc.get_schema() == "IFC2X3":
- return {}
+ project = tool.Ifc.get().by_type("IfcProject")[0]
+ map_conversion = ifcopenshell.util.element.get_pset(project, "ePSet_MapConversion")
+ if not map_conversion:
+ return {}
+ del map_conversion["id"]
+ return map_conversion
for context in tool.Ifc.get().by_type("IfcGeometricRepresentationContext", include_subtypes=False):
if context.HasCoordinateOperation:
@@ -72,8 +77,8 @@ class GeoreferenceData:
def map_derived_angle(cls):
if (
cls.data["map_conversion"]
- and cls.data["map_conversion"]["XAxisAbscissa"] is not None
- and cls.data["map_conversion"]["XAxisOrdinate"] is not None
+ and cls.data["map_conversion"].get("XAxisAbscissa", None) is not None
+ and cls.data["map_conversion"].get("XAxisOrdinate", None) is not None
):
return str(
round(
@@ -88,7 +93,12 @@ class GeoreferenceData:
@classmethod
def projected_crs(cls):
if tool.Ifc.get_schema() == "IFC2X3":
- return {}
+ project = tool.Ifc.get().by_type("IfcProject")[0]
+ projected_crs = ifcopenshell.util.element.get_pset(project, "ePSet_ProjectedCRS")
+ if not projected_crs:
+ return {}
+ del projected_crs["id"]
+ return projected_crs
for context in tool.Ifc.get().by_type("IfcGeometricRepresentationContext", include_subtypes=False):
if context.HasCoordinateOperation:
diff --git a/src/blenderbim/blenderbim/bim/module/georeference/ui.py b/src/blenderbim/blenderbim/bim/module/georeference/ui.py
index bb75f06f5e..ffccee6af3 100644
--- a/src/blenderbim/blenderbim/bim/module/georeference/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/georeference/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_gis(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_geometry"
def draw(self, context):
self.layout.use_property_split = True
@@ -78,10 +78,14 @@ class BIM_PT_gis(Panel):
def draw_ui(self, context):
props = context.scene.BIMGeoreferenceProperties
+ if tool.Ifc.get_schema() == "IFC2X3":
+ row = self.layout.row()
+ row.label(text="IFC2X3 Fallback In Use", icon="ERROR")
+
if not GeoreferenceData.data["projected_crs"]:
row = self.layout.row(align=True)
row.label(text="Not Georeferenced")
- if tool.Ifc.get_schema != "IFC2X3":
+ if tool.Ifc.get_schema() != "IFC2X3":
row.operator("bim.add_georeferencing", icon="ADD", text="")
if props.has_blender_offset:
@@ -110,8 +114,9 @@ class BIM_PT_gis(Panel):
if GeoreferenceData.data["projected_crs"]:
row = self.layout.row(align=True)
row.label(text="Projected CRS", icon="WORLD")
- row.operator("bim.enable_editing_georeferencing", icon="GREASEPENCIL", text="")
- row.operator("bim.remove_georeferencing", icon="X", text="")
+ if tool.Ifc.get_schema() != "IFC2X3":
+ row.operator("bim.enable_editing_georeferencing", icon="GREASEPENCIL", text="")
+ row.operator("bim.remove_georeferencing", icon="X", text="")
for key, value in GeoreferenceData.data["projected_crs"].items():
if not value:
@@ -184,4 +189,4 @@ class BIM_PT_gis_utilities(Panel):
row = self.layout.row(align=True)
row.prop(props, "y_axis_abscissa_output", text="North Abscissa")
row = self.layout.row(align=True)
- row.prop(props, "y_axis_ordinate_output", text="North Ordinate")
\ No newline at end of file
+ row.prop(props, "y_axis_ordinate_output", text="North Ordinate")
diff --git a/src/blenderbim/blenderbim/bim/module/group/__init__.py b/src/blenderbim/blenderbim/bim/module/group/__init__.py
index 3f51d01082..4650cb1833 100644
--- a/src/blenderbim/blenderbim/bim/module/group/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/group/__init__.py
@@ -29,7 +29,6 @@ classes = (
operator.LoadGroups,
operator.RemoveGroup,
operator.SelectGroupProducts,
- operator.ToggleAssigningGroup,
operator.ToggleGroup,
operator.UnassignGroup,
operator.UpdateGroup,
diff --git a/src/blenderbim/blenderbim/bim/module/group/operator.py b/src/blenderbim/blenderbim/bim/module/group/operator.py
index eefcd97e8f..c7dbdd6c8b 100644
--- a/src/blenderbim/blenderbim/bim/module/group/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/group/operator.py
@@ -173,16 +173,6 @@ class DisableEditingGroup(bpy.types.Operator, tool.Ifc.Operator):
return {"FINISHED"}
-class ToggleAssigningGroup(bpy.types.Operator, tool.Ifc.Operator):
- bl_idname = "bim.toggle_assigning_group"
- bl_label = "Toggle Assigning Group"
- bl_options = {"REGISTER", "UNDO"}
-
- def _execute(self, context):
- context.scene.BIMGroupProperties.is_adding = not context.scene.BIMGroupProperties.is_adding
- return {"FINISHED"}
-
-
class AssignGroup(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.assign_group"
bl_label = "Assign Group"
diff --git a/src/blenderbim/blenderbim/bim/module/group/prop.py b/src/blenderbim/blenderbim/bim/module/group/prop.py
index 1ac4d85738..c64c77814a 100644
--- a/src/blenderbim/blenderbim/bim/module/group/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/group/prop.py
@@ -49,7 +49,6 @@ class Group(PropertyGroup):
class BIMGroupProperties(PropertyGroup):
group_attributes: CollectionProperty(name="Group Attributes", type=Attribute)
is_editing: BoolProperty(name="Is Editing", default=False)
- is_adding: BoolProperty(name="Is Adding", default=False)
groups: CollectionProperty(name="Groups", type=Group)
active_group_index: IntProperty(name="Active Group Index")
active_group_id: IntProperty(name="Active Group Id")
diff --git a/src/blenderbim/blenderbim/bim/module/group/ui.py b/src/blenderbim/blenderbim/bim/module/group/ui.py
index 1582b1fdd7..5762d8f705 100644
--- a/src/blenderbim/blenderbim/bim/module/group/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/group/ui.py
@@ -89,9 +89,9 @@ class BIM_PT_object_groups(Panel):
ObjectGroupsData.load()
self.props = context.scene.BIMGroupProperties
row = self.layout.row(align=True)
- if self.props.is_adding:
+ if self.props.is_editing:
row.label(text="Adding Groups", icon="OUTLINER")
- row.operator("bim.toggle_assigning_group", text="", icon="CANCEL")
+ row.operator("bim.disable_group_editing_ui", text="", icon="CANCEL")
self.layout.template_list(
"BIM_UL_object_groups",
"",
@@ -102,7 +102,7 @@ class BIM_PT_object_groups(Panel):
)
else:
row.label(text=f"{ObjectGroupsData.data['total_groups']} Groups in IFC Project", icon="OUTLINER")
- row.operator("bim.toggle_assigning_group", text="", icon="ADD")
+ row.operator("bim.load_groups", text="", icon="GREASEPENCIL")
for group in ObjectGroupsData.data["groups"]:
row = self.layout.row(align=True)
diff --git a/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py b/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py
index 304615353f..7c18bd6e42 100644
--- a/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py
@@ -11,7 +11,7 @@ class IFCGIT_PT_panel(bpy.types.Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_options = {"DEFAULT_CLOSED"}
- bl_parent_id = "BIM_PT_project_info"
+ bl_parent_id = "BIM_PT_tab_project_info"
def draw(self, context):
diff --git a/src/blenderbim/blenderbim/bim/module/layer/operator.py b/src/blenderbim/blenderbim/bim/module/layer/operator.py
index 32f4888639..dcea535a62 100644
--- a/src/blenderbim/blenderbim/bim/module/layer/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/layer/operator.py
@@ -63,7 +63,7 @@ class EnableEditingLayer(bpy.types.Operator):
def execute(self, context):
props = context.scene.BIMLayerProperties
props.layer_attributes.clear()
- blenderbim.bim.helper.import_attributes(tool.Ifc.get().by_id(self.layer), props.layer_attributes)
+ blenderbim.bim.helper.import_attributes2(tool.Ifc.get().by_id(self.layer), props.layer_attributes)
props.active_layer_id = self.layer
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/library/ui.py b/src/blenderbim/blenderbim/bim/module/library/ui.py
index c963203cd7..fb6ef10fda 100644
--- a/src/blenderbim/blenderbim/bim/module/library/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/library/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_libraries(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/material/__init__.py b/src/blenderbim/blenderbim/bim/module/material/__init__.py
index 958ff75add..8757f86c55 100644
--- a/src/blenderbim/blenderbim/bim/module/material/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/material/__init__.py
@@ -40,10 +40,12 @@ classes = (
operator.EditMaterial,
operator.EditMaterialSetItem,
operator.EditMaterialSetItemProfile,
+ operator.EditMaterialStyle,
operator.EnableEditingAssignedMaterial,
operator.EnableEditingMaterial,
operator.EnableEditingMaterialSetItem,
operator.EnableEditingMaterialSetItemProfile,
+ operator.EnableEditingMaterialStyle,
operator.ExpandMaterialCategory,
operator.LoadMaterials,
operator.RemoveConstituent,
@@ -55,6 +57,7 @@ classes = (
operator.ReorderMaterialSetItem,
operator.SelectByMaterial,
operator.UnassignMaterial,
+ operator.UnassignMaterialStyle,
operator.UnlinkMaterial,
prop.Material,
prop.BIMMaterialProperties,
diff --git a/src/blenderbim/blenderbim/bim/module/material/data.py b/src/blenderbim/blenderbim/bim/module/material/data.py
index 9e1d4154b9..854c01da9b 100644
--- a/src/blenderbim/blenderbim/bim/module/material/data.py
+++ b/src/blenderbim/blenderbim/bim/module/material/data.py
@@ -38,6 +38,9 @@ class MaterialsData:
"total_materials": cls.total_materials(),
"material_types": cls.material_types(),
"profiles": cls.profiles(),
+ "styles": cls.styles(),
+ "contexts": cls.contexts(),
+ "active_styles": cls.active_styles(),
}
cls.is_loaded = True
@@ -79,6 +82,58 @@ class MaterialsData:
if p.ProfileName
]
+ @classmethod
+ def contexts(cls):
+ results = []
+ for element in tool.Ifc.get().by_type("IfcGeometricRepresentationContext", include_subtypes=False):
+ results.append((str(element.id()), element.ContextType or "Unnamed", ""))
+ for element in tool.Ifc.get().by_type("IfcGeometricRepresentationSubContext", include_subtypes=False):
+ results.append(
+ (
+ str(element.id()),
+ "{}/{}/{}".format(
+ element.ContextType or "Unnamed",
+ element.ContextIdentifier or "Unnamed",
+ element.TargetView or "Unnamed",
+ ),
+ "",
+ )
+ )
+ return results
+
+ @classmethod
+ def styles(cls):
+ return [(str(s.id()), s.Name or "Unnamed", "") for s in tool.Ifc.get().by_type("IfcSurfaceStyle") if s.Name]
+
+ @classmethod
+ def active_styles(cls):
+ props = bpy.context.scene.BIMMaterialProperties
+ results = []
+ if props.materials and props.active_material_index < len(props.materials):
+ material = props.materials[props.active_material_index].ifc_definition_id
+ if not material:
+ return results
+ material = tool.Ifc.get().by_id(material)
+ for definition in material.HasRepresentation:
+ for representation in definition.Representations:
+ if not representation.is_a("IfcStyledRepresentation"):
+ continue
+ context = representation.ContextOfItems
+ for item in representation.Items:
+ if not item.is_a("IfcStyledItem"):
+ continue
+ for style in item.Styles:
+ if style.is_a("IfcSurfaceStyle"):
+ results.append({
+ "context_type": context.ContextType,
+ "context_identifier": getattr(context, "ContextIdentifier", ""),
+ "target_view": getattr(context, "TargetView", ""),
+ "name": style.Name or "Unnamed",
+ "id": style.id(),
+ "context_id": context.id(),
+ })
+ return results
+
class ObjectMaterialData:
data = {}
@@ -173,6 +228,8 @@ class ObjectMaterialData:
items = cls.material.MaterialProfiles
elif cls.material.is_a("IfcMaterialConstituentSet"):
items = cls.material.MaterialConstituents
+ elif cls.material.is_a("IfcMaterialList"):
+ items = cls.material.Materials
icon = "LAYER_ACTIVE"
if "Layer" in cls.material.is_a():
@@ -191,7 +248,9 @@ class ObjectMaterialData:
data["name"] = "No Profile"
if item.is_a("IfcMaterialLayer"):
data["name"] += f" ({item.LayerThickness})"
- if not item.is_a("IfcMaterialList"):
+ if item.is_a("IfcMaterial"):
+ data["material"] = item.Name or "Unnamed"
+ else:
data["material"] = item.Material.Name or "Unnamed"
results.append(data)
return results
diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py
index dd245000ab..b41a862252 100644
--- a/src/blenderbim/blenderbim/bim/module/material/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/material/operator.py
@@ -118,10 +118,18 @@ class AddMaterial(bpy.types.Operator, tool.Ifc.Operator):
bl_label = "Add Material"
bl_options = {"REGISTER", "UNDO"}
obj: bpy.props.StringProperty()
+ name: bpy.props.StringProperty(default="Default")
+
+ def invoke(self, context, event):
+ return context.window_manager.invoke_props_dialog(self)
+
+ def draw(self, context):
+ row = self.layout
+ row.prop(self, "name", text="Name")
def _execute(self, context):
obj = bpy.data.materials.get(self.obj) if self.obj else None
- core.add_material(tool.Ifc, tool.Material, tool.Style, obj=obj)
+ core.add_material(tool.Ifc, tool.Material, tool.Style, obj=obj, name=self.name)
material_prop_purge()
@@ -174,7 +182,7 @@ class AssignMaterial(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
objects = [bpy.data.objects.get(self.obj)] if self.obj else tool.Blender.get_selected_objects()
- core.assign_material(tool.Ifc, tool.Material, material_type= self.material_type , objects=objects )
+ core.assign_material(tool.Ifc, tool.Material, material_type=self.material_type, objects=objects)
class UnassignMaterial(bpy.types.Operator, tool.Ifc.Operator):
@@ -185,7 +193,7 @@ class UnassignMaterial(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
objects = [bpy.data.objects.get(self.obj)] if self.obj else tool.Blender.get_selected_objects()
- core.unassign_material(tool.Ifc, tool.Material, objects=objects )
+ core.unassign_material(tool.Ifc, tool.Material, objects=objects)
class AddConstituent(bpy.types.Operator, tool.Ifc.Operator):
@@ -350,10 +358,8 @@ class AddListItem(bpy.types.Operator, tool.Ifc.Operator):
ifcopenshell.api.run(
"material.add_list_item",
self.file,
- **{
- "material_list": self.file.by_id(self.list_item_set),
- "material": self.file.by_id(int(obj.BIMObjectMaterialProperties.material)),
- },
+ material_list=self.file.by_id(self.list_item_set),
+ material=self.file.by_id(int(obj.BIMObjectMaterialProperties.material)),
)
@@ -709,3 +715,50 @@ class ContractMaterialCategory(bpy.types.Operator):
category.is_expanded = False
core.load_materials(tool.Material, props.material_type)
return {"FINISHED"}
+
+
+class EnableEditingMaterialStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.enable_editing_material_style"
+ bl_label = "Enable Editing Material Style"
+ bl_options = {"REGISTER", "UNDO"}
+ material: bpy.props.IntProperty()
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMMaterialProperties
+ props.active_material_id = self.material
+ props.editing_material_type = "STYLE"
+
+
+class EditMaterialStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.edit_material_style"
+ bl_label = "Edit Material Style"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMMaterialProperties
+ material = tool.Ifc.get().by_id(props.active_material_id)
+ style = tool.Ifc.get().by_id(int(props.styles))
+ context = tool.Ifc.get().by_id(int(props.contexts))
+ ifcopenshell.api.run(
+ "style.assign_material_style", tool.Ifc.get(), material=material, style=style, context=context
+ )
+ tool.Material.disable_editing_material()
+ core.load_materials(tool.Material, props.material_type)
+
+
+class UnassignMaterialStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.unassign_material_style"
+ bl_label = "Unassign Material Style"
+ bl_options = {"REGISTER", "UNDO"}
+ style: bpy.props.IntProperty()
+ context: bpy.props.IntProperty()
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMMaterialProperties
+ material = tool.Ifc.get().by_id(props.materials[props.active_material_index].ifc_definition_id)
+ style = tool.Ifc.get().by_id(self.style)
+ context = tool.Ifc.get().by_id(self.context)
+ ifcopenshell.api.run(
+ "style.unassign_material_style", tool.Ifc.get(), material=material, style=style, context=context
+ )
+ core.load_materials(tool.Material, props.material_type)
diff --git a/src/blenderbim/blenderbim/bim/module/material/prop.py b/src/blenderbim/blenderbim/bim/module/material/prop.py
index f09075cdf0..f414a8138e 100644
--- a/src/blenderbim/blenderbim/bim/module/material/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/material/prop.py
@@ -103,11 +103,24 @@ def get_profiles(self, context):
return MaterialsData.data["profiles"]
+def get_styles(self, context):
+ if not MaterialsData.is_loaded:
+ MaterialsData.load()
+ return MaterialsData.data["styles"]
+
+
+def get_contexts(self, context):
+ if not MaterialsData.is_loaded:
+ MaterialsData.load()
+ return MaterialsData.data["contexts"]
+
+
class Material(PropertyGroup):
name: StringProperty(name="Name")
ifc_definition_id: IntProperty(name="IFC Definition ID")
is_category: BoolProperty(name="Is Category", default=False)
is_expanded: BoolProperty(name="Is Expanded", default=True)
+ has_style: BoolProperty(name="Has Style", default=True)
total_elements: IntProperty(name="Total Elements")
@@ -119,7 +132,9 @@ class BIMMaterialProperties(PropertyGroup):
profiles: EnumProperty(items=get_profiles, name="Profiles")
active_material_id: IntProperty(name="Active Material ID")
material_attributes: CollectionProperty(name="Material Attributes", type=Attribute)
- editing_material_type = StringProperty(name="Editing Material Type")
+ editing_material_type: StringProperty(name="Editing Material Type")
+ styles: EnumProperty(items=get_styles, name="Styles")
+ contexts: EnumProperty(items=get_contexts, name="Contexts")
class BIMObjectMaterialProperties(PropertyGroup):
diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py
index dc50a8db14..3a755a9413 100644
--- a/src/blenderbim/blenderbim/bim/module/material/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/material/ui.py
@@ -28,11 +28,11 @@ from blenderbim.bim.module.material.data import MaterialsData, ObjectMaterialDat
class BIM_PT_materials(Panel):
bl_label = "Materials"
bl_idname = "BIM_PT_materials"
- bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_materials"
+ bl_options = {"HIDE_HEADER"}
@classmethod
def poll(cls, context):
@@ -45,11 +45,10 @@ class BIM_PT_materials(Panel):
self.props = context.scene.BIMMaterialProperties
row = self.layout.row(align=True)
- row.label(text="{} Materials Found".format(MaterialsData.data["total_materials"]), icon="MATERIAL")
+ row.label(text="{} Materials".format(MaterialsData.data["total_materials"]), icon="NODE_MATERIAL")
if self.props.is_editing:
row.operator("bim.disable_editing_materials", text="", icon="CANCEL")
else:
- row = self.layout.row(align=True)
prop_with_search(row, self.props, "material_type", text="")
row.operator("bim.load_materials", text="", icon="IMPORT")
return
@@ -58,20 +57,19 @@ class BIM_PT_materials(Panel):
row.alignment = "RIGHT"
if self.props.material_type == "IfcMaterial":
- if not self.props.active_material_id:
- row.operator("bim.add_material", text="", icon="ADD")
+ row.operator("bim.add_material", text="", icon="ADD")
if self.props.materials and self.props.active_material_index < len(self.props.materials):
material = self.props.materials[self.props.active_material_index]
if material.ifc_definition_id:
- if self.props.active_material_id:
- row.operator("bim.edit_material", text="", icon="CHECKMARK").material = material.ifc_definition_id
- row.operator("bim.disable_editing_material", text="", icon="CANCEL").material = material.ifc_definition_id
- self.draw_editable_material_attributes_ui()
- else:
- op = row.operator("bim.select_by_material", text="", icon="RESTRICT_SELECT_OFF")
- op.material = material.ifc_definition_id
- row.operator("bim.enable_editing_material", text="", icon="GREASEPENCIL").material = material.ifc_definition_id
- row.operator("bim.remove_material", text="", icon="X").material = material.ifc_definition_id
+ op = row.operator("bim.select_by_material", text="", icon="RESTRICT_SELECT_OFF")
+ op.material = material.ifc_definition_id
+ op = row.operator("bim.enable_editing_material", text="", icon="GREASEPENCIL")
+ op.material = material.ifc_definition_id
+ op = row.operator("bim.enable_editing_material_style", text="", icon="SHADING_RENDERED")
+ op.material = material.ifc_definition_id
+ row.operator("bim.remove_material", text="", icon="X").material = material.ifc_definition_id
+
+ self.draw_editing_ui()
else:
row.operator("bim.add_material_set", text="", icon="ADD").set_type = self.props.material_type
if self.props.materials and self.props.active_material_index < len(self.props.materials):
@@ -83,9 +81,34 @@ class BIM_PT_materials(Panel):
self.layout.template_list("BIM_UL_materials", "", self.props, "materials", self.props, "active_material_index")
+ for style in MaterialsData.data["active_styles"]:
+ row = self.layout.row(align=True)
+ row.label(text="", icon="SHADING_RENDERED")
+ row.label(text=style["context_type"])
+ row.label(text=style["context_identifier"])
+ row.label(text=style["target_view"])
+ row.label(text=style["name"])
+ op = row.operator("bim.unassign_material_style", text="", icon="X")
+ op.style = style["id"]
+ op.context = style["context_id"]
+
+ def draw_editing_ui(self):
+ if not self.props.active_material_id:
+ return
+ ifc_definition_id = self.props.active_material_id
+ if self.props.editing_material_type == "ATTRIBUTES":
+ blenderbim.bim.helper.draw_attributes(self.props.material_attributes, self.layout)
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_material", text="Save Material", icon="CHECKMARK").material = ifc_definition_id
+ row.operator("bim.disable_editing_material", text="", icon="CANCEL")
+ elif self.props.editing_material_type == "STYLE":
+ row = self.layout.row(align=True)
+ row.prop(self.props, "contexts", text="")
+ row.prop(self.props, "styles", text="")
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_material_style", text="Assign Style", icon="CHECKMARK")
+ row.operator("bim.disable_editing_material", text="", icon="CANCEL")
- def draw_editable_material_attributes_ui(self):
- blenderbim.bim.helper.draw_attributes(self.props.material_attributes, self.layout)
class BIM_PT_material(Panel):
bl_label = "Material"
@@ -220,9 +243,7 @@ class BIM_PT_object_material(Panel):
elif self.props.active_material_set_item_id == set_item["id"]:
self.draw_editable_set_item_ui(set_item)
else:
- self.draw_read_only_set_item_ui(
- set_item, index, is_first=index == 0, is_last=index == total_items - 1
- )
+ self.draw_read_only_set_item_ui(set_item, index, is_first=index == 0, is_last=index == total_items - 1)
def draw_editable_set_item_profile_ui(self, set_item):
box = self.layout.box()
@@ -268,7 +289,10 @@ class BIM_PT_object_material(Panel):
op.old_index = index
op.new_index = index + 1
setattr(op, "material_set", ObjectMaterialData.data["set"]["id"])
- if not self.props.active_material_set_item_id and ObjectMaterialData.data["material_class"] != "IfcMaterialList":
+ if (
+ not self.props.active_material_set_item_id
+ and ObjectMaterialData.data["material_class"] != "IfcMaterialList"
+ ):
if "Profile" in ObjectMaterialData.data["material_class"]:
op = row.operator("bim.enable_editing_material_set_item_profile", icon="ITALIC", text="")
op.material_set_item = set_item["id"]
@@ -284,9 +308,11 @@ class BIM_PT_object_material(Panel):
setattr(op, f"{ObjectMaterialData.data['set_item_name']}_index", index)
def draw_read_only_set_ui(self):
- row = self.layout.row(align=True)
- row.label(text="Name")
- row.label(text=ObjectMaterialData.data["set"]["name"])
+ if ObjectMaterialData.data["material_class"] != "IfcMaterialList":
+ row = self.layout.row(align=True)
+ row.label(text="Name")
+ row.label(text=ObjectMaterialData.data["set"]["name"])
+
if ObjectMaterialData.data["set"]["description"]:
row = self.layout.row(align=True)
row.label(text="Description")
@@ -335,3 +361,6 @@ class BIM_UL_materials(UIList):
row2 = row.row()
row2.alignment = "RIGHT"
row2.label(text=str(item.total_elements))
+
+ if item.has_style:
+ row2.label(text="", icon="SHADING_RENDERED")
diff --git a/src/blenderbim/blenderbim/bim/module/model/__init__.py b/src/blenderbim/blenderbim/bim/module/model/__init__.py
index 7786a0d8e5..47253d5047 100644
--- a/src/blenderbim/blenderbim/bim/module/model/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/model/__init__.py
@@ -108,6 +108,10 @@ classes = (
space.GenerateSpace,
space.GenerateSpacesFromWalls,
covering.AddInstanceFlooringCoveringsFromWalls,
+ covering.AddInstanceCeilingCoveringsFromWalls,
+ covering.AddInstanceFlooringCoveringFromCursor,
+ covering.AddInstanceCeilingCoveringFromCursor,
+ covering.RegenSelectedCoveringObject,
space.ToggleSpaceVisibility,
mep.FitFlowSegments,
mep.RegenerateDistributionElement,
diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py
index 087bf1e436..55820b74a1 100644
--- a/src/blenderbim/blenderbim/bim/module/model/array.py
+++ b/src/blenderbim/blenderbim/bim/module/model/array.py
@@ -59,7 +59,7 @@ class AddArray(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Parent": element.GlobalId, "Data": json.dumps(data)},
+ properties={"Parent": element.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))},
)
return {"FINISHED"}
@@ -132,7 +132,7 @@ class EditArray(bpy.types.Operator, tool.Ifc.Operator):
tool.Model.regenerate_array(parent, data)
pset = tool.Ifc.get().by_id(pset["id"])
- data = json.dumps(data)
+ data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
tool.Blender.Modifier.Array.set_children_lock_state(element, self.item, True)
@@ -169,7 +169,6 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator):
pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array")
data = json.loads(pset["Data"])
- data[self.item]["count"] = 1
if (self.keep_objs) & (self.item < (len(data) - 1)):
self.report(
@@ -188,6 +187,8 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator):
tool.Blender.Modifier.Array.bake_children_transform(element, self.item)
tool.Blender.Modifier.Array.set_children_lock_state(element, self.item, False)
+ if not self.keep_objs:
+ data[self.item]["count"] = 1
tool.Model.regenerate_array(parent, data, self.keep_objs)
pset = tool.Ifc.get().by_id(pset["id"])
@@ -195,7 +196,7 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator):
ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
else:
del data[self.item]
- data = json.dumps(data)
+ data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
tool.Blender.Modifier.Array.constrain_children_to_parent(element)
@@ -247,21 +248,30 @@ class SelectAllArrayObjects(bpy.types.Operator):
return True
def execute(self, context):
- object = context.active_object
- element = tool.Ifc.get_entity(object)
- array_pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array")
- if not array_pset:
- self.report({"ERROR"}, f"Object is not part of an array.")
- return {"CANCELLED"}
+ objects = context.selected_objects
+ for object in objects:
+ element = tool.Ifc.get_entity(object)
+ if not element:
+ self.report({"ERROR"}, f"Non IFC objects, were deselected.")
+ object.select_set(False)
- try:
- parent_element = tool.Ifc.get().by_guid(array_pset["Parent"])
- except RuntimeError:
- self.report({"ERROR"}, f"Couldn't find array parent by guid '{array_pset['Parent']}'")
- return {"CANCELLED"}
+ if element:
+ array_pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array")
+ if not array_pset:
+ self.report({"ERROR"}, f"Objects not part of an array, were deselected.")
+ object.select_set(False)
- array_objects = tool.Blender.Modifier.Array.get_all_objects(parent_element)
- tool.Blender.set_objects_selection(context, active_object=array_objects[0], selected_objects=array_objects)
+ if array_pset:
+ try:
+ parent_element = tool.Ifc.get().by_guid(array_pset["Parent"])
+ except RuntimeError:
+ self.report({"ERROR"}, f"Objects that don't have an array parent, were deselected.")
+ object.select_set(False)
+
+ array_objects = tool.Blender.Modifier.Array.get_all_objects(parent_element)
+ tool.Blender.set_objects_selection(
+ context, active_object=array_objects[0], selected_objects=array_objects, clear_previous_selection=False
+ )
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py
index da5f09cb06..9d9729be56 100644
--- a/src/blenderbim/blenderbim/bim/module/model/covering.py
+++ b/src/blenderbim/blenderbim/bim/module/model/covering.py
@@ -22,10 +22,93 @@ import ifcopenshell
import blenderbim.tool as tool
import blenderbim.core.covering as core
+class AddInstanceFlooringCoveringFromCursor(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.add_instance_flooring_covering_from_cursor"
+ bl_label = "Add Flooring From Cursor"
+ bl_options = {"REGISTER"}
+ bl_description = "Add a typed instance flooring covering from cursor position. Move the cursor position into the desired position, select the right space collection and run the operator"
+
+ @classmethod
+ def poll(cls, context):
+ collection = context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ return tool.Ifc.get_entity(collection_obj)
+
+ def _execute(self, context):
+
+ def msg(self, context):
+ self.layout.label(text="NO ACTIVE STOREY")
+
+ collection = context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ if not collection_obj:
+ bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
+ return
+ spatial_element = tool.Ifc.get_entity(collection_obj)
+ if not spatial_element:
+ bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
+ return
+
+ core.add_instance_flooring_covering_from_cursor(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry)
+
+class AddInstanceCeilingCoveringFromCursor(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.add_instance_ceiling_covering_from_cursor"
+ bl_label = "Add Ceiling From Cursor"
+ bl_options = {"REGISTER"}
+ bl_description = "Add a typed instance ceiling covering from cursor position. Move the cursor position into the desired position, select the right space collection and run the operator"
+
+ @classmethod
+ def poll(cls, context):
+ collection = context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ return tool.Ifc.get_entity(collection_obj)
+
+ def _execute(self, context):
+
+ def msg(self, context):
+ self.layout.label(text="NO ACTIVE STOREY")
+
+ collection = context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ if not collection_obj:
+ bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
+ return
+ spatial_element = tool.Ifc.get_entity(collection_obj)
+ if not spatial_element:
+ bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
+ return
+
+ core.add_instance_ceiling_covering_from_cursor(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry, tool.Covering)
+
+class RegenSelectedCoveringObject(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.regen_selected_covering_object"
+ bl_label = "Regen"
+ bl_options = {"REGISTER"}
+ bl_description = "Regen selected covering object"
+
+ @classmethod
+ def poll(cls, context):
+ active_obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(active_obj)
+ return element and element.is_a("IfcCovering")
+
+ def _execute(self, context):
+
+ def msg(self, context):
+ self.layout.label(text="NO ACTIVE STOREY")
+
+ active_obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(active_obj)
+ if not element.is_a("IfcCovering"):
+ bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
+ return
+
+ core.regen_selected_covering_object(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry)
+
class AddInstanceFlooringCoveringsFromWalls(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.add_instance_flooring_coverings_from_walls"
- bl_label = "Add Typed Covering From Walls"
+ bl_label = "Add Flooring From Walls"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Add instance flooring coverings from selected walls. The active object must be a wall and layered vertically"
@@ -62,3 +145,42 @@ class AddInstanceFlooringCoveringsFromWalls(bpy.types.Operator, tool.Ifc.Operato
core.add_instance_flooring_coverings_from_walls(tool.Ifc, tool.Spatial, tool.Collector, tool.Geometry)
+class AddInstanceCeilingCoveringsFromWalls(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.add_instance_ceiling_coverings_from_walls"
+ bl_label = "Add Ceilings From Walls"
+ bl_options = {"REGISTER", "UNDO"}
+ bl_description = "Add instance ceiling coverings from selected walls. The active object must be a wall and layered vertically"
+
+ @classmethod
+ def poll(cls, context):
+ active_obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(active_obj)
+ if element:
+ if element.is_a("IfcWall") and tool.Model.get_usage_type(element) == "LAYER2":
+ return context.selected_objects
+
+ def _execute(self, context):
+ # This only works based on a 2D plan only considering the standard
+ # walls (i.e. prismatic) in the active object storey.
+ # In order to run, the active object must be a wall and
+ # there must be selected walls
+
+ active_obj = bpy.context.active_object
+ if not active_obj:
+ self.report({"ERROR"}, "No active object. Please select a wall")
+ return
+
+ element = tool.Ifc.get_entity(active_obj)
+ if element and not element.is_a("IfcWall"):
+ return self.report({"ERROR"}, "The active object is not a wall. Please select a wall.")
+
+ container = ifcopenshell.util.element.get_container(element)
+ if not container:
+ self.report({"ERROR"}, "The wall is not contained.")
+
+ if not bpy.context.selected_objects:
+ self.report({"ERROR"}, "No selected objects found. Please select walls.")
+ return
+
+ core.add_instance_ceiling_coverings_from_walls(tool.Ifc, tool.Spatial, tool.Collector, tool.Geometry, tool.Covering)
+
diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py
index b1ad345e75..3a05528554 100644
--- a/src/blenderbim/blenderbim/bim/module/model/data.py
+++ b/src/blenderbim/blenderbim/bim/module/model/data.py
@@ -53,6 +53,7 @@ class AuthoringData:
cls.data["ifc_element_type"] = cls.ifc_element_type
cls.data["ifc_classes"] = cls.ifc_classes()
cls.data["relating_type_id"] = cls.relating_type_id() # only after .ifc_classes()
+ cls.data["predefined_type"] = cls.predefined_type()
cls.data["type_class"] = cls.type_class()
# only after .type_class()
@@ -212,6 +213,7 @@ class AuthoringData:
if bpy.context.active_object:
representation = tool.Geometry.get_active_representation(bpy.context.active_object)
if representation and representation.is_a("IfcShapeRepresentation"):
+ representation = tool.Geometry.resolve_mapped_representation(representation)
return representation.RepresentationType
@classmethod
@@ -247,6 +249,17 @@ class AuthoringData:
return [(str(e.id()), e.Name or "Unnamed", e.Description or "") for e in results]
return []
+ @classmethod
+ def predefined_type(cls):
+ relating_type_id = cls.props.relating_type_id
+ if not relating_type_id:
+ return
+ relating_type = tool.Ifc.get().by_id(int(relating_type_id))
+ if not hasattr(relating_type, "PredefinedType"):
+ return
+ predefined_type = relating_type.PredefinedType
+ return predefined_type
+
@classmethod
def selected_material_usages(cls):
selected_usages = {}
@@ -303,6 +316,7 @@ class StairData:
if not cls.data["pset_data"]:
return
cls.data["general_params"] = cls.general_params()
+ cls.data["calculated_params"] = cls.calculated_params()
@classmethod
def pset_data(cls):
@@ -319,6 +333,10 @@ class StairData:
general_params[prop_readable_name] = prop_value
return general_params
+ @classmethod
+ def calculated_params(cls):
+ return tool.Model.get_active_stair_calculated_params(cls.data["pset_data"]["data_dict"])
+
class SverchokData:
data = {}
@@ -345,7 +363,7 @@ class SverchokData:
def get_prop_from_data(props, data, prop_name):
- prop_value = data[prop_name]
+ prop_value = data.get(prop_name, tool.Blender.get_blender_prop_default_value(props, prop_name))
prop_value = round(prop_value, 5) if type(prop_value) is float else prop_value
prop_readable_name = props.bl_rna.properties[prop_name].name
return prop_readable_name, prop_value
diff --git a/src/blenderbim/blenderbim/bim/module/model/decorator.py b/src/blenderbim/blenderbim/bim/module/model/decorator.py
index 7eee9b3ae1..72d47d3c42 100644
--- a/src/blenderbim/blenderbim/bim/module/model/decorator.py
+++ b/src/blenderbim/blenderbim/bim/module/model/decorator.py
@@ -191,15 +191,15 @@ class ProfileDecorator:
unselected_edges.append(edge_indices)
### Actually drawing
- # 3D_POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
+ # POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
self.line_shader.bind()
# POLYLINE_UNIFORM_COLOR specific uniforms
self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height))
self.line_shader.uniform_float("lineWidth", 2.0)
# general shader
- self.shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ self.shader = gpu.shader.from_builtin("UNIFORM_COLOR")
self.shader.bind()
# Draw faces
diff --git a/src/blenderbim/blenderbim/bim/module/model/door.py b/src/blenderbim/blenderbim/bim/module/model/door.py
index d51ba058a1..a00559afec 100644
--- a/src/blenderbim/blenderbim/bim/module/model/door.py
+++ b/src/blenderbim/blenderbim/bim/module/model/door.py
@@ -68,13 +68,7 @@ def update_door_modifier_representation(context, obj):
},
}
- def get_active_representation_context(obj):
- active_representation = tool.Geometry.get_active_representation(obj)
- if active_representation:
- return active_representation.ContextOfItems
- return ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
-
- previously_active_context = get_active_representation_context(obj)
+ previously_active_context = tool.Geometry.get_active_representation_context(obj)
# ELEVATION_VIEW representation
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
@@ -124,7 +118,7 @@ def update_door_modifier_representation(context, obj):
# adding switch representation at the end instead of changing order of representations
# to prevent #2744
- if get_active_representation_context(obj) != previously_active_context:
+ if tool.Geometry.get_active_representation_context(obj) != previously_active_context:
previously_active_representation = ifcopenshell.util.representation.get_representation(
element,
previously_active_context.ContextType,
@@ -555,7 +549,7 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Data": json.dumps(door_data, default=list)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(door_data, default=list))},
)
update_door_modifier_representation(context, obj)
return {"FINISHED"}
@@ -614,7 +608,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator):
update_door_modifier_representation(context, obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Door")
- door_data = json.dumps(door_data, default=list)
+ door_data = tool.Ifc.get().createIfcText(json.dumps(door_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": door_data})
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/grid.py b/src/blenderbim/blenderbim/bim/module/model/grid.py
index 3159f03c3b..597cae860d 100644
--- a/src/blenderbim/blenderbim/bim/module/model/grid.py
+++ b/src/blenderbim/blenderbim/bim/module/model/grid.py
@@ -18,12 +18,10 @@
import bpy
import ifcopenshell.api
-import blenderbim.core.spatial
import blenderbim.tool as tool
from bpy.types import Operator
from bpy.props import FloatProperty, IntProperty
from mathutils import Vector
-from blenderbim.bim.ifc import IfcStore
def add_object(self, context):
@@ -66,7 +64,7 @@ def add_object(self, context):
tool.Ifc.get(),
**{"axis_tag": tag, "uvw_axes": "UAxes", "grid": grid},
)
- IfcStore.link_element(result, obj)
+ tool.Ifc.link(result, obj)
ifcopenshell.api.run("grid.create_axis_curve", tool.Ifc.get(), **{"axis_curve": obj, "grid_axis": result})
obj.BIMObjectProperties.ifc_definition_id = result.id()
@@ -91,7 +89,7 @@ def add_object(self, context):
tool.Ifc.get(),
**{"axis_tag": tag, "uvw_axes": "VAxes", "grid": grid},
)
- IfcStore.link_element(result, obj)
+ tool.Ifc.link(result, obj)
ifcopenshell.api.run("grid.create_axis_curve", tool.Ifc.get(), **{"axis_curve": obj, "grid_axis": result})
obj.BIMObjectProperties.ifc_definition_id = result.id()
diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py
index 6306e30544..8b387342fb 100644
--- a/src/blenderbim/blenderbim/bim/module/model/mep.py
+++ b/src/blenderbim/blenderbim/bim/module/model/mep.py
@@ -311,6 +311,7 @@ class MEPGenerator:
profile_joiner.set_depth(connected_obj, connected_element_length)
def get_segment_data(self, segment):
+ """returns points data is in world space"""
ports = tool.System.get_ports(segment)
segment_object = tool.Ifc.get_object(segment)
start_point = segment_object.location
@@ -451,11 +452,12 @@ class MEPGenerator:
# NOTE: I have a feeling that there are cases where order
# in which we're checking the segments is important
# but I couldn't pin it down to exact cases
- for test_segment_data in fitting_data[:]:
+ for test_segment_data in fitting_data:
for base_segment_data in segments_data:
if not are_segments_compatible(test_segment_data, base_segment_data):
continue
- segments_data.remove(test_segment_data)
+ segments_data.remove(base_segment_data)
+ break
# all segments were sorted
return len(segments_data) == 0
@@ -767,7 +769,8 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
profile_offset *= V(1, -1)
# world space profile offset
- profile_offset_ws = start_object_rotation @ (profile_offset * si_conversion).to_3d()
+ profile_offset_si = (profile_offset * si_conversion).to_3d()
+ profile_offset_ws = start_object_rotation @ profile_offset_si
def get_segments_length():
start_dir = (start_point - first_segment_start).normalized()
@@ -855,9 +858,9 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Data": json.dumps(transition_data, default=list)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(transition_data, default=list))},
)
- tool.System.add_ports(obj, offset_end_port=profile_offset_ws)
+ tool.System.add_ports(obj, offset_end_port=profile_offset_si)
# NOTE: at this point we loose current blender objects selection
# create transition element
@@ -1007,6 +1010,8 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
segments_intersection_ws, (end_segment_data["start_point"], end_segment_data["end_point"])
)
+ # start_/end_segment_sign indicate
+ # whether segments' z axes are directed towards the bend
start_port = points_ports_map[start_point]
end_port = points_ports_map[end_point]
start_point_on_origin = start_point == start_segment_data["start_point"]
@@ -1021,7 +1026,15 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
# TODO: profile offset may need to be flipped (check transition code)
to_start_object_space = start_object_rotation.inverted()
- profile_offset = (to_start_object_space @ end_point) - (to_start_object_space @ start_point)
+ ref_point = end_point.copy()
+ end_segment_dir = (second_segment_end - end_point).normalized()
+ # we prioritize direction between end_point and start_point for bend_vector
+ # if those point match we use general end segment direction
+ if tool.Cad.is_x((end_point - start_point).length, 0):
+ ref_point = end_point + end_segment_dir
+ bend_vector = (to_start_object_space @ ref_point) - (to_start_object_space @ start_point)
+
+ z_axis_end_object_local = to_start_object_space @ tool.Cad.get_basis_vector(end_object, 2)
def check_for_double_bends():
# The theory is To avoid double bends, the profile offset should occur along only two axes:
@@ -1035,8 +1048,6 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
# NOTE: some double bends are only possible for square profiles:
# https://i.imgur.com/ZhdGbEp.png
- z_axis_end_object = end_object.matrix_world.col[2].normalized().to_3d()
- z_axis_end_object_local = to_start_object_space @ z_axis_end_object
lateral_axes = [i for i in range(2) if not tool.Cad.is_x(z_axis_end_object_local[i], 0)]
if len(lateral_axes) != 1:
@@ -1046,7 +1057,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
)
non_lateral_axis = 0 if lateral_axes[0] == 1 else 1
- non_lateral_axis_offset = profile_offset[non_lateral_axis]
+ non_lateral_axis_offset = bend_vector[non_lateral_axis]
if not tool.Cad.is_x(non_lateral_axis_offset, 0):
return (
None,
@@ -1072,27 +1083,27 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
angle, rotation_axis = get_bend_rotation()
- lateral_sign = tool.Cad.sign(profile_offset[lateral_axis])
+ lateral_sign = tool.Cad.sign(bend_vector[lateral_axis])
radial_offset = V(0, 0, 0)
ref_point_radius = self.radius + profile_dim[lateral_axis]
radial_offset[lateral_axis] = ref_point_radius * (1 - cos(angle)) * lateral_sign
- radial_offset.z = ref_point_radius * sin(angle)
-
- def get_segments_extend():
- segments_intersection = segments_intersection_ws - start_point
- segments_intersection = to_start_object_space @ segments_intersection
+ radial_offset.z = ref_point_radius * sin(angle) * start_segment_sign
+ end_port_offset = radial_offset + V(0, 0, self.start_length * start_segment_sign)
+ end_port_offset += z_axis_end_object_local * (self.end_length * -end_segment_sign)
+ def get_segments_extend_points():
# since tangent segments are equal
# if drawn for the circle from the same point
required_offset = ref_point_radius * tan(angle / 2)
- current_start_offset = segments_intersection.length
- current_end_offset = (segments_intersection - profile_offset).length
+ start_segment_extend_point = segments_intersection_ws - start_segment_sign * (
+ self.start_length + required_offset
+ ) * get_z_basis(start_object)
+ end_segment_extend_point = segments_intersection_ws - end_segment_sign * (
+ self.end_length + required_offset
+ ) * get_z_basis(end_object)
- start_extend = current_start_offset - (required_offset + self.start_length)
- end_extend = current_end_offset - (required_offset + self.end_length)
-
- return start_extend, end_extend
+ return start_segment_extend_point, end_segment_extend_point
def check_new_segment_length(start_point, end_point, extend_point):
"""Check if segment is placed too near to the bend point.
@@ -1112,8 +1123,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
return None
# adjust segments to fit the radius and angle
- start_segment_extend, end_segment_extend = get_segments_extend()
- start_segment_extend_point = start_point + start_segment_sign * start_segment_extend * get_z_basis(start_object)
+ start_segment_extend_point, end_segment_extend_point = get_segments_extend_points()
projection = check_new_segment_length(first_segment_start, start_point, start_segment_extend_point)
if projection is not None:
self.report(
@@ -1122,7 +1132,6 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
)
return {"ERROR"}
- end_segment_extend_point = end_point + end_segment_sign * end_segment_extend * get_z_basis(end_object)
projection = check_new_segment_length(second_segment_end, end_point, end_segment_extend_point)
if projection is not None:
self.report(
@@ -1143,7 +1152,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
self.end_length / si_conversion,
angle,
self.radius / si_conversion,
- profile_offset / si_conversion,
+ bend_vector / si_conversion,
flip_z_axis=start_segment_sign == -1,
)
@@ -1198,9 +1207,9 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Data": json.dumps(bend_data, default=list)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(bend_data, default=list))},
)
- tool.System.add_ports(obj, offset_end_port=start_object_rotation @ (radial_offset * V(1, 1, 0)))
+ tool.System.add_ports(obj, end_port_pos=end_port_offset)
# NOTE: at this point we loose current blender objects selection
# create transition element
diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py
index 9b841cfe2b..5e7579ce86 100644
--- a/src/blenderbim/blenderbim/bim/module/model/opening.py
+++ b/src/blenderbim/blenderbim/bim/module/model/opening.py
@@ -18,6 +18,7 @@
import bpy
import gpu
+import json
import bmesh
import shapely
import logging
@@ -160,7 +161,10 @@ class FilledOpeningGenerator:
for voided_obj in voided_objs:
if voided_obj.data:
- representation = tool.Ifc.get().by_id(voided_obj.data.BIMMeshProperties.ifc_definition_id)
+ voided_element = tool.Ifc.get_entity(voided_obj)
+ context = tool.Geometry.get_active_representation_context(voided_obj)
+ representation = tool.Geometry.get_representation_by_context(voided_element, context)
+
blenderbim.core.geometry.switch_representation(
tool.Ifc,
tool.Geometry,
@@ -393,18 +397,7 @@ class FlipFill(bpy.types.Operator, tool.Ifc.Operator):
element = tool.Ifc.get_entity(obj)
if not element or not element.FillsVoids:
continue
-
- flip_matrix = Matrix.Rotation(pi, 4, "Z")
-
- bottom_left = obj.matrix_world @ Vector(obj.bound_box[0])
- top_right = obj.matrix_world @ Vector(obj.bound_box[6])
- center = obj.matrix_world.translation.copy()
- center_offset = center - bottom_left
- flipped_center = top_right - center_offset
-
- obj.matrix_world = obj.matrix_world @ flip_matrix
- obj.matrix_world.translation.xy = flipped_center.xy
- bpy.context.view_layer.update()
+ tool.Geometry.flip_object(obj, "XY")
return {"FINISHED"}
@@ -531,10 +524,11 @@ class AddBoolean(Operator, tool.Ifc.Operator):
elif obj2.data:
mesh_data = {"type": "Mesh", "blender_obj": obj1, "blender_void": obj2}
- ifcopenshell.api.run(
+ booleans = ifcopenshell.api.run(
"geometry.add_boolean", tool.Ifc.get(), representation=representation, operator="DIFFERENCE", **mesh_data
)
+ tool.Model.mark_manual_booleans(element1, booleans)
tool.Model.clear_scene_openings()
blenderbim.core.geometry.switch_representation(
@@ -655,6 +649,7 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper):
def _execute(self, context):
upstream_obj = None
+ bbim_boolean_updates = {}
for obj in context.selected_objects:
if (
not obj.data
@@ -663,13 +658,21 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper):
):
continue
try:
- boolean = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_boolean_id)
+ item = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_boolean_id)
except:
continue
- ifcopenshell.api.run("geometry.remove_boolean", tool.Ifc.get(), item=boolean)
+
+ boolean = None
+ for inverse in tool.Ifc.get().get_inverse(item):
+ if inverse.is_a("IfcBooleanResult"):
+ boolean = inverse
+ break
+ ifcopenshell.api.run("geometry.remove_boolean", tool.Ifc.get(), item=item)
+
if obj.data.BIMMeshProperties.obj:
upstream_obj = obj.data.BIMMeshProperties.obj
element = tool.Ifc.get_entity(upstream_obj)
+ bbim_boolean_updates.setdefault(element, []).append(boolean)
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
if body:
blenderbim.core.geometry.switch_representation(
@@ -682,7 +685,10 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper):
should_sync_changes_first=False,
)
bpy.data.objects.remove(obj)
-
+
+ for element, booleans in bbim_boolean_updates.items():
+ tool.Model.unmark_manual_booleans(element, booleans)
+
tool.Blender.set_active_object(upstream_obj)
return {"FINISHED"}
@@ -726,6 +732,9 @@ class HideOpenings(Operator, tool.Ifc.Operator):
element = tool.Ifc.get_entity(obj)
if not element:
continue
+ if element.is_a("IfcOpeningElement"):
+ element = element.VoidsElements[0].RelatingBuildingElement
+ obj = tool.Ifc.get_object(element)
openings = [r.RelatedOpeningElement for r in element.HasOpenings]
for opening in openings:
opening_obj = tool.Ifc.get_object(opening)
@@ -753,10 +762,14 @@ class EditOpenings(Operator, tool.Ifc.Operator):
element = tool.Ifc.get_entity(obj)
if not element:
continue
+ if element.is_a("IfcOpeningElement"):
+ element = element.VoidsElements[0].RelatingBuildingElement
+ obj = tool.Ifc.get_object(element)
openings = [r.RelatedOpeningElement for r in element.HasOpenings]
for opening in openings:
similar_openings = [o for o in all_openings if o.ObjectPlacement == opening.ObjectPlacement]
opening_obj = tool.Ifc.get_object(opening)
+ building_objs.add(obj)
if opening_obj:
if tool.Ifc.is_edited(opening_obj):
tool.Geometry.run_geometry_update_representation(obj=opening_obj)
@@ -764,9 +777,12 @@ class EditOpenings(Operator, tool.Ifc.Operator):
blenderbim.core.geometry.edit_object_placement(
tool.Ifc, tool.Geometry, tool.Surveyor, obj=opening_obj
)
- for similar_opening in similar_openings:
- similar_opening.ObjectPlacement = opening.ObjectPlacement
- building_objs.add(obj)
+ for similar_opening in similar_openings:
+ similar_opening.ObjectPlacement = opening.ObjectPlacement
+ element = similar_opening.VoidsElements[0].RelatingBuildingElement
+ obj = tool.Ifc.get_object(element)
+ building_objs.add(obj)
+
building_objs.update(self.get_all_building_objects_of_similar_openings(opening))
tool.Ifc.unlink(element=opening, obj=opening_obj)
bpy.data.objects.remove(opening_obj)
@@ -775,7 +791,7 @@ class EditOpenings(Operator, tool.Ifc.Operator):
return {"FINISHED"}
def get_all_building_objects_of_similar_openings(self, opening):
- if not opening.HasFillings:
+ if not opening.is_a("IfcOpeningElement") or not opening.HasFillings:
return []
results = set()
for rel in opening.HasFillings:
@@ -790,6 +806,7 @@ class EditOpenings(Operator, tool.Ifc.Operator):
results.add(obj)
return results
+
class CloneOpening(Operator, tool.Ifc.Operator):
bl_idname = "bim.clone_opening"
bl_label = "Clone Opening"
@@ -813,12 +830,15 @@ class CloneOpening(Operator, tool.Ifc.Operator):
new_opening = ifcopenshell.api.run("root.create_entity", tool.Ifc.get(), ifc_class="IfcOpeningElement")
for representation in opening_representations:
- ifcopenshell.api.run("geometry.assign_representation", tool.Ifc.get(), product = new_opening, representation = representation)
+ ifcopenshell.api.run(
+ "geometry.assign_representation", tool.Ifc.get(), product=new_opening, representation=representation
+ )
- ifcopenshell.api.run("void.add_opening", tool.Ifc.get(), opening = new_opening, element = wall)
+ ifcopenshell.api.run("void.add_opening", tool.Ifc.get(), opening=new_opening, element=wall)
new_opening.ObjectPlacement = opening_placement
return {"FINISHED"}
+
# TODO: merge with ProfileDecorator?
class DecorationsHandler:
installed = None
@@ -863,14 +883,14 @@ class DecorationsHandler:
if not obj:
continue
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
self.line_shader.bind() # required to be able to change uniforms of the shader
# POLYLINE_UNIFORM_COLOR specific uniforms
self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height))
self.line_shader.uniform_float("lineWidth", 2.0)
# general shader
- self.shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ self.shader = gpu.shader.from_builtin("UNIFORM_COLOR")
verts = []
selected_edges = []
diff --git a/src/blenderbim/blenderbim/bim/module/model/product.py b/src/blenderbim/blenderbim/bim/module/model/product.py
index 8d67810409..1427714b38 100644
--- a/src/blenderbim/blenderbim/bim/module/model/product.py
+++ b/src/blenderbim/blenderbim/bim/module/model/product.py
@@ -80,9 +80,13 @@ class AddDefaultType(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
props = context.scene.BIMModelProperties
+ ifc_file = tool.Ifc.get()
props.type_class = self.ifc_element_type
if self.ifc_element_type == "IfcWallType":
- props.type_predefined_type = "SOLIDWALL"
+ if ifc_file.schema == "IFC2X3":
+ props.type_predefined_type = "STANDARD"
+ else:
+ props.type_predefined_type = "SOLIDWALL"
props.type_template = "LAYERSET_AXIS2"
elif self.ifc_element_type == "IfcSlabType":
props.type_predefined_type = "FLOOR"
@@ -245,6 +249,8 @@ class AddConstrTypeInstance(bpy.types.Operator):
mat.translation *= unit_scale
mat = obj.matrix_world @ mat
new_port = tool.Ifc.run("root.create_entity", ifc_class="IfcDistributionPort")
+ new_port.PredefinedType = port.PredefinedType
+ new_port.SystemType = port.SystemType
tool.Ifc.run("system.assign_port", element=element, port=new_port)
tool.Ifc.run("geometry.edit_object_placement", product=new_port, matrix=mat, is_si=True)
@@ -555,5 +561,6 @@ def ensure_material_unassigned(usecase_path, ifc_file, settings):
total_removed = 0
for i in to_remove:
obj.active_material_index = i - total_removed
- bpy.ops.object.material_slot_remove({"object": obj})
+ with bpy.context.temp_override(object=obj):
+ bpy.ops.object.material_slot_remove()
total_removed += 1
diff --git a/src/blenderbim/blenderbim/bim/module/model/profile.py b/src/blenderbim/blenderbim/bim/module/model/profile.py
index d2576f1185..4330ef3f87 100644
--- a/src/blenderbim/blenderbim/bim/module/model/profile.py
+++ b/src/blenderbim/blenderbim/bim/module/model/profile.py
@@ -449,6 +449,16 @@ class DumbProfileJoiner:
"geometry.assign_representation", tool.Ifc.get(), product=element, representation=new_axis
)
+ def get_placement_axes(body_representation):
+ if not body_representation:
+ return None, None
+ extrusion = tool.Model.get_extrusion(body_representation)
+ if not extrusion:
+ return None, None
+ position = extrusion.Position
+ return (position.Axis.DirectionRatios, position.RefDirection.DirectionRatios)
+
+ old_body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
new_body = ifcopenshell.api.run(
"geometry.add_profile_representation",
tool.Ifc.get(),
@@ -457,9 +467,9 @@ class DumbProfileJoiner:
depth=depth,
cardinal_point=usage.CardinalPoint if usage else None,
clippings=self.clippings,
+ placement_zx_axes=get_placement_axes(old_body),
)
- old_body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
if old_body:
for inverse in tool.Ifc.get().get_inverse(old_body):
ifcopenshell.util.element.replace_attribute(inverse, old_body, new_body)
@@ -573,15 +583,11 @@ class DumbProfileJoiner:
if connection1 == "ATEND":
if tool.Cad.is_x(abs(xy_angle), (0, 90, 180), tolerance=0.001) and is_orthogonal:
plane = self.get_profile_plane(profile2, furthest_plane)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
self.body[1] = intersect
else:
plane = self.get_profile_plane(profile2, furthest_plane, z_inwards=False)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
max_dim = self.get_max_bound_box_dimension(profile1)
self.body[1] = intersect + profile1.matrix_world.to_quaternion() @ Vector((0, 0, max_dim))
@@ -624,15 +630,11 @@ class DumbProfileJoiner:
elif connection1 == "ATSTART":
if tool.Cad.is_x(abs(xy_angle), (0, 90, 180), tolerance=0.001) and is_orthogonal:
plane = self.get_profile_plane(profile2, furthest_plane)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
self.body[0] = intersect
else:
plane = self.get_profile_plane(profile2, furthest_plane, z_inwards=False)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
max_dim = self.get_max_bound_box_dimension(profile1)
self.body[0] = intersect - profile1.matrix_world.to_quaternion() @ Vector((0, 0, max_dim))
@@ -676,9 +678,7 @@ class DumbProfileJoiner:
if connection1 == "ATEND":
if tool.Cad.is_x(abs(xy_angle), (0, 90, 180), tolerance=0.001) and is_orthogonal:
plane = self.get_profile_plane(profile2, furthest_plane if is_relating else closest_plane)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
self.body[1] = intersect
else:
plane = self.get_profile_plane(
@@ -686,9 +686,7 @@ class DumbProfileJoiner:
furthest_plane if is_relating else closest_plane,
z_inwards=False if is_relating else True,
)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
max_dim = self.get_max_bound_box_dimension(profile1)
self.body[1] = intersect + profile1.matrix_world.to_quaternion() @ Vector((0, 0, max_dim))
self.clippings.append(
@@ -701,9 +699,7 @@ class DumbProfileJoiner:
elif connection1 == "ATSTART":
if tool.Cad.is_x(abs(xy_angle), (0, 90, 180), tolerance=0.001) and is_orthogonal:
plane = self.get_profile_plane(profile2, furthest_plane if is_relating else closest_plane)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
self.body[0] = intersect
else:
plane = self.get_profile_plane(
@@ -711,9 +707,7 @@ class DumbProfileJoiner:
furthest_plane if is_relating else closest_plane,
z_inwards=False if is_relating else True,
)
- intersect = mathutils.geometry.intersect_line_plane(
- *axis1, plane.translation, plane.col[2].to_3d()
- )
+ intersect = mathutils.geometry.intersect_line_plane(*axis1, plane.translation, plane.col[2].to_3d())
max_dim = self.get_max_bound_box_dimension(profile1)
self.body[0] = intersect - profile1.matrix_world.to_quaternion() @ Vector((0, 0, max_dim))
self.clippings.append(
@@ -967,7 +961,7 @@ class EnableEditingExtrusionAxis(bpy.types.Operator, tool.Ifc.Operator):
bpy.ops.object.mode_set(mode="EDIT")
ProfileDecorator.install(context, exit_edit_mode_callback=lambda: disable_editing_extrusion_axis(context))
if not bpy.app.background:
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py
index 2723e7904e..2049020ce2 100644
--- a/src/blenderbim/blenderbim/bim/module/model/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/model/prop.py
@@ -79,6 +79,7 @@ def update_type_class(self, context):
def update_relating_type_id(self, context):
AuthoringData.data["relating_type_id"] = AuthoringData.relating_type_id()
AuthoringData.data["type_thumbnail"] = AuthoringData.type_thumbnail()
+ AuthoringData.data["predefined_type"] = AuthoringData.predefined_type()
def update_type_page(self, context):
@@ -139,6 +140,7 @@ class BIMModelProperties(PropertyGroup):
rl3: bpy.props.FloatProperty(name="RL", default=1, subtype="DISTANCE", description="Z offset for space calculation")
x_angle: bpy.props.FloatProperty(name="X Angle", default=0, subtype="ANGLE", min=-pi / 180 * 89, max=pi / 180 * 89)
type_page: bpy.props.IntProperty(name="Type Page", default=1, update=update_type_page)
+ # fmt: off
type_template: bpy.props.EnumProperty(
items=(
("MESH", "Custom Mesh", "Use as a representation currently active object mesh or default cube if no object selected"),
@@ -158,6 +160,7 @@ class BIMModelProperties(PropertyGroup):
name="Type Template",
default="MESH",
)
+ # fmt: on
type_class: bpy.props.EnumProperty(items=get_type_class, name="IFC Class", update=update_type_class)
type_predefined_type: bpy.props.EnumProperty(items=get_type_predefined_type, name="Predefined Type", default=None)
type_name: bpy.props.StringProperty(name="Name", default="TYPEX")
@@ -190,6 +193,10 @@ class BIMArrayProperties(PropertyGroup):
class BIMStairProperties(PropertyGroup):
+ def validate_nosing_value(self, context):
+ if self.stair_type != "WOOD/STEEL" and self.nosing_length < 0:
+ self["nosing_length"] = 0
+
non_si_units_props = ("is_editing", "number_of_treads", "has_top_nib", "stair_type")
stair_types = (
("CONCRETE", "Concrete", ""),
@@ -200,13 +207,37 @@ class BIMStairProperties(PropertyGroup):
is_editing: bpy.props.BoolProperty(default=False)
width: bpy.props.FloatProperty(name="Width", default=1.2, soft_min=0.01, subtype="DISTANCE")
height: bpy.props.FloatProperty(name="Height", default=1.0, soft_min=0.01, subtype="DISTANCE")
- number_of_treads: bpy.props.IntProperty(name="Number of treads", default=6, soft_min=1)
+ number_of_treads: bpy.props.IntProperty(name="Number of Treads", default=6, soft_min=1)
tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, soft_min=0.01, subtype="DISTANCE")
tread_run: bpy.props.FloatProperty(name="Tread Run", default=0.3, soft_min=0.01, subtype="DISTANCE")
- base_slab_depth: bpy.props.FloatProperty(name="Base slab depth", default=0.25, soft_min=0, subtype="DISTANCE")
- top_slab_depth: bpy.props.FloatProperty(name="Top slab depth", default=0.25, soft_min=0, subtype="DISTANCE")
- has_top_nib: bpy.props.BoolProperty(name="Has top nib", default=True)
- stair_type: bpy.props.EnumProperty(name="Stair type", items=stair_types, default="CONCRETE")
+ base_slab_depth: bpy.props.FloatProperty(name="Base Slab Depth", default=0.25, soft_min=0, subtype="DISTANCE")
+ top_slab_depth: bpy.props.FloatProperty(name="Top Slab Depth", default=0.25, soft_min=0, subtype="DISTANCE")
+ has_top_nib: bpy.props.BoolProperty(name="Has Top Nib", default=True)
+ stair_type: bpy.props.EnumProperty(
+ name="Stair Type", items=stair_types, default="CONCRETE", update=validate_nosing_value
+ )
+ custom_first_last_tread_run: bpy.props.FloatVectorProperty(
+ name="Custom First / Last Treads Widths",
+ description='Specify custom first / last treads widths, different from the general "Tread Run". Leave 0 to disable.',
+ default=(0, 0),
+ min=0,
+ unit="LENGTH",
+ size=2,
+ )
+ # TODO: need to clamp at zero for non WOOD/STEEL
+ nosing_length: bpy.props.FloatProperty(
+ name="Nosing Length",
+ description=(
+ "Overhang of the tread, not counted as a part of the tread run.\n"
+ "Can be negative for WOOD/STEEL stair (then it becomes a tread gap)"
+ ),
+ default=0,
+ unit="LENGTH",
+ update=validate_nosing_value,
+ )
+ nosing_depth: bpy.props.FloatProperty(
+ name="Nosing Depth", description="Depth of the tread's nosing", min=0, default=0, unit="LENGTH"
+ )
def get_props_kwargs(self, convert_to_project_units=False, stair_type=None):
if not stair_type:
@@ -217,10 +248,12 @@ class BIMStairProperties(PropertyGroup):
"height": self.height,
"number_of_treads": self.number_of_treads,
"tread_run": self.tread_run,
+ "nosing_length": self.nosing_length,
}
if stair_type == "CONCRETE":
concrete_props = {
+ "nosing_depth": self.nosing_depth,
"base_slab_depth": self.base_slab_depth,
"top_slab_depth": self.top_slab_depth,
"has_top_nib": self.has_top_nib,
@@ -235,7 +268,13 @@ class BIMStairProperties(PropertyGroup):
stair_kwargs.update(wood_steel_props)
elif stair_type == "GENERIC":
- pass
+ generic_props = {
+ "nosing_depth": self.nosing_depth,
+ }
+ stair_kwargs.update(generic_props)
+
+ # defined here to appear last in UI
+ stair_kwargs["custom_first_last_tread_run"] = self.custom_first_last_tread_run
if not convert_to_project_units:
return stair_kwargs
diff --git a/src/blenderbim/blenderbim/bim/module/model/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py
index 87ebfb2a98..c7dc278fe5 100644
--- a/src/blenderbim/blenderbim/bim/module/model/railing.py
+++ b/src/blenderbim/blenderbim/bim/module/model/railing.py
@@ -114,7 +114,7 @@ def update_bbim_railing_pset(element, railing_data):
pset = tool.Pset.get_element_pset(element, "BBIM_Railing")
if not pset:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Railing")
- railing_data = json.dumps(railing_data, default=list)
+ railing_data = tool.Ifc.get().createIfcText(json.dumps(railing_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": railing_data})
@@ -455,7 +455,7 @@ class EnableEditingRailingPath(bpy.types.Operator, tool.Ifc.Operator):
if bpy.context.active_object.mode != "EDIT":
bpy.ops.object.mode_set(mode="EDIT")
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
ProfileDecorator.install(context, exit_edit_mode_callback=lambda: cancel_editing_railing_path(context))
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/roof.py b/src/blenderbim/blenderbim/bim/module/model/roof.py
index e8b529cf96..c07236cc02 100644
--- a/src/blenderbim/blenderbim/bim/module/model/roof.py
+++ b/src/blenderbim/blenderbim/bim/module/model/roof.py
@@ -412,7 +412,7 @@ def update_bbim_roof_pset(element, roof_data):
pset = tool.Pset.get_element_pset(element, "BBIM_Roof")
if not pset:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Roof")
- roof_data = json.dumps(roof_data, default=list)
+ roof_data = tool.Ifc.get().createIfcText(json.dumps(roof_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": roof_data})
@@ -649,7 +649,7 @@ class EnableEditingRoofPath(bpy.types.Operator, tool.Ifc.Operator):
if bpy.context.active_object.mode != "EDIT":
bpy.ops.object.mode_set(mode="EDIT")
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
def mark_preview_edges(bm, bew_verts, new_edges, new_faces):
preview_layer = bm.edges.layers.int["BBIM_preview"]
diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py
index b3cbe091b4..624d41e2bd 100644
--- a/src/blenderbim/blenderbim/bim/module/model/slab.py
+++ b/src/blenderbim/blenderbim/bim/module/model/slab.py
@@ -288,7 +288,7 @@ class DumbSlabPlaner:
"geometry.add_slab_representation",
tool.Ifc.get(),
context=body_context,
- depth=thickness,
+ depth=thickness * self.unit_scale,
x_angle=x_angle,
)
for inverse in tool.Ifc.get().get_inverse(representation):
@@ -313,7 +313,7 @@ class DumbSlabPlaner:
"geometry.add_slab_representation",
tool.Ifc.get(),
context=body_context,
- depth=thickness,
+ depth=thickness * self.unit_scale,
x_angle=x_angle,
)
ifcopenshell.api.run(
@@ -625,7 +625,7 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator):
bpy.ops.object.mode_set(mode="EDIT")
ProfileDecorator.install(context, exit_edit_mode_callback=lambda: disable_editing_extrusion_profile(context))
if not bpy.app.background:
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/space.py b/src/blenderbim/blenderbim/bim/module/model/space.py
index 5f0e8edaf3..067de63ed0 100644
--- a/src/blenderbim/blenderbim/bim/module/model/space.py
+++ b/src/blenderbim/blenderbim/bim/module/model/space.py
@@ -18,16 +18,11 @@
import bpy
-import bmesh
-import shapely
import ifcopenshell
import ifcopenshell.util.element
import blenderbim.tool as tool
import blenderbim.core.spatial as core
import blenderbim.core.type
-from math import pi
-from mathutils import Vector, Matrix
-from shapely import Polygon, MultiPolygon
class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator):
@@ -50,13 +45,7 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator):
def msg(self, context):
self.layout.label(text="NO ACTIVE STOREY")
- props = context.scene.BIMModelProperties
- relating_type_id = props.relating_type_id
- relating_type = None
- if relating_type_id:
- relating_type = tool.Ifc.get().by_id(int(relating_type_id))
- if not relating_type.is_a("IfcSpaceType"):
- relating_type = None
+# props = context.scene.BIMModelProperties
collection = context.view_layer.active_layer_collection.collection
collection_obj = collection.BIMCollectionProperties.obj
@@ -68,151 +57,7 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator):
bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR")
return
- active_obj = bpy.context.active_object
- element = None
- if bpy.context.selected_objects and active_obj:
- element = tool.Ifc.get_entity(active_obj)
- mat = active_obj.matrix_world
- local_bbox_center = 0.125 * sum((Vector(b) for b in active_obj.bound_box), Vector())
- global_bbox_center = mat @ local_bbox_center
- x = global_bbox_center.x
- y = global_bbox_center.y
- z = (mat @ Vector(active_obj.bound_box[0])).z
-
- h = active_obj.dimensions.z
- else:
- x, y = context.scene.cursor.location.xy
- z = collection_obj.matrix_world.translation.z
- mat = Matrix()
- mat.translation = (x, y, z)
- h = 3
-
- calculation_rl = context.scene.BIMModelProperties.rl3
- self.cut_point = collection_obj.matrix_world.translation.copy() + Vector((0, 0, calculation_rl))
- self.cut_normal = Vector((0, 0, 1))
- boundary_lines = []
-
- gross_settings = ifcopenshell.geom.settings()
- gross_settings.set(gross_settings.DISABLE_OPENING_SUBTRACTIONS, True)
-
- for obj in bpy.context.visible_objects:
- visible_element = tool.Ifc.get_entity(obj)
-
- if (
- not visible_element
- or obj.type != "MESH"
- or not self.is_bounding_class(visible_element)
- or not tool.Drawing.is_intersecting_plane(obj, self.cut_point, self.cut_normal)
- ):
- continue
-
- old_mesh = None
- if visible_element.HasOpenings:
- new_mesh = self.create_mesh(ifcopenshell.geom.create_shape(gross_settings, visible_element))
- old_mesh = obj.data
- obj.data = new_mesh
-
- local_cut_point = obj.matrix_world.inverted() @ self.cut_point
- local_cut_normal = obj.matrix_world.inverted().to_quaternion() @ self.cut_normal
- verts, edges = tool.Drawing.bisect_mesh_with_plane(obj, local_cut_point, local_cut_normal)
-
- if old_mesh:
- obj.data = old_mesh
- bpy.data.meshes.remove(new_mesh)
-
- for edge in edges or []:
- boundary_lines.append(
- shapely.LineString(
- [Vector((round(x, 3) for x in verts[edge[0]])), Vector((round(x, 3) for x in verts[edge[1]]))]
- )
- )
-
- unioned_boundaries = shapely.union_all(shapely.GeometryCollection(boundary_lines))
- closed_polygons = shapely.polygonize(unioned_boundaries.geoms)
-
- space_polygon = None
- for polygon in closed_polygons.geoms:
- if shapely.contains_xy(polygon, x, y):
- space_polygon = shapely.force_3d(polygon)
-
- if not space_polygon:
- return
-
- bm = bmesh.new()
- bm.verts.index_update()
- bm.edges.index_update()
-
- mat_invert = mat.inverted()
- new_verts = [bm.verts.new(mat_invert @ Vector([v[0], v[1], z])) for v in space_polygon.exterior.coords[0:-1]]
- [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)]
- bm.edges.new((new_verts[len(new_verts) - 1], new_verts[0]))
-
- for interior in space_polygon.interiors:
- new_verts = [bm.verts.new(mat_invert @ Vector([v[0], v[1], z])) for v in interior.coords[0:-1]]
- [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)]
- bm.edges.new((new_verts[len(new_verts) - 1], new_verts[0]))
-
- bm.verts.index_update()
- bm.edges.index_update()
-
- bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=1e-5)
- bmesh.ops.triangle_fill(bm, edges=bm.edges)
- bmesh.ops.dissolve_limit(bm, angle_limit=pi / 180 * 5, verts=bm.verts, edges=bm.edges)
-
- extrusion = bmesh.ops.extrude_face_region(bm, geom=bm.faces)
- extruded_verts = [g for g in extrusion["geom"] if isinstance(g, bmesh.types.BMVert)]
- bmesh.ops.translate(bm, vec=[0.0, 0.0, h], verts=extruded_verts)
-
- mesh = bpy.data.meshes.new(name="Space")
- bm.to_mesh(mesh)
- bm.free()
-
- if element and element.is_a("IfcSpace"):
- mesh.name = active_obj.data.name
- mesh.BIMMeshProperties.ifc_definition_id = active_obj.data.BIMMeshProperties.ifc_definition_id
- tool.Geometry.change_object_data(active_obj, mesh, is_global=True)
- tool.Ifc.edit(active_obj)
- else:
- if relating_type:
- name = tool.Model.generate_occurrence_name(relating_type, "IfcSpace")
- else:
- name = "Space"
- obj = bpy.data.objects.new("Space", mesh)
- obj.matrix_world = mat
- collection.objects.link(obj)
- bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcSpace")
- element = tool.Ifc.get_entity(obj)
- if relating_type:
- blenderbim.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type)
-
- def is_bounding_class(self, element):
- for ifc_class in ["IfcWall", "IfcColumn", "IfcMember", "IfcVirtualElement", "IfcPlate"]:
- if element.is_a(ifc_class):
- return True
- return False
-
- def create_mesh(self, shape):
- geometry = shape.geometry
- mesh = bpy.data.meshes.new("tmp")
- verts = geometry.verts
- if geometry.faces:
- num_vertices = len(verts) // 3
- total_faces = len(geometry.faces)
- loop_start = range(0, total_faces, 3)
- num_loops = total_faces // 3
- loop_total = [3] * num_loops
- num_vertex_indices = len(geometry.faces)
-
- mesh.vertices.add(num_vertices)
- mesh.vertices.foreach_set("co", verts)
- mesh.loops.add(num_vertex_indices)
- mesh.loops.foreach_set("vertex_index", geometry.faces)
- mesh.polygons.add(num_loops)
- mesh.polygons.foreach_set("loop_start", loop_start)
- mesh.polygons.foreach_set("loop_total", loop_total)
- mesh.polygons.foreach_set("use_smooth", [0] * total_faces)
- mesh.update()
- return mesh
+ core.generate_space(tool.Ifc, tool.Spatial, tool.Model, tool.Type)
class GenerateSpacesFromWalls(bpy.types.Operator, tool.Ifc.Operator):
@@ -233,6 +78,26 @@ class GenerateSpacesFromWalls(bpy.types.Operator, tool.Ifc.Operator):
# walls (i.e. prismatic) in the active object storey.
# In order to run, the active object must be a wall and
# there must be selected walls
+
+ active_obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(active_obj)
+ container = tool.Spatial.get_container(element)
+
+ if not active_obj:
+ self.report({"ERROR"}, "No active object. Please select a wall")
+ return
+
+ element = tool.Ifc.get_entity(active_obj)
+ if element and not element.is_a("IfcWall"):
+ return self.report({"ERROR"}, "The active object is not a wall. Please select a wall.")
+
+ if not container:
+ self.report({"ERROR"}, "The wall is not contained.")
+
+ if not bpy.context.selected_objects:
+ self.report({"ERROR"}, "No selected objects found. Please select walls.")
+ return
+
core.generate_spaces_from_walls(tool.Ifc, tool.Spatial, tool.Collector)
class ToggleSpaceVisibility(bpy.types.Operator, tool.Ifc.Operator):
diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py
index a444f510fc..ed21e820b5 100644
--- a/src/blenderbim/blenderbim/bim/module/model/stair.py
+++ b/src/blenderbim/blenderbim/bim/module/model/stair.py
@@ -17,22 +17,17 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
+import json
+import bmesh
+import ifcopenshell
+import blenderbim
+import blenderbim.tool as tool
+from mathutils import Vector
+from bmesh.types import BMVert
from bpy.types import Operator
from bpy.props import FloatProperty, IntProperty
from bpy_extras.object_utils import AddObjectHelper, object_data_add
-import bmesh
-from bmesh.types import BMVert
-
-import ifcopenshell
-from ifcopenshell.util.shape_builder import V, ShapeBuilder
-import blenderbim
-import blenderbim.tool as tool
-
-from mathutils import Vector
-from pprint import pprint
-import json
-
def add_dumb_stair_object(self, context):
verts = [
@@ -82,138 +77,10 @@ class BIM_OT_add_object(Operator, AddObjectHelper):
return {"FINISHED"}
-def generate_stair_2d_profile(
- number_of_treads,
- height,
- width,
- tread_run,
- stair_type,
- # WOOD/STEEL CONCRETE STAIR ARGUMENTS
- tread_depth=None,
- # CONCRETE STAIR ARGUMENTS
- has_top_nib=None,
- top_slab_depth=None,
- base_slab_depth=None,
-):
- vertices = []
- edges = []
- faces = []
-
- number_of_risers = number_of_treads + 1
- tread_rise = height / number_of_risers
- length = tread_run * number_of_risers
-
- if stair_type == "WOOD/STEEL":
- builder = ShapeBuilder(None)
- tread_shape = builder.get_rectangle_coords(
- size=V(tread_run, 0, tread_depth),
- position=V(0, 0, -(tread_depth-tread_rise))
- )
- tread_offset = V(tread_run, 0, tread_rise)
-
- for i in range(number_of_risers):
- cur_trade_shape = [v + tread_offset * i for v in tread_shape]
- vertices.extend(cur_trade_shape)
-
- cur_vertex = i * 4
- edges.extend([
- (cur_vertex, cur_vertex+1),
- (cur_vertex+1, cur_vertex+2),
- (cur_vertex+2, cur_vertex+3),
- (cur_vertex+3, cur_vertex),
- ])
- faces.append(list(range(cur_vertex, cur_vertex + 1)))
-
- return (vertices, edges, faces)
-
- elif stair_type == "GENERIC":
- vertices.append(Vector([0, 0, 0]))
-
- tread_verts = [
- Vector([0, 0, tread_rise]),
- Vector([tread_run, 0, tread_rise])
- ]
- tread_offset = Vector([tread_run, 0, tread_rise])
-
- for i in range(number_of_risers):
- current_tread_verts = [v + tread_offset * i for v in tread_verts]
- last_vert_i = len(vertices) - 1
- edges.extend([
- (last_vert_i, last_vert_i + 1),
- (last_vert_i + 1, last_vert_i + 2)
- ])
- vertices.extend(current_tread_verts)
-
- last_vert_i = len(vertices)
- vertices.append(vertices[-1] * V(1,0,0))
- edges.extend([
- (last_vert_i - 1, last_vert_i),
- (last_vert_i, 0)
- ])
-
- return (vertices, edges, faces)
-
- elif stair_type == "CONCRETE":
- for i in range(number_of_risers):
- vertices.extend([
- Vector((tread_run*i, 0, tread_rise*i)),
- Vector((tread_run*i, 0, tread_rise*(i+1)))
- ])
- cur_vertex = i * 2
- if i != 0:
- edges.append((cur_vertex - 1, cur_vertex))
- edges.append((cur_vertex, cur_vertex + 1))
-
- vertices.append(Vector((tread_run * number_of_risers, 0, tread_rise * number_of_risers)))
- edges.append((number_of_risers * 2, number_of_risers * 2 - 1))
-
- td_vector = Vector((vertices[2][2], 0, -vertices[2][0])).normalized() * tread_depth
-
- k = tread_rise / tread_run
- s0 = vertices[0] + td_vector
- b = s0.z - k * s0.x # comes from y = kx + b
- # you could use td_vector as depth_vector
- # but then stair won't be perpendicular to the X+
- # b is kind of vertical tread_depth (along Z+)
- depth_vector = Vector((0, 0, b))
-
- # top nib
- if has_top_nib:
- vertices.append( vertices[number_of_risers * 2] + Vector((0, 0, -top_slab_depth)) )
- vertices.append( vertices[number_of_risers * 2] + Vector(((-top_slab_depth - b) / k, 0, -top_slab_depth)) )
- last_vertex_i = len(vertices) - 1
- edges.append( (number_of_risers * 2, last_vertex_i - 1) )
- edges.append( (last_vertex_i - 1, last_vertex_i) )
- else:
- vertices.append(vertices[number_of_risers * 2] + depth_vector)
- last_vertex_i = len(vertices) - 1
- edges.append((number_of_risers * 2, last_vertex_i))
-
- top_nib_end = len(vertices) - 1
-
- # bottom nib
- if abs(b) <= base_slab_depth:
- vertices.append(vertices[0] + depth_vector)
- edges.append((0, len(vertices) - 1))
- bottom_nib_end = len(vertices) - 1
- else:
- vertices.append(vertices[0] + Vector(((-base_slab_depth - b) / k, 0, -base_slab_depth)))
- vertices.append(vertices[0] + Vector((0, 0, -base_slab_depth)))
- last_vertex_i = len(vertices) - 1
- edges.append( (0, last_vertex_i) )
- edges.append( (last_vertex_i - 1, last_vertex_i) )
- bottom_nib_end = len(vertices) - 2
-
- edges.append( (bottom_nib_end, top_nib_end) )
- faces = [list(range(len(vertices)))]
-
- return (vertices, edges, faces)
-
-
-def update_stair_modifier(context):
+def regenerate_stair_mesh(context):
obj = context.active_object
props_kwargs = obj.BIMStairProperties.get_props_kwargs()
- vertices, edges, faces = generate_stair_2d_profile(**props_kwargs)
+ vertices, edges, faces = tool.Model.generate_stair_2d_profile(**props_kwargs)
obj = context.active_object
bm = bmesh.new()
@@ -221,7 +88,7 @@ def update_stair_modifier(context):
bm.edges.index_update()
new_verts = [bm.verts.new(v) for v in vertices]
- new_edges = [bm.edges.new( (new_verts[e[0]], new_verts[e[1]]) ) for e in edges]
+ new_edges = [bm.edges.new((new_verts[e[0]], new_verts[e[1]])) for e in edges]
bm.verts.index_update()
bm.edges.index_update()
@@ -242,6 +109,26 @@ def update_stair_modifier(context):
obj.data.update()
+def update_stair_representation(obj):
+ body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW")
+ representation = ifcopenshell.api.run(
+ "geometry.add_representation",
+ tool.Ifc.get(),
+ context=body,
+ blender_object=obj,
+ geometry=obj.data,
+ coordinate_offset=tool.Geometry.get_cartesian_point_coordinate_offset(obj),
+ total_items=tool.Geometry.get_total_representation_items(obj),
+ should_force_faceted_brep=tool.Geometry.should_force_faceted_brep(),
+ should_force_triangulation=tool.Geometry.should_force_triangulation(),
+ should_generate_uvs=tool.Geometry.should_generate_uvs(obj),
+ ifc_representation_class=None,
+ profile_set_usage=None,
+ )
+ tool.Model.replace_object_ifc_representation(body, obj, representation)
+ tool.Ifc.finish_edit(obj)
+
+
def update_ifc_stair_props(obj):
"""should be called after new geometry settled
since it's going to update ifc representation
@@ -259,6 +146,7 @@ def update_ifc_stair_props(obj):
si_conversion = ifcopenshell.util.unit.calculate_unit_scale(ifc_file)
riser_height = props.height / number_of_risers / si_conversion
tread_length = props.tread_depth / si_conversion
+ nosing_length = props.nosing_length / si_conversion
if element.is_a("IfcStairFlight"):
if tool.Ifc.get_schema() == "IFC2X3":
@@ -284,6 +172,7 @@ def update_ifc_stair_props(obj):
"NumberOfTreads": props.number_of_treads,
"RiserHeight": riser_height,
"TreadLength": tread_length,
+ "NosingLength": nosing_length,
},
)
tool.Ifc.edit(obj)
@@ -327,7 +216,7 @@ class BIM_OT_add_clever_stair(bpy.types.Operator, tool.Ifc.Operator):
obj.location = spawn_location
collection = context.view_layer.active_layer_collection.collection
collection.objects.link(obj)
-
+
body_context = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
element = blenderbim.core.root.assign_class(
tool.Ifc,
@@ -335,7 +224,7 @@ class BIM_OT_add_clever_stair(bpy.types.Operator, tool.Ifc.Operator):
tool.Root,
obj=obj,
ifc_class="IfcStairFlight",
- should_add_representation=True,
+ should_add_representation=False,
context=body_context,
)
if tool.Ifc.get_schema() != "IFC2X3":
@@ -370,10 +259,11 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
ifc_file,
pset=pset,
- properties={"Data": json.dumps(stair_data)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(stair_data))},
)
- update_stair_modifier(context)
+ regenerate_stair_mesh(context)
update_ifc_stair_props(obj)
+ update_stair_representation(obj)
class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator):
@@ -388,7 +278,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator):
props = obj.BIMStairProperties
# restore previous settings since editing was canceled
props.set_props_kwargs_from_ifc_data(data)
- update_stair_modifier(context)
+ regenerate_stair_mesh(context)
props.is_editing = False
@@ -407,10 +297,11 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator):
data = props.get_props_kwargs(convert_to_project_units=True)
props.is_editing = False
- update_stair_modifier(context)
+ regenerate_stair_mesh(context)
+ update_stair_representation(obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Stair")
- data = json.dumps(data)
+ data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
# update IfcStairFlight properties
diff --git a/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py b/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py
index 7c6428a4eb..8a1946896a 100644
--- a/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py
+++ b/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py
@@ -99,7 +99,7 @@ class DeleteSverchokGraph(bpy.types.Operator, tool.Ifc.Operator):
return {"FINISHED"}
def draw(self, context):
- self.layout.label(text="WARNING. The graph will be removed permamently.")
+ self.layout.label(text="WARNING. The graph will be removed permanently.")
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
@@ -169,7 +169,7 @@ class UpdateDataFromSverchok(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Data": json.dumps(sverchok_data)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(sverchok_data))},
)
update_sverchok_modifier(context)
diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py
index 07cd3ec4bd..b56ceab0b3 100644
--- a/src/blenderbim/blenderbim/bim/module/model/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/model/ui.py
@@ -30,12 +30,13 @@ from blenderbim.bim.module.model.data import (
RoofData,
)
from blenderbim.bim.module.model.prop import get_ifc_class
-from blenderbim.bim.module.model.stair import update_stair_modifier
+from blenderbim.bim.module.model.stair import regenerate_stair_mesh
from blenderbim.bim.module.model.window import update_window_modifier_bmesh
from blenderbim.bim.module.model.door import update_door_modifier_bmesh
from blenderbim.bim.module.model.railing import update_railing_modifier_bmesh
from blenderbim.bim.module.model.roof import update_roof_modifier_bmesh
from blenderbim.bim.helper import prop_with_search
+from collections.abc import Iterable
class LaunchTypeManager(bpy.types.Operator):
@@ -160,7 +161,7 @@ class BIM_PT_Grids(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
def draw(self, context):
self.layout.row().operator("mesh.add_grid", icon="ADD", text="Add Grids")
@@ -259,35 +260,42 @@ class BIM_PT_stair(bpy.types.Panel):
row = self.layout.row(align=True)
row.label(text="Stair parameters", icon="IPO_CONSTANT")
- stair_data = StairData.data["pset_data"]["data_dict"]
if props.is_editing:
+ calculated_params = tool.Model.get_active_stair_calculated_params()
row = self.layout.row(align=True)
row.operator("bim.finish_editing_stair", icon="CHECKMARK", text="Finish Editing")
row.operator("bim.cancel_editing_stair", icon="CANCEL", text="")
row = self.layout.row(align=True)
for prop_name in props.get_props_kwargs():
- self.layout.prop(props, prop_name)
- update_stair_modifier(context)
+ prop_value = getattr(props, prop_name)
+ if isinstance(prop_value, Iterable) and not isinstance(prop_value, str):
+ prop_readable_name = props.bl_rna.properties[prop_name].name
+ self.layout.label(text=f"{prop_readable_name}:")
+ self.layout.prop(props, prop_name, text="")
+ else:
+ self.layout.prop(props, prop_name)
+ regenerate_stair_mesh(context)
else:
+ calculated_params = StairData.data["calculated_params"]
row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="")
row.operator("bim.remove_stair", icon="X", text="")
row = self.layout.row(align=True)
for prop_name, prop_value in StairData.data["general_params"].items():
row = self.layout.row(align=True)
- row.label(text=prop_name)
- row.label(text=str(prop_value))
+ if isinstance(prop_value, Iterable) and not isinstance(prop_value, str):
+ row.label(text=f"{prop_name}:")
+ row = self.layout.row(align=True)
+ for prop_value_item in prop_value:
+ row.label(text=str(prop_value_item))
+ else:
+ row.label(text=prop_name)
+ row.label(text=str(prop_value))
# calculated properties
- number_of_rises = props.number_of_treads + 1
- row = self.layout.row(align=True)
- row.label(text="Number of risers")
- row.label(text=str(number_of_rises))
- row = self.layout.row(align=True)
- row.label(text="Tread rise")
- row.label(text=str(round(props.height / number_of_rises, 5)))
- row = self.layout.row(align=True)
- row.label(text="Length")
- row.label(text=str(round(props.tread_run * number_of_rises, 5)))
+ for prop_name, prop_value in calculated_params.items():
+ row = self.layout.row(align=True)
+ row.label(text=prop_name)
+ row.label(text=str(prop_value))
else:
row = self.layout.row()
row.label(text="No Stair Found")
diff --git a/src/blenderbim/blenderbim/bim/module/model/wall.py b/src/blenderbim/blenderbim/bim/module/model/wall.py
index 54b81214a0..f4cd1e346f 100644
--- a/src/blenderbim/blenderbim/bim/module/model/wall.py
+++ b/src/blenderbim/blenderbim/bim/module/model/wall.py
@@ -1262,8 +1262,13 @@ class DumbWallJoiner:
results["is_sloped"] = True
results["height"] = (item.Depth * self.unit_scale) / (1 / cos(results["x_angle"]))
break
- elif item.is_a("IfcBooleanClippingResult"):
+ elif item.is_a("IfcBooleanClippingResult"): # should be before IfcBooleanResult check
item = item.FirstOperand
+ elif item.is_a("IfcBooleanResult"):
+ if item.FirstOperand.is_a("IfcExtrudedAreaSolid") or item.FirstOperand.is_a("IfcBooleanResult"):
+ item = item.FirstOperand
+ else:
+ item = item.SecondOperand
else:
break
return results
diff --git a/src/blenderbim/blenderbim/bim/module/model/window.py b/src/blenderbim/blenderbim/bim/module/model/window.py
index 2aa33b5309..db204a7ac8 100644
--- a/src/blenderbim/blenderbim/bim/module/model/window.py
+++ b/src/blenderbim/blenderbim/bim/module/model/window.py
@@ -119,13 +119,7 @@ def update_window_modifier_representation(context, obj):
}
representation_data["panel_properties"].append(panel_data)
- def get_active_representation_context(obj):
- active_representation = tool.Geometry.get_active_representation(obj)
- if active_representation:
- return active_representation.ContextOfItems
- return ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
-
- previously_active_context = get_active_representation_context(obj)
+ previously_active_context = tool.Geometry.get_active_representation_context(obj)
# ELEVATION_VIEW representation
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
@@ -154,7 +148,7 @@ def update_window_modifier_representation(context, obj):
# adding switch representation at the end instead of changing order of representations
# to prevent #2744
- if get_active_representation_context(obj) != previously_active_context:
+ if tool.Geometry.get_active_representation_context(obj) != previously_active_context:
previously_active_representation = ifcopenshell.util.representation.get_representation(
element,
previously_active_context.ContextType,
@@ -502,7 +496,7 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset",
tool.Ifc.get(),
pset=pset,
- properties={"Data": json.dumps(window_data, default=list)},
+ properties={"Data": tool.Ifc.get().createIfcText(json.dumps(window_data, default=list))},
)
update_window_modifier_representation(context, obj)
return {"FINISHED"}
@@ -559,7 +553,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator):
update_window_modifier_representation(context, obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Window")
- window_data = json.dumps(window_data, default=list)
+ window_data = tool.Ifc.get().createIfcText(json.dumps(window_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": window_data})
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py
index 6af2600dee..03c76396a6 100644
--- a/src/blenderbim/blenderbim/bim/module/model/workspace.py
+++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py
@@ -26,6 +26,7 @@ from blenderbim.bim.helper import prop_with_search, close_operator_panel
from bpy.types import WorkSpaceTool
from blenderbim.bim.module.model.data import AuthoringData
from blenderbim.bim.module.drawing.data import DecoratorData
+from blenderbim.bim.module.system.data import PortData
from blenderbim.bim.module.model.prop import get_ifc_class
@@ -218,6 +219,9 @@ class BimToolUI:
row.label(text="No IFC Project", icon="ERROR")
return
+ if not PortData.is_loaded:
+ PortData.load()
+
if not AuthoringData.is_loaded:
AuthoringData.load(ifc_element_type)
elif ifc_element_type == "all" and AuthoringData.data["ifc_element_type"] is not None:
@@ -348,16 +352,15 @@ class BimToolUI:
"IfcPipeSegment",
):
add_layout_hotkey_operator(cls.layout, "Add Fitting", "S_F", "")
- add_layout_hotkey_operator(
- cls.layout, "Regen MEP", "S_G", bpy.ops.bim.regenerate_distribution_element.__doc__
- )
+
if context.region.type != "TOOL_HEADER":
cls.layout.operator("bim.mep_add_bend")
cls.layout.operator("bim.mep_add_transition")
cls.layout.operator("bim.mep_add_obstruction")
- cls.layout.operator("bim.mep_connect_elements")
+
else:
add_layout_hotkey_operator(cls.layout, "Edit Axis", "A_E", "")
+ add_layout_hotkey_operator(cls.layout, "Flip", "S_F", bpy.ops.bim.flip_object.__doc__)
add_layout_hotkey_operator(cls.layout, "Butt", "S_T", "")
add_layout_hotkey_operator(cls.layout, "Mitre", "S_Y", "")
add_layout_hotkey_operator(cls.layout, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__)
@@ -401,6 +404,12 @@ class BimToolUI:
row.label(text="", icon=f"EVENT_TAB")
row.operator("bim.enable_editing_roof_path", text="Edit Roof Path")
+ if context.region.type != "TOOL_HEADER" and PortData.data["total_ports"] > 0:
+ add_layout_hotkey_operator(
+ cls.layout, "Regen MEP", "S_G", bpy.ops.bim.regenerate_distribution_element.__doc__
+ )
+ cls.layout.operator("bim.mep_connect_elements")
+
row = cls.layout.row(align=True)
row.label(text="", icon="EVENT_SHIFT")
row.label(text="", icon="EVENT_O")
@@ -418,11 +427,14 @@ class BimToolUI:
row.operator("bim.show_openings", icon="HIDE_OFF", text="")
if AuthoringData.data["active_class"] in ("IfcOpeningElement",):
+ row.operator("bim.edit_openings", icon="CHECKMARK", text="")
+ row.operator("bim.hide_openings", icon="CANCEL", text="")
if len(context.selected_objects) == 2:
row = cls.layout.row(align=True)
row.label(text="", icon="EVENT_SHIFT")
row.label(text="", icon="EVENT_L")
row.operator("bim.clone_opening", text="Clone Opening")
+
cls.layout.row(align=True).label(text="Align")
add_layout_hotkey_operator(cls.layout, "Align Exterior", "S_X", "")
@@ -615,6 +627,7 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
usage = tool.Model.get_usage_type(element)
if not usage:
representation = tool.Geometry.get_active_representation(obj)
+ representation = tool.Geometry.resolve_mapped_representation(representation)
if representation and representation.RepresentationType == "SweptSolid":
usage = "SWEPTSOLID"
else:
@@ -668,25 +681,29 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
bpy.ops.bim.flip_wall()
elif self.active_class in ("IfcWindow", "IfcWindowStandardCase", "IfcDoor", "IfcDoorStandardCase"):
bpy.ops.bim.flip_fill()
+ elif self.active_class in ("IfcBeam", "IfcColumn"):
+ bpy.ops.bim.flip_object(flip_local_axes="XZ")
elif self.active_class in ("IfcDuctSegment", "IfcPipeSegment", "IfcCableCarrierSegment", "IfcCableSegment"):
bpy.ops.bim.fit_flow_segments()
def hotkey_S_G(self):
+ obj = bpy.context.active_object
+ element = tool.Ifc.get_entity(obj)
if not bpy.context.selected_objects:
if self.props.ifc_class == "IfcSpaceType":
bpy.ops.bim.generate_space()
return
if self.active_material_usage == "LAYER2":
bpy.ops.bim.recalculate_wall()
+ elif tool.System.get_ports(element):
+ bpy.ops.bim.regenerate_distribution_element()
elif self.active_material_usage == "PROFILE":
- if self.active_class in (
+ if self.active_class not in (
"IfcCableCarrierSegment",
"IfcCableSegment",
"IfcDuctSegment",
"IfcPipeSegment",
):
- bpy.ops.bim.regenerate_distribution_element()
- else:
bpy.ops.bim.recalculate_profile()
elif self.active_class in ("IfcWindow", "IfcWindowStandardCase", "IfcDoor", "IfcDoorStandardCase"):
bpy.ops.bim.recalculate_fill()
diff --git a/src/blenderbim/blenderbim/bim/module/owner/ui.py b/src/blenderbim/blenderbim/bim/module/owner/ui.py
index 622808c6f0..cd951316a8 100644
--- a/src/blenderbim/blenderbim/bim/module/owner/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/owner/ui.py
@@ -83,7 +83,7 @@ class BIM_PT_people(bpy.types.Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_stakeholders"
@classmethod
def poll(cls, context):
@@ -142,7 +142,7 @@ class BIM_PT_organisations(bpy.types.Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_stakeholders"
@classmethod
def poll(cls, context):
@@ -189,7 +189,7 @@ class BIM_PT_owner(bpy.types.Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_stakeholders"
@classmethod
def poll(cls, context):
@@ -240,7 +240,7 @@ class BIM_PT_actor(bpy.types.Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_stakeholders"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/profile/operator.py b/src/blenderbim/blenderbim/bim/module/profile/operator.py
index e507a058bb..839e6a49ae 100644
--- a/src/blenderbim/blenderbim/bim/module/profile/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/profile/operator.py
@@ -143,7 +143,7 @@ class EnableEditingArbitraryProfile(bpy.types.Operator, tool.Ifc.Operator):
tool.Blender.select_and_activate_single_object(context, obj)
bpy.ops.object.mode_set(mode="EDIT")
ProfileDecorator.install(context, exit_edit_mode_callback=lambda: disable_editing_arbitrary_profile(context))
- bpy.ops.wm.tool_set_by_id(tool.Blender.get_viewport_context(), name="bim.cad_tool")
+ tool.Blender.set_viewport_tool("bim.cad_tool")
def disable_editing_arbitrary_profile(context):
diff --git a/src/blenderbim/blenderbim/bim/module/profile/ui.py b/src/blenderbim/blenderbim/bim/module/profile/ui.py
index dc6ba88717..85e407b2e3 100644
--- a/src/blenderbim/blenderbim/bim/module/profile/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/profile/ui.py
@@ -27,11 +27,11 @@ from blenderbim.bim.module.profile.prop import generate_thumbnail_for_active_pro
class BIM_PT_profiles(Panel):
bl_label = "Profiles"
bl_idname = "BIM_PT_profiles"
- bl_options = {"DEFAULT_CLOSED"}
+ bl_options = {"HIDE_HEADER"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_profiles"
@classmethod
def poll(cls, context):
@@ -58,11 +58,11 @@ class BIM_PT_profiles(Panel):
box.template_icon(icon_value=preview_image.icon_id, scale=5)
row = self.layout.row(align=True)
- row.label(text=f"{ProfileData.data['total_profiles']} Named Profiles Found", icon="SNAP_GRID")
+ row.label(text=f"{ProfileData.data['total_profiles']} Named Profiles", icon="ITALIC")
if self.props.is_editing:
row.operator("bim.disable_profile_editing_ui", text="", icon="CANCEL")
else:
- row.operator("bim.load_profiles", text="", icon="GREASEPENCIL")
+ row.operator("bim.load_profiles", text="", icon="IMPORT")
if not self.props.is_editing:
return
diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py
index 0cd756882e..872d5b918a 100644
--- a/src/blenderbim/blenderbim/bim/module/project/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/project/operator.py
@@ -472,6 +472,7 @@ class AppendLibraryElement(bpy.types.Operator):
ifc_importer = import_ifc.IfcImporter(ifc_import_settings)
ifc_importer.file = self.file
ifc_importer.type_collection = type_collection
+ ifc_importer.process_context_filter()
ifc_importer.material_creator.load_existing_materials()
self.import_materials(element, ifc_importer)
self.import_styles(element, ifc_importer)
@@ -808,9 +809,9 @@ class ToggleFilterCategories(bpy.types.Operator):
class LinkIfc(bpy.types.Operator):
bl_idname = "bim.link_ifc"
- bl_label = "Link IFC"
+ bl_label = "Link Blend/IFC File"
bl_options = {"REGISTER", "UNDO"}
- bl_description = "Link a Blender file"
+ bl_description = "This will link the Blender file that is synced with the IFC file"
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
files: bpy.props.CollectionProperty(name="Files", type=bpy.types.OperatorFileListElement)
directory: bpy.props.StringProperty(subtype="DIR_PATH")
@@ -1114,8 +1115,8 @@ class ExportIFC(bpy.types.Operator):
@classmethod
def description(cls, context, properties):
if properties.should_save_as:
- return "Export the IFC project to a selected file"
- return "Export the IFC project to this file"
+ return "Save the IFC file under a new name, or relocate file"
+ return "Save the IFC file. Will save both .IFC/.BLEND files if synced together"
class ImportIFC(bpy.types.Operator):
diff --git a/src/blenderbim/blenderbim/bim/module/project/ui.py b/src/blenderbim/blenderbim/bim/module/project/ui.py
index d2bc4feb8b..1c59236929 100644
--- a/src/blenderbim/blenderbim/bim/module/project/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/project/ui.py
@@ -84,7 +84,7 @@ class BIM_PT_project(Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_options = {"HIDE_HEADER"}
- bl_parent_id = "BIM_PT_project_info"
+ bl_parent_id = "BIM_PT_tab_project_info"
def draw(self, context):
if not ProjectData.is_loaded:
@@ -244,7 +244,7 @@ class BIM_PT_project_library(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
def draw(self, context):
self.layout.use_property_decorate = False
@@ -287,7 +287,7 @@ class BIM_PT_links(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
def draw(self, context):
self.props = context.scene.BIMProjectProperties
diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py
index 340a6b9f8c..132844c7fd 100644
--- a/src/blenderbim/blenderbim/bim/module/pset/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py
@@ -206,6 +206,7 @@ class EnablePsetEditing(bpy.types.Operator):
for prop in props:
if prop.is_a("IfcPropertyEnumeratedValue"):
simple_prop = self.props.properties.add()
+ simple_prop.name = prop.Name
simple_prop.value_type = "IfcPropertyEnumeratedValue"
metadata = simple_prop.metadata
metadata.name = prop.Name
@@ -227,6 +228,7 @@ class EnablePsetEditing(bpy.types.Operator):
elif prop.is_a("IfcPhysicalSimpleQuantity"):
value = prop[3]
new_prop = self.props.properties.add()
+ new_prop.name = prop.Name
metadata = new_prop.metadata
metadata.set_value(value)
metadata.name = prop.Name
diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/ui.py b/src/blenderbim/blenderbim/bim/module/pset_template/ui.py
index 2f90bd94dd..1975438471 100644
--- a/src/blenderbim/blenderbim/bim/module/pset_template/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/pset_template/ui.py
@@ -29,7 +29,7 @@ class BIM_PT_pset_template(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
def draw(self, context):
if not PsetTemplatesData.is_loaded:
diff --git a/src/blenderbim/blenderbim/bim/module/qto/helper.py b/src/blenderbim/blenderbim/bim/module/qto/helper.py
index 721a2334da..2c5aaec1c6 100644
--- a/src/blenderbim/blenderbim/bim/module/qto/helper.py
+++ b/src/blenderbim/blenderbim/bim/module/qto/helper.py
@@ -79,7 +79,8 @@ def calculate_formwork_area(objs, context):
modifier = copied_obj.modifiers.new(type="BOOLEAN", name="Boolean")
modifier.operation = "UNION"
modifier.object = obj
- bpy.ops.object.modifier_apply({"object": copied_obj}, modifier="Boolean")
+ with context.temp_override(object=copied_obj):
+ bpy.ops.object.modifier_apply(modifier="Boolean")
copied_obj.name = "Formwork"
copied_obj.BIMObjectProperties.ifc_definition_id = 0
diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py
index b112794595..ecf1d95753 100644
--- a/src/blenderbim/blenderbim/bim/module/root/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/root/operator.py
@@ -66,6 +66,7 @@ class EnableReassignClass(bpy.types.Operator):
context.scene.BIMRootProperties.ifc_product = ifc_product
element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
context.scene.BIMRootProperties.ifc_class = element.is_a()
+ context.scene.BIMRootProperties.relating_class_object = None
if hasattr(element, "PredefinedType") and element.PredefinedType:
context.scene.BIMRootProperties.ifc_predefined_type = element.PredefinedType
return {"FINISHED"}
@@ -91,7 +92,10 @@ class ReassignClass(bpy.types.Operator):
return IfcStore.execute_ifc_operator(self, context)
def _execute(self, context):
- objects = [bpy.data.objects.get(self.obj)] if self.obj else context.selected_objects
+ if self.obj:
+ objects = [bpy.data.objects.get(self.obj)]
+ else:
+ objects = set(context.selected_objects + [context.active_object])
self.file = IfcStore.get_file()
predefined_type = context.scene.BIMRootProperties.ifc_predefined_type
if predefined_type == "USERDEFINED":
@@ -100,14 +104,12 @@ class ReassignClass(bpy.types.Operator):
product = ifcopenshell.api.run(
"root.reassign_class",
self.file,
- **{
- "product": self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
- "ifc_class": context.scene.BIMRootProperties.ifc_class,
- "predefined_type": predefined_type,
- },
+ product=self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
+ ifc_class=context.scene.BIMRootProperties.ifc_class,
+ predefined_type=predefined_type,
)
obj.name = "{}/{}".format(product.is_a(), getattr(product, "Name", "None"))
- IfcStore.link_element(product, obj)
+ tool.Ifc.link(product, obj)
obj.BIMObjectProperties.is_reassigning_class = False
return {"FINISHED"}
@@ -174,15 +176,21 @@ class UnlinkObject(bpy.types.Operator):
if element:
if self.should_delete:
obj_copy = obj.copy()
+
+ # copy object data, so it won't be removed by `delete_ifc_object`
+ if obj.data:
+ obj_copy.data = obj.data.copy()
+ if obj.type == "MESH":
+ obj_copy.data.BIMMeshProperties.ifc_definition_id = 0
+
for collection in obj.users_collection:
collection.objects.link(obj_copy)
tool.Geometry.delete_ifc_object(obj)
obj = obj_copy
if obj in IfcStore.edited_objs:
IfcStore.edited_objs.remove(obj)
- IfcStore.unlink_element(obj=obj)
- if obj.data:
- obj.data = obj.data.copy()
+ tool.Ifc.unlink(obj=obj)
+
for material_slot in obj.material_slots:
if material_slot.material:
material_slot.material = material_slot.material.copy()
diff --git a/src/blenderbim/blenderbim/bim/module/root/prop.py b/src/blenderbim/blenderbim/bim/module/root/prop.py
index cd0b47949f..33887fe2c5 100644
--- a/src/blenderbim/blenderbim/bim/module/root/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/root/prop.py
@@ -19,6 +19,7 @@
import bpy
import ifcopenshell
import ifcopenshell.util.schema
+import blenderbim.tool as tool
from blenderbim.bim.module.root.data import IfcClassData
from bpy.types import PropertyGroup
from bpy.props import (
@@ -80,12 +81,46 @@ def get_contexts(self, context):
return IfcClassData.data["contexts"]
+def update_relating_class_from_object(self, context):
+ if self.relating_class_object is None:
+ return
+ element = tool.Ifc.get_entity(self.relating_class_object)
+ if not element:
+ return
+ self.ifc_class = element.is_a()
+ predefined_type = ifcopenshell.util.element.get_predefined_type(element)
+ if predefined_type:
+ if element.PredefinedType == "USERDEFINED":
+ self.ifc_predefined_type = "USERDEFINED"
+ self.ifc_userdefined_type = predefined_type
+ else:
+ self.ifc_predefined_type = predefined_type
+ bpy.ops.bim.reassign_class()
+
+
+def is_object_class_applicable(self, obj):
+ element = tool.Ifc.get_entity(obj)
+ if not element:
+ return False
+ active_element = tool.Ifc.get_entity(bpy.context.active_object)
+ if not active_element:
+ return False
+ return element.is_a("IfcTypeObject") == active_element.is_a("IfcTypeObject")
+
+
class BIMRootProperties(PropertyGroup):
contexts: EnumProperty(items=get_contexts, name="Contexts")
ifc_product: EnumProperty(items=get_ifc_products, name="Products", update=refresh_classes)
ifc_class: EnumProperty(items=get_ifc_classes, name="Class", update=refresh_predefined_types)
ifc_predefined_type: EnumProperty(items=get_ifc_predefined_types, name="Predefined Type", default=None)
ifc_userdefined_type: StringProperty(name="Userdefined Type")
+ relating_class_object: PointerProperty(
+ type=bpy.types.Object,
+ name="Copy Class",
+ update=update_relating_class_from_object,
+ poll=is_object_class_applicable,
+ description="Copy the selected object's class and predefined type to the active object",
+ )
getter_enum_suggestions = {
"ifc_class": get_ifc_classes_suggestions,
diff --git a/src/blenderbim/blenderbim/bim/module/root/ui.py b/src/blenderbim/blenderbim/bim/module/root/ui.py
index 76f5546594..f5bfb6a26b 100644
--- a/src/blenderbim/blenderbim/bim/module/root/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/root/ui.py
@@ -58,6 +58,7 @@ class BIM_PT_class(Panel):
root_prop.get_ifc_predefined_types(context.scene.BIMRootProperties, context),
is_reassigning_class=True,
)
+ self.layout.prop(context.scene.BIMRootProperties, "relating_class_object", icon="COPYDOWN")
else:
row = self.layout.row(align=True)
row.label(text=IfcClassData.data["name"])
diff --git a/src/blenderbim/blenderbim/bim/module/search/__init__.py b/src/blenderbim/blenderbim/bim/module/search/__init__.py
index da8076d64d..ce0c3f6d9e 100644
--- a/src/blenderbim/blenderbim/bim/module/search/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/search/__init__.py
@@ -40,6 +40,7 @@ classes = (
operator.SaveSearch,
operator.SaveSelectorQuery,
operator.Search,
+ operator.SelectByProperty,
operator.SelectFilterElements,
operator.SelectGlobalId,
operator.SelectIfcClass,
diff --git a/src/blenderbim/blenderbim/bim/module/search/operator.py b/src/blenderbim/blenderbim/bim/module/search/operator.py
index ee018ccef8..71b0669e15 100644
--- a/src/blenderbim/blenderbim/bim/module/search/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/search/operator.py
@@ -333,6 +333,36 @@ class ColourByProperty(Operator):
data["area"].spaces[0].shading.color_type = "OBJECT"
+class SelectByProperty(Operator):
+ bl_idname = "bim.select_by_property"
+ bl_label = "Select by Property"
+ bl_options = {"REGISTER", "UNDO"}
+
+ @classmethod
+ def poll(cls, context):
+ props = context.scene.BIMSearchProperties
+ return props.active_colourscheme_index < len(props.colourscheme)
+
+ def execute(self, context):
+ props = context.scene.BIMSearchProperties
+ query = props.colourscheme_query
+
+ if not query:
+ self.report({"ERROR"}, "No Query Provided")
+ return {"CANCELLED"}
+
+ active_value = props.colourscheme[props.active_colourscheme_index].name
+
+ for obj in context.visible_objects:
+ element = tool.Ifc.get_entity(obj)
+ if not element:
+ continue
+ value = str(ifcopenshell.util.selector.get_element_value(element, query))
+ if value == active_value:
+ obj.select_set(True)
+ return {"FINISHED"}
+
+
class SaveColourscheme(Operator, tool.Ifc.Operator):
bl_idname = "bim.save_colourscheme"
bl_label = "Save Colourscheme"
@@ -356,7 +386,9 @@ class SaveColourscheme(Operator, tool.Ifc.Operator):
description["colourscheme_query"] = query
group.Description = json.dumps(description)
else:
- description = json.dumps({"type": "BBIM_Search", "colourscheme": coulour_scheme,"colourscheme_query": query})
+ description = json.dumps(
+ {"type": "BBIM_Search", "colourscheme": coulour_scheme, "colourscheme_query": query}
+ )
group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.name, Description=description)
def invoke(self, context, event):
@@ -822,10 +854,13 @@ class SelectSimilar(Operator, tool.Ifc.Operator):
props = context.scene.BIMSearchProperties
obj = context.active_object
element = tool.Ifc.get_entity(obj)
- value = ifcopenshell.util.selector.get_element_value(element, props.element_key)
+ key = props.element_key
+ if props.element_key == "PredefinedType":
+ key = "predefined_type"
+ value = ifcopenshell.util.selector.get_element_value(element, key)
for obj in context.visible_objects:
element = tool.Ifc.get_entity(obj)
if not element:
continue
- if ifcopenshell.util.selector.get_element_value(element, props.element_key) == value:
+ if ifcopenshell.util.selector.get_element_value(element, key) == value:
obj.select_set(True)
diff --git a/src/blenderbim/blenderbim/bim/module/search/prop.py b/src/blenderbim/blenderbim/bim/module/search/prop.py
index 53b5db1554..bed3793580 100644
--- a/src/blenderbim/blenderbim/bim/module/search/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/search/prop.py
@@ -17,9 +17,9 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
+import blenderbim.tool as tool
from ifcopenshell import util
from ifcopenshell.util.selector import Selector
-import blenderbim.tool as tool
from blenderbim.bim.prop import ObjProperty, StrProperty
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.search.data import SearchData, ColourByPropertyData, SelectSimilarData
diff --git a/src/blenderbim/blenderbim/bim/module/search/ui.py b/src/blenderbim/blenderbim/bim/module/search/ui.py
index a2a24c7b68..3bef9394de 100644
--- a/src/blenderbim/blenderbim/bim/module/search/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/search/ui.py
@@ -87,9 +87,12 @@ class BIM_PT_colour_by_property(Panel):
row = self.layout.row(align=True)
row.operator("bim.colour_by_property", icon="BRUSH_DATA")
row.operator("bim.reset_object_colours")
+ row.operator("bim.select_by_property", icon="RESTRICT_SELECT_OFF", text="")
if len(props.colourscheme):
- self.layout.template_list("BIM_UL_colourscheme", "", props, "colourscheme", props, "active_colourscheme_index")
+ self.layout.template_list(
+ "BIM_UL_colourscheme", "", props, "colourscheme", props, "active_colourscheme_index"
+ )
class BIM_PT_select_similar(Panel):
diff --git a/src/blenderbim/blenderbim/bim/module/spatial/prop.py b/src/blenderbim/blenderbim/bim/module/spatial/prop.py
index b17b643af7..23614a1c96 100644
--- a/src/blenderbim/blenderbim/bim/module/spatial/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/spatial/prop.py
@@ -57,6 +57,25 @@ def updateContainerName(self, context):
props.container_name = self.name
+def update_relating_container_from_object(self, context):
+ if self.relating_container_object is None or context.active_object is None:
+ return
+ element = tool.Ifc.get_entity(self.relating_container_object)
+ if not element:
+ return
+ container = ifcopenshell.util.element.get_container(element)
+ if container:
+ bpy.ops.bim.assign_container(structure=container.id())
+ else:
+ bpy.ops.bim.disable_editing_container()
+ bpy.ops.bim.remove_container()
+
+
+def is_object_applicable(self, obj):
+ element = tool.Ifc.get_entity(obj)
+ return bool(element)
+
+
class SpatialElement(PropertyGroup):
name: StringProperty(name="Name")
long_name: StringProperty(name="Long Name")
@@ -73,6 +92,13 @@ class BIMSpatialProperties(PropertyGroup):
class BIMObjectSpatialProperties(PropertyGroup):
is_editing: BoolProperty(name="Is Editing")
+ relating_container_object: PointerProperty(
+ type=bpy.types.Object,
+ name="Copy Container",
+ update=update_relating_container_from_object,
+ poll=is_object_applicable,
+ description="Copy the target object's container to the active object",
+ )
class BIMContainer(PropertyGroup):
diff --git a/src/blenderbim/blenderbim/bim/module/spatial/ui.py b/src/blenderbim/blenderbim/bim/module/spatial/ui.py
index 28e65d2982..60112ac7d9 100644
--- a/src/blenderbim/blenderbim/bim/module/spatial/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/spatial/ui.py
@@ -62,6 +62,7 @@ class BIM_PT_spatial(Panel):
row.operator("bim.disable_editing_container", icon="CANCEL", text="")
self.layout.template_list("BIM_UL_containers", "", props, "containers", props, "active_container_index")
+ self.layout.prop(osprops, "relating_container_object")
else:
row = self.layout.row(align=True)
if SpatialData.data["label"]:
@@ -103,7 +104,7 @@ class BIM_PT_SpatialManager(Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_options = {"DEFAULT_CLOSED"}
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_project_setup"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/style/__init__.py b/src/blenderbim/blenderbim/bim/module/style/__init__.py
index 8d37b57ee1..f2fa818234 100644
--- a/src/blenderbim/blenderbim/bim/module/style/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/style/__init__.py
@@ -20,24 +20,29 @@ import bpy
from . import ui, prop, operator
classes = (
- operator.AddStyle,
- operator.EnableEditingStyle,
- operator.DisableEditingStyle,
- operator.EditStyle,
- operator.UpdateCurrentStyle,
- operator.EnableEditingExternalStyle,
- operator.DisableEditingExternalStyle,
- operator.EditExternalStyle,
- operator.DisableEditingStyles,
- operator.BrowseExternalStyle,
operator.ActivateExternalStyle,
+ operator.AddPresentationStyle,
+ operator.AddStyle,
+ operator.BrowseExternalStyle,
+ operator.ClearTextureMapPath,
+ operator.DisableAddingPresentationStyle,
+ operator.DisableEditingExternalStyle,
+ operator.DisableEditingStyle,
+ operator.DisableEditingStyles,
+ operator.EditExternalStyle,
+ operator.EditStyle,
+ operator.EditSurfaceStyle,
+ operator.EnableAddingPresentationStyle,
+ operator.EnableEditingExternalStyle,
+ operator.EnableEditingStyle,
+ operator.EnableEditingSurfaceStyle,
operator.LoadStyles,
operator.RemoveStyle,
operator.SelectByStyle,
operator.UnlinkStyle,
+ operator.UpdateCurrentStyle,
operator.UpdateStyleColours,
operator.UpdateStyleTextures,
- operator.ClearTextureMapPath,
prop.Style,
prop.BIMStylesProperties,
prop.BIMStyleProperties,
diff --git a/src/blenderbim/blenderbim/bim/module/style/data.py b/src/blenderbim/blenderbim/bim/module/style/data.py
index f4fcbb56b5..d11b766246 100644
--- a/src/blenderbim/blenderbim/bim/module/style/data.py
+++ b/src/blenderbim/blenderbim/bim/module/style/data.py
@@ -18,8 +18,8 @@
import bpy
import ifcopenshell
-from ifcopenshell.util.doc import get_entity_doc
import blenderbim.tool as tool
+from ifcopenshell.util.doc import get_entity_doc
def refresh():
@@ -33,9 +33,18 @@ class StylesData:
@classmethod
def load(cls):
- cls.data = {"style_types": cls.style_types(), "total_styles": cls.total_styles()}
+ cls.data = {
+ "style_types": cls.style_types(),
+ "total_styles": cls.total_styles(),
+ "reflectance_methods": cls.reflectance_methods(),
+ }
cls.is_loaded = True
+ @classmethod
+ def reflectance_methods(cls):
+ declaration = tool.Ifc.schema().declaration_by_name("IfcReflectanceMethodEnum")
+ return [(i, i, "") for i in declaration.enumeration_items()]
+
@classmethod
def style_types(cls):
declaration = tool.Ifc.schema().declaration_by_name("IfcPresentationStyle")
diff --git a/src/blenderbim/blenderbim/bim/module/style/operator.py b/src/blenderbim/blenderbim/bim/module/style/operator.py
index 3fbfde90c1..32a592b24c 100644
--- a/src/blenderbim/blenderbim/bim/module/style/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/style/operator.py
@@ -16,15 +16,16 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
+import os
import bpy
+import blenderbim.bim.helper
import blenderbim.bim.handler
import blenderbim.tool as tool
import blenderbim.core.style as core
import ifcopenshell.util.representation
+from pathlib import Path
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.style.data import StylesData, StyleAttributesData
-from pathlib import Path
-import os
class UpdateStyleColours(bpy.types.Operator, tool.Ifc.Operator):
@@ -99,9 +100,16 @@ class EnableEditingStyle(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.enable_editing_style"
bl_label = "Enable Editing Style"
bl_options = {"REGISTER", "UNDO"}
+ style: bpy.props.IntProperty(default=0)
def _execute(self, context):
- core.enable_editing_style(tool.Style, obj=context.active_object.active_material)
+ props = bpy.context.scene.BIMStylesProperties
+ style = tool.Ifc.get().by_id(self.style)
+ props.is_editing_style = style.id()
+ props.is_editing_class = "IfcSurfaceStyle"
+ attributes = props.attributes
+ attributes.clear()
+ blenderbim.bim.helper.import_attributes2(style, attributes)
class DisableEditingStyle(bpy.types.Operator, tool.Ifc.Operator):
@@ -110,7 +118,8 @@ class DisableEditingStyle(bpy.types.Operator, tool.Ifc.Operator):
bl_label = "Disable Editing Style"
def _execute(self, context):
- core.disable_editing_style(tool.Style, obj=context.active_object.active_material)
+ props = bpy.context.scene.BIMStylesProperties
+ props.is_editing_style = 0
class EditStyle(bpy.types.Operator, tool.Ifc.Operator):
@@ -119,7 +128,12 @@ class EditStyle(bpy.types.Operator, tool.Ifc.Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
- core.edit_style(tool.Ifc, tool.Style, obj=context.active_object.active_material)
+ props = bpy.context.scene.BIMStylesProperties
+ style = tool.Ifc.get().by_id(props.is_editing_style)
+ attributes = blenderbim.bim.helper.export_attributes(props.attributes)
+ ifcopenshell.api.run("style.edit_presentation_style", tool.Ifc.get(), style=style, attributes=attributes)
+ props.is_editing_style = 0
+ core.load_styles(tool.Style, style_type=props.style_type)
class UpdateCurrentStyle(bpy.types.Operator):
@@ -415,3 +429,240 @@ class ClearTextureMapPath(bpy.types.Operator):
props = context.material.BIMStyleProperties
setattr(props, self.texture_map_prop, "")
return {"FINISHED"}
+
+
+class EnableAddingPresentationStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.enable_adding_presentation_style"
+ bl_label = "Enable Add Presentation Style"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMStylesProperties
+ props.is_adding = True
+
+
+class DisableAddingPresentationStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.disable_adding_presentation_style"
+ bl_label = "Disable Add Presentation Style"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMStylesProperties
+ props.is_adding = False
+
+
+class AddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.add_presentation_style"
+ bl_label = "Add Presentation Style"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMStylesProperties
+ if props.style_type == "IfcSurfaceStyle":
+ style = ifcopenshell.api.run("style.add_style", tool.Ifc.get(), name=props.style_name)
+ if props.surface_style_class in ("IfcSurfaceStyleShading", "IfcSurfaceStyleRendering"):
+ surface_style = ifcopenshell.api.run(
+ "style.add_surface_style",
+ tool.Ifc.get(),
+ style=style,
+ ifc_class=props.surface_style_class,
+ attributes={
+ "SurfaceColour": {
+ "Name": None,
+ "Red": props.surface_colour[0],
+ "Green": props.surface_colour[1],
+ "Blue": props.surface_colour[2],
+ }
+ },
+ )
+ if props.surface_style_class == "IfcSurfaceStyleRendering":
+ surface_style.ReflectanceMethod = "NOTDEFINED"
+ material = bpy.data.materials.new(style.Name)
+ tool.Ifc.link(style, material)
+ material.use_fake_user = True
+ if surface_style.is_a("IfcSurfaceStyleShading"):
+ tool.Loader.create_surface_style_shading(material, surface_style)
+ elif surface_style.is_a("IfcSurfaceStyleRendering"):
+ tool.Loader.create_surface_style_rendering(material, surface_style)
+ props.is_adding = False
+ core.load_styles(tool.Style, style_type=props.style_type)
+
+
+class EnableEditingSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.enable_editing_surface_style"
+ bl_label = "Enable Editing Surface Style"
+ bl_options = {"REGISTER", "UNDO"}
+ style: bpy.props.IntProperty(default=0)
+ ifc_class: bpy.props.StringProperty(default="")
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMStylesProperties
+ style = tool.Ifc.get().by_id(self.style)
+
+ shading = None
+
+ surface_style = None
+ for style2 in style.Styles:
+ if style2.is_a() == self.ifc_class:
+ surface_style = style2
+ if style2.is_a() == "IfcSurfaceStyleShading":
+ shading = style2
+
+ color_to_tuple = lambda x: (x.Red, x.Green, x.Blue)
+
+ if surface_style:
+ if self.ifc_class == "IfcSurfaceStyleShading":
+ props.surface_colour = color_to_tuple(surface_style.SurfaceColour)
+ props.transparency = surface_style.Transparency or 0.0
+ elif self.ifc_class == "IfcSurfaceStyleRendering":
+ props.surface_colour = color_to_tuple(surface_style.SurfaceColour)
+ props.transparency = surface_style.Transparency or 0.0
+
+ if surface_style.DiffuseColour:
+ props.is_diffuse_colour_null = False
+ if surface_style.DiffuseColour.is_a("IfcColourRgb"):
+ props.diffuse_colour_class = "IfcColourRgb"
+ props.diffuse_colour = color_to_tuple(surface_style.DiffuseColour)
+ else:
+ props.diffuse_colour_class = "IfcNormalisedRatioMeasure"
+ props.diffuse_colour_ratio = surface_style.DiffuseColour.wrappedValue
+ else:
+ props.is_diffuse_colour_null = False
+
+ if surface_style.SpecularColour:
+ props.is_specular_colour_null = False
+ if surface_style.SpecularColour.is_a("IfcColourRgb"):
+ props.specular_colour_class = "IfcColourRgb"
+ props.specular_colour = color_to_tuple(surface_style.SpecularColour)
+ else:
+ props.specular_colour_class = "IfcNormalisedRatioMeasure"
+ props.specular_colour_ratio = surface_style.SpecularColour.wrappedValue
+ else:
+ props.is_specular_colour_null = False
+
+ if surface_style.SpecularHighlight:
+ props.is_specular_highlight_null = False
+ if surface_style.SpecularHighlight.is_a("IfcSpecularRoughness"):
+ props.specular_highlight = surface_style.SpecularHighlight.wrappedValue
+ else:
+ props.is_specular_highlight_null = False # Exponent is meaningless
+ else:
+ props.is_specular_highlight_null = True
+
+ props.reflectance_method = surface_style.ReflectanceMethod
+ elif shading:
+ props.surface_colour = color_to_tuple(shading.SurfaceColour)
+ props.transparency = shading.Transparency or 0.0
+
+ props.is_editing_style = self.style
+ props.is_editing_class = self.ifc_class
+
+
+class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator):
+ bl_idname = "bim.edit_surface_style"
+ bl_label = "Edit Surface Style"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ self.props = bpy.context.scene.BIMStylesProperties
+ self.style = tool.Ifc.get().by_id(self.props.is_editing_style)
+
+ self.surface_style = None
+ self.shading_style = None
+ self.rendering_style = None
+ for style2 in self.style.Styles:
+ if style2.is_a() == self.props.is_editing_class:
+ self.surface_style = style2
+ if style2.is_a() == "IfcSurfaceStyleShading":
+ self.shading_style = style2
+ if style2.is_a() == "IfcSurfaceStyleRendering":
+ self.rendering_style = style2
+
+ if self.surface_style:
+ self.edit_existing_style()
+ else:
+ self.add_new_style()
+
+ self.props.is_editing_style = 0
+ core.load_styles(tool.Style, style_type=self.props.style_type)
+
+ def edit_existing_style(self):
+ material = tool.Ifc.get_object(self.style)
+ if self.surface_style.is_a() == "IfcSurfaceStyleShading":
+ ifcopenshell.api.run(
+ "style.edit_surface_style",
+ tool.Ifc.get(),
+ style=self.surface_style,
+ attributes={
+ "SurfaceColour": self.color_to_dict(self.props.surface_colour),
+ "Transparency": self.props.transparency or None,
+ },
+ )
+ tool.Loader.create_surface_style_shading(material, self.surface_style)
+ elif self.surface_style.is_a() == "IfcSurfaceStyleRendering":
+ ifcopenshell.api.run(
+ "style.edit_surface_style",
+ tool.Ifc.get(),
+ style=self.surface_style,
+ attributes=self.get_rendering_attributes(),
+ )
+ tool.Loader.create_surface_style_rendering(material, self.surface_style)
+
+ def add_new_style(self):
+ material = tool.Ifc.get_object(self.style)
+ if self.props.is_editing_class == "IfcSurfaceStyleShading":
+ surface_style = ifcopenshell.api.run(
+ "style.add_surface_style",
+ tool.Ifc.get(),
+ style=self.style,
+ ifc_class="IfcSurfaceStyleShading",
+ attributes=self.get_shading_attributes(),
+ )
+ tool.Loader.create_surface_style_shading(material, surface_style)
+ elif self.props.is_editing_class == "IfcSurfaceStyleRendering":
+ surface_style = ifcopenshell.api.run(
+ "style.add_surface_style",
+ tool.Ifc.get(),
+ style=self.style,
+ ifc_class="IfcSurfaceStyleRendering",
+ attributes=self.get_rendering_attributes(),
+ )
+ tool.Loader.create_surface_style_rendering(material, surface_style)
+
+ def get_shading_attributes(self):
+ return {
+ "SurfaceColour": self.color_to_dict(self.props.surface_colour),
+ "Transparency": self.props.transparency or None,
+ }
+
+ def get_rendering_attributes(self):
+ if self.props.is_diffuse_colour_null:
+ diffuse_colour = None
+ elif self.props.diffuse_colour_class == "IfcColourRgb":
+ diffuse_colour = self.color_to_dict(self.props.diffuse_colour)
+ elif self.props.diffuse_colour_class == "IfcNormalisedRatioMeasure":
+ diffuse_colour = self.props.diffuse_colour_ratio
+
+ if self.props.is_specular_colour_null:
+ specular_colour = None
+ elif self.props.specular_colour_class == "IfcColourRgb":
+ specular_colour = self.color_to_dict(self.props.specular_colour)
+ elif self.props.specular_colour_class == "IfcNormalisedRatioMeasure":
+ specular_colour = self.props.specular_colour_ratio
+
+ if self.props.is_specular_highlight_null:
+ specular_highlight = None
+ else:
+ specular_highlight = {"SpecularRoughness": self.props.specular_highlight}
+
+ return {
+ "SurfaceColour": self.color_to_dict(self.props.surface_colour),
+ "Transparency": self.props.transparency or None,
+ "ReflectanceMethod": self.props.reflectance_method,
+ "DiffuseColour": diffuse_colour,
+ "SpecularColour": specular_colour,
+ "SpecularHighlight": specular_highlight,
+ }
+
+ def color_to_dict(self, x):
+ return {"Red": x[0], "Green": x[1], "Blue": x[2]}
diff --git a/src/blenderbim/blenderbim/bim/module/style/prop.py b/src/blenderbim/blenderbim/bim/module/style/prop.py
index 111b36a5fd..fdb787ea1e 100644
--- a/src/blenderbim/blenderbim/bim/module/style/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/style/prop.py
@@ -40,10 +40,25 @@ def get_style_types(self, context):
return StylesData.data["style_types"]
+def get_reflectance_methods(self, context):
+ if not StylesData.is_loaded:
+ StylesData.load()
+ return StylesData.data["reflectance_methods"]
+
+
class Style(PropertyGroup):
name: StringProperty(name="Name")
ifc_definition_id: IntProperty(name="IFC Definition ID")
total_elements: IntProperty(name="Total Elements")
+ style_classes: CollectionProperty(name="Style Classes", type=StrProperty)
+ has_surface_colour: BoolProperty(name="Has Surface Colour", default=False)
+ surface_colour: bpy.props.FloatVectorProperty(
+ name="Surface Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3
+ )
+ has_diffuse_colour: BoolProperty(name="Has Diffuse Colour", default=False)
+ diffuse_colour: bpy.props.FloatVectorProperty(
+ name="Diffuse Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3
+ )
STYLE_TYPES = [
@@ -60,8 +75,53 @@ def update_shading_styles(self, context):
class BIMStylesProperties(PropertyGroup):
+ is_adding: BoolProperty(name="Is Adding")
is_editing: BoolProperty(name="Is Editing")
- style_type: EnumProperty(items=get_style_types, name="Style Type")
+ is_editing_style: IntProperty(name="Is Editing Style")
+ is_editing_class: StringProperty(name="Is Editing Class")
+ attributes: CollectionProperty(name="Attributes", type=Attribute)
+ style_type: EnumProperty(items=get_style_types, default=2, name="Style Type")
+ style_name: StringProperty(name="Style Name")
+ surface_style_class: EnumProperty(
+ items=[
+ (x, x, "")
+ for x in (
+ "IfcSurfaceStyleShading",
+ "IfcSurfaceStyleRendering",
+ "IfcSurfaceStyleWithTextures",
+ "IfcSurfaceStyleLighting",
+ "IfcSurfaceStyleRefraction",
+ "IfcExternallyDefinedSurfaceStyle",
+ )
+ ],
+ name="Surface Style Class",
+ default="IfcSurfaceStyleShading",
+ )
+ surface_colour: bpy.props.FloatVectorProperty(
+ name="Surface Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3
+ )
+ transparency: bpy.props.FloatProperty(name="Transparency", default=0.0, min=0.0, max=1.0)
+ is_diffuse_colour_null: BoolProperty(name="Is Null")
+ diffuse_colour_class: EnumProperty(
+ items=[(x, x, "") for x in ("IfcColourRgb", "IfcNormalisedRatioMeasure")],
+ name="Diffuse Colour Class",
+ )
+ diffuse_colour: bpy.props.FloatVectorProperty(
+ name="Diffuse Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3
+ )
+ diffuse_colour_ratio: bpy.props.FloatProperty(name="Diffuse Ratio", default=0.0, min=0.0, max=1.0)
+ is_specular_colour_null: BoolProperty(name="Is Null")
+ specular_colour_class: EnumProperty(
+ items=[(x, x, "") for x in ("IfcColourRgb", "IfcNormalisedRatioMeasure")],
+ name="Specular Colour Class",
+ )
+ specular_colour: bpy.props.FloatVectorProperty(
+ name="Specular Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3
+ )
+ specular_colour_ratio: bpy.props.FloatProperty(name="Specular Ratio", default=0.0, min=0.0, max=1.0)
+ is_specular_highlight_null: BoolProperty(name="Is Null")
+ specular_highlight: bpy.props.FloatProperty(name="Specular Highlight", default=0.0, min=0.0, max=1.0)
+ reflectance_method: EnumProperty(name="Reflectance Method", items=get_reflectance_methods)
styles: CollectionProperty(name="Styles", type=Style)
active_style_index: IntProperty(name="Active Style Index")
active_style_type: EnumProperty(
diff --git a/src/blenderbim/blenderbim/bim/module/style/ui.py b/src/blenderbim/blenderbim/bim/module/style/ui.py
index bb266d9542..d3e97deb94 100644
--- a/src/blenderbim/blenderbim/bim/module/style/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/style/ui.py
@@ -28,11 +28,11 @@ from blenderbim.tool.style import TEXTURE_MAPS_BY_METHODS, STYLE_TEXTURE_PROPS_M
class BIM_PT_styles(Panel):
bl_label = "Styles"
bl_idname = "BIM_PT_styles"
- bl_options = {"DEFAULT_CLOSED"}
+ bl_options = {"HIDE_HEADER"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_geometry"
+ bl_parent_id = "BIM_PT_tab_styles"
@classmethod
def poll(cls, context):
@@ -44,28 +44,146 @@ class BIM_PT_styles(Panel):
self.props = context.scene.BIMStylesProperties
- row = self.layout.row(align=True)
- row.label(text="{} Styles Found".format(StylesData.data["total_styles"]), icon="MATERIAL")
- row = self.layout.row(align=True)
if self.props.is_editing:
+ row = self.layout.row(align=True)
+ row.label(text="{} {}s".format(len(self.props.styles), self.props.style_type), icon="SHADING_RENDERED")
+ if not self.props.is_adding:
+ row.operator("bim.enable_adding_presentation_style", text="", icon="ADD")
row.operator("bim.disable_editing_styles", text="", icon="CANCEL")
else:
+ row = self.layout.row(align=True)
+ row.label(text="{} Styles".format(StylesData.data["total_styles"]), icon="SHADING_RENDERED")
blenderbim.bim.helper.prop_with_search(row, self.props, "style_type", text="")
row.operator("bim.load_styles", text="", icon="IMPORT").style_type = self.props.style_type
return
- row = self.layout.row(align=True)
- row.alignment = "RIGHT"
+ if self.props.is_adding:
+ box = self.layout.box()
+ row = box.row()
+ row.prop(self.props, "style_name", text="Name")
+ if self.props.style_type == "IfcSurfaceStyle":
+ row = box.row()
+ row.prop(self.props, "surface_style_class", text="Class")
+ if self.props.surface_style_class in ("IfcSurfaceStyleShading", "IfcSurfaceStyleRendering"):
+ row = box.row()
+ row.prop(self.props, "surface_colour", text="Colour")
+ row = box.row(align=True)
+ row.operator("bim.add_presentation_style", text="Save New Style", icon="CHECKMARK")
+ row.operator("bim.disable_adding_presentation_style", text="", icon="CANCEL")
- # row.operator("bim.add_presentation_style", text="", icon="ADD")
if self.props.styles and self.props.active_style_index < len(self.props.styles):
+ row = self.layout.row(align=True)
style = self.props.styles[self.props.active_style_index]
- op = row.operator("bim.select_by_style", text="", icon="RESTRICT_SELECT_OFF")
+ op = row.operator("bim.enable_editing_style", text="Edit Style", icon="GREASEPENCIL")
op.style = style.ifc_definition_id
+ row.operator("bim.select_by_style", text="", icon="RESTRICT_SELECT_OFF").style = style.ifc_definition_id
row.operator("bim.remove_style", text="", icon="X").style = style.ifc_definition_id
+ if self.props.style_type == "IfcSurfaceStyle":
+ col = self.layout.column(align=True)
+
+ row = col.row(align=True)
+ op = row.operator("bim.enable_editing_surface_style", text="Shade", icon="SHADING_SOLID")
+ op.ifc_class = "IfcSurfaceStyleShading"
+ op.style = style.ifc_definition_id
+ op = row.operator("bim.enable_editing_surface_style", text="Render", icon="SHADING_RENDERED")
+ op.ifc_class = "IfcSurfaceStyleRendering"
+ op.style = style.ifc_definition_id
+ op = row.operator("bim.enable_editing_surface_style", text="Texture", icon="SHADING_TEXTURE")
+ op.ifc_class = "IfcSurfaceStyleWithTextures"
+ op.style = style.ifc_definition_id
+
+ row = col.row(align=True)
+ op = row.operator("bim.enable_editing_surface_style", text="Lighting", icon="LIGHT_SUN")
+ op.ifc_class = "IfcSurfaceStyleLighting"
+ op.style = style.ifc_definition_id
+ op = row.operator("bim.enable_editing_surface_style", text="Refract", icon="LIGHT_POINT")
+ op.ifc_class = "IfcSurfaceStyleRefraction"
+ op.style = style.ifc_definition_id
+ op = row.operator("bim.enable_editing_surface_style", text="External", icon="APPEND_BLEND")
+ op.ifc_class = "IfcExternallyDefinedSurfaceStyle"
+ op.style = style.ifc_definition_id
+
self.layout.template_list("BIM_UL_styles", "", self.props, "styles", self.props, "active_style_index")
+ if self.props.is_editing_style:
+ if self.props.is_editing_class == "IfcSurfaceStyle":
+ blenderbim.bim.helper.draw_attributes(self.props.attributes, self.layout)
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_style", text="Save Attributes", icon="CHECKMARK")
+ row.operator("bim.disable_editing_style", text="", icon="CANCEL")
+ elif self.props.is_editing_class == "IfcSurfaceStyleShading":
+ self.draw_surface_style_shading()
+ elif self.props.is_editing_class == "IfcSurfaceStyleRendering":
+ self.draw_surface_style_rendering()
+
+ def draw_surface_style_shading(self):
+ row = self.layout.row()
+ row.prop(self.props, "surface_colour")
+ row = self.layout.row()
+ row.prop(self.props, "transparency")
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_surface_style", text="Save Shading Style", icon="CHECKMARK")
+ row.operator("bim.disable_editing_style", text="", icon="CANCEL")
+
+ def draw_surface_style_rendering(self):
+ row = self.layout.row()
+ row.prop(self.props, "surface_colour")
+ row = self.layout.row()
+ row.prop(self.props, "transparency")
+ row = self.layout.row()
+ row.prop(self.props, "reflectance_method")
+
+ row = self.layout.row(align=True)
+ row.label(text="Diffuse")
+ row.prop(self.props, "diffuse_colour_class", text="")
+ if self.props.diffuse_colour_class == "IfcColourRgb":
+ row.prop(self.props, "diffuse_colour", text="")
+ else:
+ row.prop(self.props, "diffuse_colour_ratio", text="")
+ row.prop(
+ self.props,
+ "is_diffuse_colour_null",
+ text="",
+ icon="RADIOBUT_OFF" if self.props.is_diffuse_colour_null else "RADIOBUT_ON",
+ )
+
+ row = self.layout.row(align=True)
+ if self.props.reflectance_method in ("PHYSICAL", "NOTDEFINED"):
+ row.label(text="Metallic")
+ else:
+ row.label(text="Specular")
+ row.prop(self.props, "specular_colour_class", text="")
+ if self.props.specular_colour_class == "IfcColourRgb":
+ row.prop(self.props, "specular_colour", text="")
+ else:
+ row.prop(self.props, "specular_colour_ratio", text="")
+ row.prop(
+ self.props,
+ "is_specular_colour_null",
+ text="",
+ icon="RADIOBUT_OFF" if self.props.is_specular_colour_null else "RADIOBUT_ON",
+ )
+
+ row = self.layout.row(align=True)
+ if self.props.reflectance_method in ("PHYSICAL", "NOTDEFINED"):
+ row.label(text="Roughness")
+ elif self.props.reflectance_method in ("PHONG"):
+ row.label(text="Shininess")
+ else:
+ row.label(text="Highlight")
+ row.prop(self.props, "specular_highlight", text="")
+ row.prop(
+ self.props,
+ "is_specular_highlight_null",
+ text="",
+ icon="RADIOBUT_OFF" if self.props.is_specular_highlight_null else "RADIOBUT_ON",
+ )
+
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_surface_style", text="Save Rendering Style", icon="CHECKMARK")
+ row.operator("bim.disable_editing_style", text="", icon="CANCEL")
+
def draw_style_ui(self, context):
mat = context.material
@@ -145,9 +263,6 @@ class BIM_PT_style_attributes(Panel):
row.operator("bim.disable_editing_style", icon="CANCEL", text="")
blenderbim.bim.helper.draw_attributes(props.attributes, self.layout)
else:
- row = self.layout.row()
- row.operator("bim.enable_editing_style", icon="GREASEPENCIL", text="Edit")
-
row = self.layout.row(align=True)
row.label(text="STEP ID")
row.label(text=str(mprops.ifc_style_id))
@@ -218,9 +333,28 @@ class BIM_UL_styles(UIList):
if item:
row = layout.row(align=True)
row.label(text=item.name)
+ if item.has_surface_colour:
+ row = row.row(align=True)
+ row.enabled = False
+ row.prop(item, "surface_colour", text="")
+ if item.has_diffuse_colour:
+ row.prop(item, "diffuse_colour", text="")
row2 = row.row()
row2.alignment = "RIGHT"
row2.label(text=str(item.total_elements))
+ for style in item.style_classes:
+ if style.name == "IfcSurfaceStyleShading":
+ row2.label(text="", icon="SHADING_SOLID")
+ elif style.name == "IfcSurfaceStyleRendering":
+ row2.label(text="", icon="SHADING_RENDERED")
+ elif style.name == "IfcSurfaceStyleWithTextures":
+ row2.label(text="", icon="SHADING_TEXTURE")
+ elif style.name == "IfcSurfaceStyleLighting":
+ row2.label(text="", icon="LIGHT_SUN")
+ elif style.name == "IfcSurfaceStyleRefraction":
+ row2.label(text="", icon="LIGHT_POINT")
+ elif style.name == "IfcExternallyDefinedSurfaceStyle":
+ row2.label(text="", icon="APPEND_BLEND")
class BIM_PT_STYLE_GRAPH(Panel):
@@ -273,7 +407,7 @@ class BIM_PT_STYLE_GRAPH(Panel):
row.prop(props, path_name)
op = row.operator("bim.clear_texture_map_path", text="", icon="X")
op.texture_map_prop = path_name
-
+
layout.separator()
texture_maps = TEXTURE_MAPS_BY_METHODS.get(props.reflectance_method, [])
if not texture_maps:
diff --git a/src/blenderbim/blenderbim/bim/module/system/__init__.py b/src/blenderbim/blenderbim/bim/module/system/__init__.py
index ea95b8965e..0c500595da 100644
--- a/src/blenderbim/blenderbim/bim/module/system/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/system/__init__.py
@@ -22,38 +22,52 @@ from . import ui, prop, operator, decorator
classes = (
operator.AddPort,
operator.AddSystem,
+ operator.AddZone,
operator.AssignSystem,
+ operator.AssignUnassignFlowControl,
operator.ConnectPort,
operator.DisableEditingSystem,
+ operator.DisableEditingZone,
operator.DisableSystemEditingUI,
operator.DisconnectPort,
operator.EditSystem,
+ operator.EditZone,
operator.EnableEditingSystem,
+ operator.EnableEditingZone,
operator.HidePorts,
operator.LoadSystems,
+ operator.LoadZones,
+ operator.MEPConnectElements,
operator.RemovePort,
operator.RemoveSystem,
+ operator.RemoveZone,
operator.SelectSystemProducts,
- operator.MEPConnectElements,
operator.SetFlowDirection,
operator.ShowPorts,
operator.UnassignSystem,
+ operator.UnloadZones,
prop.System,
+ prop.Zone,
prop.BIMSystemProperties,
+ prop.BIMZoneProperties,
ui.BIM_PT_systems,
- ui.BIM_PT_object_systems,
+ ui.BIM_PT_zones,
+ ui.BIM_PT_active_object_zones,
ui.BIM_PT_ports,
ui.BIM_PT_port,
+ ui.BIM_PT_flow_controls,
ui.BIM_UL_systems,
- ui.BIM_UL_object_systems,
+ ui.BIM_UL_zones,
)
def register():
bpy.types.Scene.BIMSystemProperties = bpy.props.PointerProperty(type=prop.BIMSystemProperties)
+ bpy.types.Scene.BIMZoneProperties = bpy.props.PointerProperty(type=prop.BIMZoneProperties)
bpy.app.handlers.load_post.append(decorator.toggle_decorations_on_load)
def unregister():
del bpy.types.Scene.BIMSystemProperties
+ del bpy.types.Scene.BIMZoneProperties
bpy.app.handlers.load_post.remove(decorator.toggle_decorations_on_load)
diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py
index 6955fcdbbf..9a37c1f48d 100644
--- a/src/blenderbim/blenderbim/bim/module/system/data.py
+++ b/src/blenderbim/blenderbim/bim/module/system/data.py
@@ -25,6 +25,8 @@ import blenderbim.tool as tool
def refresh():
SystemData.is_loaded = False
+ ZonesData.is_loaded = False
+ ActiveObjectZonesData.is_loaded = False
ObjectSystemData.is_loaded = False
PortData.is_loaded = False
SystemDecorationData.is_loaded = False
@@ -47,6 +49,7 @@ class SystemData:
declaration = tool.Ifc.schema().declaration_by_name("IfcSystem")
declarations = ifcopenshell.util.schema.get_subtypes(declaration)
version = tool.Ifc.get_schema()
+
# We're only interested in systems for services. Not sure why IFC groups these together.
return [
(c, c, get_entity_doc(version, c).get("description", ""))
@@ -56,7 +59,7 @@ class SystemData:
@classmethod
def total_systems(cls):
- return len(tool.Ifc.get().by_type("IfcSystem"))
+ return len(tool.System.get_systems())
class ObjectSystemData:
@@ -67,9 +70,9 @@ class ObjectSystemData:
def load(cls):
cls.data = {
"systems": cls.systems(),
- "total_systems": cls.total_systems(),
# AFTER SYSTEMS
"connected_elements": cls.connected_elements(),
+ "flow_controls_data": cls.flow_controls_data(),
}
cls.is_loaded = True
@@ -83,16 +86,32 @@ class ObjectSystemData:
results.append({"id": system.id(), "name": system.Name or "Unnamed", "ifc_class": system.is_a()})
return results
- @classmethod
- def total_systems(cls):
- return len(tool.Ifc.get().by_type("IfcSystem"))
-
@classmethod
def connected_elements(cls):
if not cls.element:
return set()
return tool.System.get_connected_elements(cls.element)
+ @classmethod
+ def flow_controls_data(cls):
+ flow_controls_data = {}
+ if not cls.element or not (
+ cls.element.is_a("IfcDistributionControlElement") or cls.element.is_a("IfcDistributionFlowElement")
+ ):
+ return flow_controls_data
+
+ if cls.element.is_a("IfcDistributionControlElement"):
+ flow_controls_data["type"] = "IfcDistributionControlElement"
+ flow_element = tool.System.get_flow_control_flow_element(cls.element)
+ flow_element_obj = tool.Ifc.get_object(flow_element).name if flow_element else None
+ flow_controls_data["flow_element"] = flow_element, flow_element_obj
+ else:
+ flow_controls_data["type"] = "IfcDistributionFlowElement"
+ controls = [(c, tool.Ifc.get_object(c).name) for c in tool.System.get_flow_element_controls(cls.element)]
+ flow_controls_data["controls"] = controls
+
+ return flow_controls_data
+
class PortData:
data = {}
@@ -107,8 +126,8 @@ class PortData:
"total_ports": cls.total_ports(),
"located_ports_data": cls.located_ports_data(),
"is_port": is_port,
- "port_connected_object": cls.port_connected_object() if is_port else None,
- "port_relating_object": cls.port_relating_object() if is_port else None,
+ "port_connected_object_name": cls.port_connected_object_name() if is_port else None,
+ "port_relating_object_name": cls.port_relating_object_name() if is_port else None,
}
# AFTER located_ports_data
cls.data["selected_objects_flow_direction"] = cls.selected_objects_flow_direction() if not is_port else None
@@ -123,16 +142,16 @@ class PortData:
return cls.element and cls.element.is_a("IfcDistributionPort")
@classmethod
- def port_relating_object(cls):
- return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element))
+ def port_relating_object_name(cls):
+ return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element)).name
@classmethod
- def port_connected_object(cls):
+ def port_connected_object_name(cls):
connected_port = tool.System.get_connected_port(cls.element)
if not connected_port:
return
connected_element = tool.System.get_port_relating_element(connected_port)
- return tool.Ifc.get_object(connected_element)
+ return tool.Ifc.get_object(connected_element).name
@classmethod
def located_ports_data(cls):
@@ -140,19 +159,23 @@ class PortData:
data = []
for port in ports:
- port_obj = tool.Ifc.get_object(port)
+ # port may be not present as a scene object
+ port_obj_name = getattr(tool.Ifc.get_object(port), "name", None)
connected_port = tool.System.get_connected_port(port)
if connected_port:
- connected_obj = tool.Ifc.get_object(tool.System.get_port_relating_element(connected_port))
+ connected_obj_name = tool.Ifc.get_object(tool.System.get_port_relating_element(connected_port)).name
else:
- connected_obj = None
+ connected_obj_name = None
- data.append((port, port_obj, connected_obj))
+ data.append((port, port_obj_name, connected_obj_name))
return data
@classmethod
def selected_objects_flow_direction(cls):
- for port, port_obj, connected_obj in cls.data["located_ports_data"]:
+ for port, _, connected_obj_name in cls.data["located_ports_data"]:
+ if connected_obj_name is None:
+ continue
+ connected_obj = bpy.data.objects[connected_obj_name]
if connected_obj in bpy.context.selected_objects:
return port.FlowDirection
@@ -164,7 +187,9 @@ class SystemDecorationData:
@classmethod
def load(cls):
- cls.data = {}
+ cls.data = {
+ "decorated_elements": cls.decorated_elements(),
+ }
cls.is_loaded = True
cls.elements_ports_positions = {}
@@ -190,3 +215,55 @@ class SystemDecorationData:
ports_data.append(port_data)
cls.elements_ports_positions[element] = ports_data
return cls.elements_ports_positions[element]
+
+ @classmethod
+ def decorated_elements(cls):
+ if not ObjectSystemData.is_loaded:
+ ObjectSystemData.load()
+
+ # Priority:
+ # 1. currently selected systems
+ # 2. active system
+ # 3. if previous steps didn't worked - decorate connected elements
+
+ decorated_elements = set()
+ if ObjectSystemData.data["systems"]:
+ for system in ObjectSystemData.data["systems"]:
+ system = tool.Ifc.get().by_id(system["id"])
+ decorated_elements.update(ifcopenshell.util.system.get_system_elements(system))
+ elif active_system := tool.System.get_active_system():
+ decorated_elements = set(ifcopenshell.util.system.get_system_elements(active_system))
+
+ if not decorated_elements:
+ decorated_elements.update(ObjectSystemData.data["connected_elements"])
+
+ return decorated_elements
+
+
+class ZonesData:
+ data = {}
+ is_loaded = False
+
+ @classmethod
+ def load(cls):
+ cls.data = {"total_zones": cls.total_zones()}
+ cls.is_loaded = True
+
+ @classmethod
+ def total_zones(cls):
+ return len(tool.Ifc.get().by_type("IfcZone"))
+
+
+class ActiveObjectZonesData:
+ data = {}
+ is_loaded = False
+
+ @classmethod
+ def load(cls):
+ cls.data = {"zones": cls.zones()}
+ cls.is_loaded = True
+
+ @classmethod
+ def zones(cls):
+ systems = ifcopenshell.util.system.get_element_systems(tool.Ifc.get_entity(bpy.context.active_object))
+ return [s.Name or "Unnamed" for s in systems if s.is_a("IfcZone")]
diff --git a/src/blenderbim/blenderbim/bim/module/system/decorator.py b/src/blenderbim/blenderbim/bim/module/system/decorator.py
index e3e8518f79..146fa71abc 100644
--- a/src/blenderbim/blenderbim/bim/module/system/decorator.py
+++ b/src/blenderbim/blenderbim/bim/module/system/decorator.py
@@ -122,15 +122,15 @@ class SystemDecorator:
selected_vertices = decoration_data["selected_vertices"]
### Actually drawing
- # 3D_POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
- self.line_shader = gpu.shader.from_builtin("3D_POLYLINE_UNIFORM_COLOR")
+ # POLYLINE_UNIFORM_COLOR is good for smoothed lines since `bgl.enable(GL_LINE_SMOOTH)` is deprecated
+ self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR")
self.line_shader.bind()
# POLYLINE_UNIFORM_COLOR specific uniforms
self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height))
self.line_shader.uniform_float("lineWidth", 2.0)
# general shader
- self.shader = gpu.shader.from_builtin("3D_UNIFORM_COLOR")
+ self.shader = gpu.shader.from_builtin("UNIFORM_COLOR")
self.shader.bind()
self.draw_batch("LINES", all_vertices, transparent_color(unselected_elements_color), unselected_edges)
diff --git a/src/blenderbim/blenderbim/bim/module/system/operator.py b/src/blenderbim/blenderbim/bim/module/system/operator.py
index 4d40d9c36d..cef76d5979 100644
--- a/src/blenderbim/blenderbim/bim/module/system/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/system/operator.py
@@ -21,6 +21,7 @@ import ifcopenshell.api
import blenderbim.tool as tool
import blenderbim.core.system as core
import blenderbim.bim.handler
+import blenderbim.bim.helper
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.system.data import PortData
from mathutils import Matrix
@@ -67,7 +68,7 @@ class EditSystem(bpy.types.Operator, Operator):
def _execute(self, context):
core.edit_system(
- tool.Ifc, tool.System, system=tool.Ifc.get().by_id(context.scene.BIMSystemProperties.active_system_id)
+ tool.Ifc, tool.System, system=tool.Ifc.get().by_id(context.scene.BIMSystemProperties.edited_system_id)
)
@@ -326,3 +327,161 @@ class SetFlowDirection(bpy.types.Operator, Operator):
self.report({"ERROR"}, "Selected elements are not connected to set the flow direction")
return {"CANCELLED"}
+
+
+class LoadZones(bpy.types.Operator, Operator):
+ bl_idname = "bim.load_zones"
+ bl_label = "Load Zones"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMZoneProperties
+ props.zones.clear()
+ for zone in tool.Ifc.get().by_type("IfcZone"):
+ new = props.zones.add()
+ new.ifc_definition_id = zone.id()
+ new.name = zone.Name or "Unnamed"
+ props.is_loaded = True
+ props.is_editing = 0
+
+
+class UnloadZones(bpy.types.Operator, Operator):
+ bl_idname = "bim.unload_zones"
+ bl_label = "Unload Zones"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMZoneProperties
+ props.is_loaded = False
+
+
+class AddZone(bpy.types.Operator, Operator):
+ bl_idname = "bim.add_zone"
+ bl_label = "Add Zone"
+ bl_options = {"REGISTER", "UNDO"}
+ name: bpy.props.StringProperty()
+
+ def invoke(self, context, event):
+ return context.window_manager.invoke_props_dialog(self)
+
+ def draw(self, context):
+ row = self.layout
+ row.prop(self, "name", text="Name")
+
+ def _execute(self, context):
+ element = ifcopenshell.api.run("system.add_system", tool.Ifc.get(), ifc_class="IfcZone")
+ if self.name:
+ element.Name = self.name
+ bpy.ops.bim.load_zones()
+
+
+class EnableEditingZone(bpy.types.Operator, Operator):
+ bl_idname = "bim.enable_editing_zone"
+ bl_label = "Enable Editing Zone"
+ bl_options = {"REGISTER", "UNDO"}
+ zone: bpy.props.IntProperty()
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMZoneProperties
+ props.attributes.clear()
+ blenderbim.bim.helper.import_attributes2(tool.Ifc.get().by_id(self.zone), props.attributes)
+ props.is_editing = self.zone
+
+
+class DisableEditingZone(bpy.types.Operator, Operator):
+ bl_idname = "bim.disable_editing_zone"
+ bl_label = "Disable Editing Zone"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMZoneProperties
+ props.is_editing = 0
+
+
+class EditZone(bpy.types.Operator, Operator):
+ bl_idname = "bim.edit_zone"
+ bl_label = "Edit Zone"
+ bl_options = {"REGISTER", "UNDO"}
+
+ def _execute(self, context):
+ props = bpy.context.scene.BIMZoneProperties
+ zone = tool.Ifc.get().by_id(props.is_editing)
+ attributes = blenderbim.bim.helper.export_attributes(props.attributes)
+ ifcopenshell.api.run("system.edit_system", tool.Ifc.get(), system=zone, attributes=attributes)
+ props.is_editing = 0
+ bpy.ops.bim.load_zones()
+
+
+class RemoveZone(bpy.types.Operator, Operator):
+ bl_idname = "bim.remove_zone"
+ bl_label = "Remove Zone"
+ bl_options = {"REGISTER", "UNDO"}
+ zone: bpy.props.IntProperty()
+
+ def _execute(self, context):
+ ifcopenshell.api.run("system.remove_system", tool.Ifc.get(), system=tool.Ifc.get().by_id(self.zone))
+ bpy.ops.bim.load_zones()
+
+
+class AssignUnassignFlowControl(bpy.types.Operator, Operator):
+ bl_idname = "bim.assign_unassign_flow_control"
+ bl_label = "Assign/Unassign Flow Control"
+ bl_options = {"REGISTER", "UNDO"}
+ flow_element: bpy.props.IntProperty(options={"SKIP_SAVE"})
+ flow_control: bpy.props.IntProperty(options={"SKIP_SAVE"})
+ assign: bpy.props.BoolProperty(name="Assign/Unassign", default=True, options={"SKIP_SAVE"})
+
+ def _execute(self, context):
+ ifc_file = tool.Ifc.get()
+ flow_element = None
+ flow_controls = []
+ from_selected_objects = False
+
+ if self.flow_element != 0:
+ flow_element = ifc_file.by_id(self.flow_element)
+ if self.flow_control != 0:
+ flow_controls = [ifc_file.by_id(self.flow_control)]
+
+ # if not provided as arguments tried to get them from
+ # the selected objects
+ if not flow_element or flow_controls:
+ from_selected_objects = True
+ for obj in context.selected_objects:
+ element = tool.Ifc.get_entity(obj)
+ if not element:
+ continue
+
+ if element.is_a("IfcDistributionControlElement") and self.flow_control == 0:
+ flow_controls.append(element)
+ elif element.is_a("IfcDistributionFlowElement") and self.flow_element == 0:
+ if flow_element:
+ self.report(
+ {"ERROR"},
+ "More than one flow element selected. Control can be assigned to only 1 flow element.",
+ )
+ return {"CANCELLED"}
+ flow_element = element
+
+ if not flow_element:
+ self.report({"ERROR"}, "No flow element selected.")
+ return {"CANCELLED"}
+
+ if not flow_controls:
+ self.report({"ERROR"}, "No flow controls selected.")
+ return {"CANCELLED"}
+
+ for control in flow_controls:
+ if self.assign:
+ tool.Ifc.run(
+ "system.assign_flow_control", relating_flow_element=flow_element, related_flow_control=control
+ )
+ else:
+ tool.Ifc.run(
+ "system.unassign_flow_control", relating_flow_element=flow_element, related_flow_control=control
+ )
+
+ if from_selected_objects:
+ self.report(
+ {"INFO"}, f"{len(flow_controls)} flow controls were {'assigned' if self.assign else 'unassigned'}."
+ )
+ return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/system/prop.py b/src/blenderbim/blenderbim/bim/module/system/prop.py
index f1ffa3263c..7d935e1910 100644
--- a/src/blenderbim/blenderbim/bim/module/system/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/system/prop.py
@@ -45,6 +45,11 @@ class System(PropertyGroup):
ifc_definition_id: IntProperty(name="IFC Definition ID")
+class Zone(PropertyGroup):
+ name: StringProperty(name="Name")
+ ifc_definition_id: IntProperty(name="IFC Definition ID")
+
+
def toggle_decorations(self, context):
toggle = self.should_draw_decorations
if toggle:
@@ -60,7 +65,16 @@ class BIMSystemProperties(PropertyGroup):
systems: CollectionProperty(name="Systems", type=System)
active_system_index: IntProperty(name="Active System Index")
active_system_id: IntProperty(name="Active System Id")
+ edited_system_id: IntProperty(name="Edited System Id")
system_class: EnumProperty(items=get_system_class, name="Class")
should_draw_decorations: BoolProperty(
name="Should Draw Decorations", description="Toggle system decorations", update=toggle_decorations
)
+
+
+class BIMZoneProperties(PropertyGroup):
+ attributes: CollectionProperty(name="Attributes", type=Attribute)
+ is_loaded: BoolProperty(name="Is Loaded", default=False)
+ is_editing: IntProperty(name="Is Editing", default=0)
+ zones: CollectionProperty(name="Zones", type=Zone)
+ active_zone_index: IntProperty(name="Active Zone Index")
diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py
index 6e20514bac..4ad2922074 100644
--- a/src/blenderbim/blenderbim/bim/module/system/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/system/ui.py
@@ -16,20 +16,30 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
-from blenderbim.bim.helper import prop_with_search
+import bpy
+import blenderbim.bim.helper
import blenderbim.tool as tool
+from blenderbim.bim.helper import prop_with_search
from bpy.types import Panel, UIList
-from blenderbim.bim.ifc import IfcStore
-from blenderbim.bim.module.system.data import SystemData, ObjectSystemData, PortData
+from blenderbim.bim.module.system.data import SystemData, ZonesData, ActiveObjectZonesData, ObjectSystemData, PortData
FLOW_DIRECTION_TO_ICON = {
- "SOURCE": "REMOVE",
- "SINK": "ADD",
+ "SOURCE": "FORWARD",
+ "SINK": "BACK",
"SOURCEANDSINK": "ARROW_LEFTRIGHT",
"NOTDEFINED": "CHECKBOX_DEHLT",
}
+SYSTEM_ICONS = {
+ "IfcSystem": "EXTERNAL_DRIVE",
+ "IfcDistributionSystem": "NETWORK_DRIVE",
+ "IfcDistributionCircuit": "DRIVER",
+ "IfcBuildingSystem": "MOD_BUILD",
+ "IfcBuiltSystem": "MOD_BUILD",
+ "IfcZone": "CUBE",
+}
+
class BIM_PT_systems(Panel):
bl_label = "Systems"
@@ -42,15 +52,45 @@ class BIM_PT_systems(Panel):
@classmethod
def poll(cls, context):
- return IfcStore.get_file()
+ return tool.Ifc.get()
def draw(self, context):
if not SystemData.is_loaded:
SystemData.load()
+ if not ObjectSystemData.is_loaded:
+ ObjectSystemData.load()
+
+ def draw_system_ui(row, system_id, system_name, system_class):
+ row = self.layout.row(align=True)
+ row.label(text=system_name, icon=SYSTEM_ICONS[system_class])
+ op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
+ op.system = system_id
+ op = row.operator("bim.unassign_system", text="", icon="X")
+ op.system = system_id
+
self.props = context.scene.BIMSystemProperties
+ row = self.layout.row(align=True)
+ row.prop(self.props, "should_draw_decorations")
+
+ row = self.layout.row()
+ if active_system := tool.System.get_active_system():
+ row.label(text=f"Active system:")
+ row = self.layout.row(align=True)
+ draw_system_ui(row, active_system.id(), active_system.Name, active_system.is_a())
+ else:
+ row.label(text="No active system is selected")
+
+ if ObjectSystemData.data["systems"]:
+ row = self.layout.row()
+ row.label(text="Active object systems:")
+ for system in ObjectSystemData.data["systems"]:
+ row = self.layout.row(align=True)
+ draw_system_ui(row, system["id"], system["name"], system["ifc_class"])
+ else:
+ self.layout.label(text="No System associated with active object")
row = self.layout.row(align=True)
- row.label(text="{} Systems Found".format(SystemData.data["total_systems"]), icon="OUTLINER")
+ row.label(text="{} Systems Found in Project".format(SystemData.data["total_systems"]), icon="OUTLINER")
if self.props.is_editing:
row.operator("bim.disable_system_editing_ui", text="", icon="CANCEL")
@@ -58,7 +98,7 @@ class BIM_PT_systems(Panel):
prop_with_search(row, self.props, "system_class", text="")
row.operator("bim.add_system", text="", icon="ADD")
else:
- row.operator("bim.load_systems", text="", icon="GREASEPENCIL")
+ row.operator("bim.load_systems", text="", icon="IMPORT")
if self.props.is_editing:
self.layout.template_list(
@@ -70,7 +110,7 @@ class BIM_PT_systems(Panel):
"active_system_index",
)
- if self.props.active_system_id:
+ if self.props.edited_system_id:
self.draw_editable_ui(context)
def draw_editable_ui(self, context):
@@ -81,67 +121,6 @@ class BIM_PT_systems(Panel):
row.prop(attribute, "is_null", icon="RADIOBUT_OFF" if attribute.is_null else "RADIOBUT_ON", text="")
-class BIM_PT_object_systems(Panel):
- bl_label = "Systems"
- bl_idname = "BIM_PT_object_systems"
- bl_options = {"DEFAULT_CLOSED"}
- bl_space_type = "PROPERTIES"
- bl_region_type = "WINDOW"
- bl_context = "object"
- bl_order = 1
- bl_parent_id = "BIM_PT_tab_services_object"
-
- @classmethod
- def poll(cls, context):
- if not context.active_object:
- return False
- return IfcStore.get_file() and context.active_object.BIMObjectProperties.ifc_definition_id
-
- def draw(self, context):
- if not ObjectSystemData.is_loaded:
- ObjectSystemData.load()
- self.props = context.scene.BIMSystemProperties
-
- row = self.layout.row(align=True)
- row.prop(self.props, "should_draw_decorations")
-
- if self.props.is_editing:
- row = self.layout.row()
- row.alignment = "RIGHT"
- row.operator("bim.disable_system_editing_ui", text="", icon="CANCEL")
- self.layout.template_list(
- "BIM_UL_object_systems",
- "",
- self.props,
- "systems",
- self.props,
- "active_system_index",
- )
- else:
- row = self.layout.row(align=True)
- row.label(text=f"{ObjectSystemData.data['total_systems']} Systems in IFC Project", icon="OUTLINER")
- row.operator("bim.load_systems", text="", icon="GREASEPENCIL")
-
- system_icons = {
- "IfcSystem": "EXTERNAL_DRIVE",
- "IfcDistributionSystem": "NETWORK_DRIVE",
- "IfcDistributionCircuit": "DRIVER",
- "IfcBuildingSystem": "MOD_BUILD",
- "IfcBuiltSystem": "MOD_BUILD",
- "IfcZone": "CUBE",
- }
- for system in ObjectSystemData.data["systems"]:
- row = self.layout.row(align=True)
- row.label(text=system["name"], icon=system_icons[system["ifc_class"]])
- op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
- op.system = system["id"]
- op = row.operator("bim.unassign_system", text="", icon="X")
- op.system = system["id"]
-
- if not ObjectSystemData.data["systems"]:
- self.layout.label(text="No System associated with Active Object")
-
-
class BIM_PT_ports(Panel):
bl_label = "Ports"
bl_idname = "BIM_PT_ports"
@@ -150,7 +129,7 @@ class BIM_PT_ports(Panel):
bl_region_type = "WINDOW"
bl_context = "object"
bl_order = 1
- bl_parent_id = "BIM_PT_tab_services_object"
+ bl_parent_id = "BIM_PT_tab_services"
@classmethod
def poll(cls, context):
@@ -198,23 +177,24 @@ class BIM_PT_ports(Panel):
cols = [row.column(align=True) for i in range(6)]
for i, port_data in enumerate(PortData.data["located_ports_data"]):
- port, port_obj, connected_obj = port_data
+ port, port_obj_name, connected_obj_name = port_data
flow_direction_icon = FLOW_DIRECTION_TO_ICON[port.FlowDirection or "NOTDEFINED"]
- if port_obj:
+ if port_obj_name:
cols[0].label(text="", icon=flow_direction_icon)
cols[1].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = port.id()
- cols[2].label(text=port_obj.name)
+ cols[2].label(text=port_obj_name)
else:
cols[0].label(text="", icon=flow_direction_icon)
cols[1].label(text="", icon="HIDE_ON")
cols[2].label(text="Port is hidden")
- if connected_obj:
+ if connected_obj_name:
+ connected_obj = bpy.data.objects[connected_obj_name]
cols[3].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port.id()
cols[4].operator(
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
).ifc_id = connected_obj.BIMObjectProperties.ifc_definition_id
- cols[5].label(text=f"{connected_obj.name}")
+ cols[5].label(text=connected_obj_name)
else:
cols[3].label(text="", icon="UNLINKED")
cols[4].label(text="", icon="BLANK1")
@@ -229,7 +209,7 @@ class BIM_PT_port(Panel):
bl_region_type = "WINDOW"
bl_context = "object"
bl_order = 1
- bl_parent_id = "BIM_PT_tab_services_object"
+ bl_parent_id = "BIM_PT_tab_services"
@classmethod
def poll(cls, context):
@@ -264,19 +244,21 @@ class BIM_PT_port(Panel):
# port located on
row = layout.row(align=True)
- relating_object = PortData.data["port_relating_object"]
+ relating_object_name = PortData.data["port_relating_object_name"]
+ relating_object = bpy.data.objects[relating_object_name]
row.label(text="Port located on:")
- row.label(text=relating_object.name)
+ row.label(text=relating_object_name)
row.operator(
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
).ifc_id = relating_object.BIMObjectProperties.ifc_definition_id
# object connected to the port
row = layout.row(align=True)
- connected_object = PortData.data["port_connected_object"]
- if connected_object:
+ connected_object_name = PortData.data["port_connected_object_name"]
+ if connected_object_name:
+ connected_object = bpy.data.objects[connected_object_name]
row.label(text="Port connected to:")
- row.label(text=connected_object.name)
+ row.label(text=connected_object_name)
row.operator(
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
).ifc_id = connected_object.BIMObjectProperties.ifc_definition_id
@@ -294,26 +276,152 @@ class BIM_PT_port(Panel):
).direction = flow_direction
+class BIM_PT_flow_controls(Panel):
+ bl_label = "Flow Controls"
+ bl_idname = "BIM_PT_flow_controls"
+ bl_options = {"DEFAULT_CLOSED"}
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "object"
+ bl_order = 1
+ bl_parent_id = "BIM_PT_tab_services"
+
+ @classmethod
+ def poll(cls, context):
+ if not context.active_object:
+ return False
+ element = tool.Ifc.get_entity(context.active_object)
+ if not element or not (
+ element.is_a("IfcDistributionControlElement") or element.is_a("IfcDistributionFlowElement")
+ ):
+ return False
+ return True
+
+ def draw(self, context):
+ if not ObjectSystemData.is_loaded:
+ ObjectSystemData.load()
+
+ def display_element(control_id, flow_element_id, displayed_object_name):
+ displayed_object = bpy.data.objects[displayed_object_name]
+ row = self.layout.row(align=True)
+ op = row.operator("bim.assign_unassign_flow_control", text="", icon="X")
+ op.flow_control = control_id
+ op.flow_element = flow_element_id
+ op.assign = False
+ row.operator(
+ "bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
+ ).ifc_id = displayed_object.BIMObjectProperties.ifc_definition_id
+ row.label(text=f"{displayed_object_name}")
+
+ element = tool.Ifc.get_entity(context.active_object)
+ flow_controls_data = ObjectSystemData.data["flow_controls_data"]
+ if flow_controls_data["type"] == "IfcDistributionFlowElement":
+ controls = flow_controls_data["controls"]
+ row = self.layout.row(align=True)
+ if controls:
+ row.label(text="Controls assigned to the element:")
+ else:
+ row.label(text="No controls assigned to the flow element")
+ row.operator("bim.assign_unassign_flow_control", text="", icon="ADD").assign = True
+ if controls:
+ for control_data in controls:
+ control, control_obj_name = control_data
+ display_element(control.id(), element.id(), control_obj_name)
+ else:
+ flow_element, flow_element_obj_name = flow_controls_data["flow_element"]
+ row = self.layout.row(align=True)
+ if flow_element:
+ row.label(text="Flow element controlled by the flow control:")
+ display_element(element.id(), flow_element.id(), flow_element_obj_name)
+ else:
+ row.label(text="No flow element controlled by the flow control")
+ row.operator("bim.assign_unassign_flow_control", text="", icon="ADD").assign = True
+
+
+class BIM_PT_zones(Panel):
+ bl_label = "Zones"
+ bl_idname = "BIM_PT_zones"
+ bl_options = {"HIDE_HEADER"}
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_parent_id = "BIM_PT_tab_zones"
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Ifc.get()
+
+ def draw(self, context):
+ if not ZonesData.is_loaded:
+ ZonesData.load()
+ self.props = context.scene.BIMZoneProperties
+
+ row = self.layout.row(align=True)
+ row.label(text="{} Zones Found".format(ZonesData.data["total_zones"]), icon="SEQ_STRIP_META")
+ if not self.props.is_loaded:
+ row.operator("bim.load_zones", text="", icon="IMPORT")
+ return
+
+ row.operator("bim.add_zone", text="", icon="ADD")
+ row.operator("bim.unload_zones", text="", icon="CANCEL")
+
+ if self.props.zones and self.props.active_zone_index < len(self.props.zones):
+ row = self.layout.row(align=True)
+ ifc_definition_id = self.props.zones[self.props.active_zone_index].ifc_definition_id
+ row.operator("bim.enable_editing_zone", text="Edit Zone", icon="GREASEPENCIL").zone = ifc_definition_id
+ row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF").system = ifc_definition_id
+ row.operator("bim.assign_system", text="", icon="KEYFRAME_HLT").system = ifc_definition_id
+ row.operator("bim.unassign_system", text="", icon="KEYFRAME").system = ifc_definition_id
+ row.operator("bim.remove_zone", text="", icon="X").zone = ifc_definition_id
+
+ self.layout.template_list("BIM_UL_zones", "", self.props, "zones", self.props, "active_zone_index")
+
+ if self.props.is_editing:
+ blenderbim.bim.helper.draw_attributes(self.props.attributes, self.layout)
+ row = self.layout.row(align=True)
+ row.operator("bim.edit_zone", icon="CHECKMARK")
+ row.operator("bim.disable_editing_zone", icon="CANCEL", text="")
+
+
+class BIM_PT_active_object_zones(Panel):
+ bl_label = "Active Object Zones"
+ bl_idname = "BIM_PT_active_object_zones"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_parent_id = "BIM_PT_tab_zones"
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Ifc.get() and context.active_object and tool.Ifc.get_entity(context.active_object)
+
+ def draw(self, context):
+ if not ActiveObjectZonesData.is_loaded:
+ ActiveObjectZonesData.load()
+ self.props = context.scene.BIMZoneProperties
+
+ for zone in ActiveObjectZonesData.data["zones"]:
+ row = self.layout.row()
+ row.label(text=zone, icon="SEQ_STRIP_META")
+
+ if not ActiveObjectZonesData.data["zones"]:
+ row = self.layout.row()
+ row.label(text="Active Object Has No Zones")
+
+
class BIM_UL_systems(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
- system_icons = {
- "IfcSystem": "EXTERNAL_DRIVE",
- "IfcDistributionSystem": "NETWORK_DRIVE",
- "IfcDistributionCircuit": "DRIVER",
- "IfcBuildingSystem": "MOD_BUILD",
- "IfcBuiltSystem": "MOD_BUILD",
- "IfcZone": "CUBE",
- }
if item:
row = layout.row(align=True)
- row.label(text=item.name, icon=system_icons[item.ifc_class])
+ row.label(text=item.name, icon=SYSTEM_ICONS[item.ifc_class])
system_id = item.ifc_definition_id
- if context.scene.BIMSystemProperties.active_system_id == system_id:
+ row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id
+ if context.scene.BIMSystemProperties.edited_system_id == system_id:
op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
op.system = system_id
row.operator("bim.edit_system", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_system", text="", icon="CANCEL")
- elif context.scene.BIMSystemProperties.active_system_id:
+ elif context.scene.BIMSystemProperties.edited_system_id:
op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
op.system = system_id
op = row.operator("bim.remove_system", text="", icon="X")
@@ -327,17 +435,8 @@ class BIM_UL_systems(UIList):
op.system = system_id
-class BIM_UL_object_systems(UIList):
+class BIM_UL_zones(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
- system_icons = {
- "IfcSystem": "EXTERNAL_DRIVE",
- "IfcDistributionSystem": "NETWORK_DRIVE",
- "IfcDistributionCircuit": "DRIVER",
- "IfcBuildingSystem": "MOD_BUILD",
- "IfcBuiltSystem": "MOD_BUILD",
- "IfcZone": "CUBE",
- }
if item:
row = layout.row(align=True)
- row.label(text=item.name, icon=system_icons[item.ifc_class])
- row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id
+ row.label(text=item.name)
diff --git a/src/blenderbim/blenderbim/bim/module/tester/operator.py b/src/blenderbim/blenderbim/bim/module/tester/operator.py
index 57ed89429d..010314e325 100644
--- a/src/blenderbim/blenderbim/bim/module/tester/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/tester/operator.py
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
-import os
+import os
import bpy
import time
import tempfile
@@ -72,8 +72,10 @@ class ExecuteIfcTester(bpy.types.Operator, tool.Ifc.Operator):
tool.Tester.report = report
props.specifications.clear()
for spec in report:
+ print(spec)
new_spec = props.specifications.add()
new_spec.name = spec["name"]
+ new_spec.description = spec["description"]
new_spec.status = spec["status"]
blenderbim.bim.handler.refresh_ui_data()
diff --git a/src/blenderbim/blenderbim/bim/module/tester/prop.py b/src/blenderbim/blenderbim/bim/module/tester/prop.py
index 7496d4ba44..ab4c175196 100644
--- a/src/blenderbim/blenderbim/bim/module/tester/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/tester/prop.py
@@ -37,6 +37,7 @@ def update_active_specification_index(self, context):
class Specification(PropertyGroup):
name: StringProperty(name="Name")
+ description: StringProperty(name="Description")
status: BoolProperty(default=False, name="Status")
diff --git a/src/blenderbim/blenderbim/bim/module/tester/ui.py b/src/blenderbim/blenderbim/bim/module/tester/ui.py
index 31c45bc888..b33cdd5aff 100644
--- a/src/blenderbim/blenderbim/bim/module/tester/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/tester/ui.py
@@ -107,8 +107,9 @@ class BIM_PT_tester(Panel):
class BIM_UL_tester_specifications(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
- row = layout.row(align=True)
+ row = layout.split(factor=0.3, align=True)
row.label(text=item.name, icon="CHECKMARK" if item.status else "CANCEL")
+ row.label(text=item.description)
class BIM_UL_tester_failed_entities(UIList):
diff --git a/src/blenderbim/blenderbim/bim/module/type/operator.py b/src/blenderbim/blenderbim/bim/module/type/operator.py
index 223ca0ce04..4f8720c782 100644
--- a/src/blenderbim/blenderbim/bim/module/type/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/type/operator.py
@@ -410,7 +410,7 @@ class AddType(bpy.types.Operator, tool.Ifc.Operator):
obj=obj,
predefined_type=predefined_type,
ifc_class="IfcStairFlightType",
- should_add_representation=True,
+ should_add_representation=False,
context=body,
)
tool.Blender.select_and_activate_single_object(context, obj)
diff --git a/src/blenderbim/blenderbim/bim/module/unit/ui.py b/src/blenderbim/blenderbim/bim/module/unit/ui.py
index 19d45eb825..86cf184eab 100644
--- a/src/blenderbim/blenderbim/bim/module/unit/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/unit/ui.py
@@ -30,7 +30,7 @@ class BIM_PT_units(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
- bl_parent_id = "BIM_PT_project_setup"
+ bl_parent_id = "BIM_PT_tab_geometry"
@classmethod
def poll(cls, context):
diff --git a/src/blenderbim/blenderbim/bim/module/void/__init__.py b/src/blenderbim/blenderbim/bim/module/void/__init__.py
index 0d1bdfcad2..30bdd5c9b9 100644
--- a/src/blenderbim/blenderbim/bim/module/void/__init__.py
+++ b/src/blenderbim/blenderbim/bim/module/void/__init__.py
@@ -25,6 +25,7 @@ classes = (
operator.RemoveFilling,
operator.RemoveOpening,
operator.SelectDecomposition,
+ operator.BooleansMarkAsManual,
prop.VoidProperties,
ui.BIM_PT_voids,
ui.BIM_PT_booleans,
diff --git a/src/blenderbim/blenderbim/bim/module/void/data.py b/src/blenderbim/blenderbim/bim/module/void/data.py
index 8fa4b3f1fc..24b74b8a9a 100644
--- a/src/blenderbim/blenderbim/bim/module/void/data.py
+++ b/src/blenderbim/blenderbim/bim/module/void/data.py
@@ -67,32 +67,39 @@ class VoidsData:
return results
-
class BooleansData:
data = {}
is_loaded = False
@classmethod
def load(cls):
- cls.data = {"total_booleans": cls.total_booleans()}
+ cls.data = {}
+ cls.data["total_booleans"] = cls.booleans()
+ cls.data["manual_booleans"] = cls.manual_booleans()
cls.is_loaded = True
@classmethod
- def total_booleans(cls):
+ def booleans(cls):
obj = bpy.context.active_object
if (
not obj.data
or not hasattr(obj.data, "BIMMeshProperties")
or not obj.data.BIMMeshProperties.ifc_definition_id
):
- return 0
+ return []
+
representation = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
- total_booleans = 0
- for item in representation.Items:
- while True:
- if item.is_a("IfcBooleanResult"):
- total_booleans += 1
- item = item.FirstOperand
- else:
- break
- return total_booleans
+ return tool.Model.get_booleans(representation=representation)
+
+ @classmethod
+ def manual_booleans(cls):
+ obj = bpy.context.active_object
+ if (
+ not obj.data
+ or not hasattr(obj.data, "BIMMeshProperties")
+ or not obj.data.BIMMeshProperties.ifc_definition_id
+ ):
+ return []
+
+ representation = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
+ return tool.Model.get_manual_booleans(tool.Ifc.get_entity(obj), representation=representation)
diff --git a/src/blenderbim/blenderbim/bim/module/void/operator.py b/src/blenderbim/blenderbim/bim/module/void/operator.py
index 78b9c619f7..d7b2e37504 100644
--- a/src/blenderbim/blenderbim/bim/module/void/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/void/operator.py
@@ -137,7 +137,7 @@ class RemoveOpening(bpy.types.Operator, tool.Ifc.Operator):
if opening_obj:
opening_obj.name = "/".join(opening_obj.name.split("/")[1:])
- IfcStore.unlink_element(obj=opening_obj)
+ tool.Ifc.unlink(obj=opening_obj)
ifcopenshell.api.run("void.remove_opening", tool.Ifc.get(), opening=opening)
@@ -218,3 +218,42 @@ class SelectDecomposition(bpy.types.Operator):
if subobj:
subobj.select_set(True)
return {"FINISHED"}
+
+
+class BooleansMarkAsManual(bpy.types.Operator):
+ bl_idname = "bim.booleans_mark_as_manual"
+ bl_label = "Mark Booleans as Manual"
+ bl_options = {"REGISTER", "UNDO"}
+ bl_description = (
+ "\nMark all booleans in object's current representations as manual.\n"
+ "Manual booleans will be preserved until they are removed explicitly"
+ )
+ mark_as_manual: bpy.props.BoolProperty(name="Mark as Manual", default=True)
+
+ @classmethod
+ def poll(cls, context):
+ obj = context.active_object
+ if (
+ obj
+ and tool.Ifc.get_entity(obj)
+ and hasattr(obj.data, "BIMMeshProperties")
+ and obj.data.BIMMeshProperties.ifc_definition_id
+ ):
+ return True
+ cls.poll_message_set("Need to select IFC element with representation")
+ return False
+
+ def execute(self, context):
+ obj = context.active_object
+ element = tool.Ifc.get_entity(obj)
+ representation = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
+ booleans = tool.Model.get_booleans(representation=representation)
+
+ if self.mark_as_manual:
+ tool.Model.mark_manual_booleans(element, booleans)
+ else:
+ tool.Model.unmark_manual_booleans(element, booleans)
+
+ self.report({"INFO"}, f"{len(booleans)} were marked as {'manual' if self.mark_as_manual else 'automatic'}")
+ blenderbim.bim.handler.refresh_ui_data()
+ return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/bim/module/void/ui.py b/src/blenderbim/blenderbim/bim/module/void/ui.py
index de0b978650..805dd31e24 100644
--- a/src/blenderbim/blenderbim/bim/module/void/ui.py
+++ b/src/blenderbim/blenderbim/bim/module/void/ui.py
@@ -111,21 +111,28 @@ class BIM_PT_booleans(Panel):
if context.active_object.data.BIMMeshProperties.ifc_definition_id:
row = layout.row(align=True)
- row.label(text=f"{BooleansData.data['total_booleans']} Booleans Found")
- row.operator("bim.add_boolean", text="Apply Boolean", icon="ADD")
+ total_booleans = BooleansData.data["total_booleans"]
+ manual_booleans = BooleansData.data["manual_booleans"]
+ row.label(text=f"{len(total_booleans)} Booleans Found ({len(manual_booleans)} Manual)")
+ row.operator("bim.add_boolean", text="", icon="ADD")
show_boolean_button = row.row(align=True)
show_boolean_button.operator("bim.show_booleans", text="", icon="HIDE_OFF")
- show_boolean_button.enabled = BooleansData.data["total_booleans"] > 0
+ show_boolean_button.enabled = len(total_booleans) > 0
row.operator("bim.hide_booleans", text="", icon="HIDE_ON")
+ booleans_are_manual = len(manual_booleans) == len(total_booleans)
+ op = row.operator(
+ "bim.booleans_mark_as_manual", text="", icon="PINNED" if booleans_are_manual else "UNPINNED"
+ )
+ op.mark_as_manual = not booleans_are_manual
+
elif context.active_object.data.BIMMeshProperties.ifc_boolean_id:
upsteam_obj = context.active_object.data.BIMMeshProperties.obj
upstream_obj_ifc_id = upsteam_obj.BIMObjectProperties.ifc_definition_id
row = layout.row(align=True)
- row.label(text="Used as a boolean operand with:")
- row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = upstream_obj_ifc_id
row.label(text=upsteam_obj.name)
+ row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = upstream_obj_ifc_id
row = layout.row()
row.operator("bim.remove_booleans", text="Remove Boolean", icon="X")
diff --git a/src/blenderbim/blenderbim/bim/operator.py b/src/blenderbim/blenderbim/bim/operator.py
index 7b491e58be..8937205a9a 100644
--- a/src/blenderbim/blenderbim/bim/operator.py
+++ b/src/blenderbim/blenderbim/bim/operator.py
@@ -237,7 +237,7 @@ class FileAssociate(bpy.types.Operator):
# tried to do the regitsry change from powershell/cmd - but even admin rights are not enough
# this is why we're using .reg
reg_change_path = os.path.join(src_dir, "windows_bbim_association.reg")
- subprocess.run(["cmd", "/c", reg_change_path])
+ subprocess.run(["cmd", "/c", "call", reg_change_path])
ps_script_path = os.path.join(src_dir, "windows_bbim_association.ps1")
# NOTE: call powershell with RunAs to get admin rights from user
@@ -816,6 +816,10 @@ def update_enum_property_search_prop(self, context):
if prop.name == self.dummy_name:
setattr(context.data, self.prop_name, self.collection_identifiers[i].name)
predefined_type = self.collection_predefined_types[i].name
+ if self.first_launch:
+ self.first_launch = False
+ else:
+ context.window.screen = context.window.screen
if predefined_type:
try:
setattr(context.data, "ifc_predefined_type", predefined_type)
@@ -828,6 +832,7 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
bl_idname = "bim.enum_property_search"
bl_label = "Search For Property"
bl_options = {"REGISTER", "UNDO"}
+ first_launch: bpy.props.BoolProperty(default=True, options={"SKIP_SAVE"})
dummy_name: bpy.props.StringProperty(name="Property", update=update_enum_property_search_prop)
collection_names: bpy.props.CollectionProperty(type=StrProperty)
collection_identifiers: bpy.props.CollectionProperty(type=StrProperty)
diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py
index d1dbc3445c..c9bb9c7a98 100644
--- a/src/blenderbim/blenderbim/bim/prop.py
+++ b/src/blenderbim/blenderbim/bim/prop.py
@@ -174,6 +174,18 @@ def update_attribute_value(self, context):
self.is_null = False
+def update_is_null(self, context):
+ if not self.is_null:
+ return
+ self.string_value = ""
+ self.int_value = 0
+ self.float_value = 0
+ self.length_value = 0
+ self.bool_value = False
+ if self.is_null is not True:
+ self.is_null = True
+
+
def set_int_value(self, new_value):
set_numerical_value(self, "int_value", new_value)
@@ -240,7 +252,7 @@ class Attribute(PropertyGroup):
enum_items: StringProperty(name="Value")
enum_descriptions: CollectionProperty(type=StrProperty)
enum_value: EnumProperty(items=get_attribute_enum_values, name="Value", update=update_attribute_value)
- is_null: BoolProperty(name="Is Null")
+ is_null: BoolProperty(name="Is Null", update=update_is_null)
is_optional: BoolProperty(name="Is Optional")
is_uri: BoolProperty(name="Is Uri", default=False)
is_selected: BoolProperty(name="Is Selected", default=False)
diff --git a/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc b/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc
new file mode 100644
index 0000000000..fed1622e8f
--- /dev/null
+++ b/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc
@@ -0,0 +1,17995 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2023-10-30T09:25:24',(),(),'IfcOpenShell v0.7.0-c35be50c8','IfcOpenShell v0.7.0-c35be50c8','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCCLASSIFICATION('RIBA Enterprises Ltd','July 2023','2023-07-01','Uniclass','Uniclass is a unified classification system made up of a set of tables that can be used by different parts of the industry in various ways.','https://uniclass.thenbs.com/',('_'));
+#2=IFCCLASSIFICATIONREFERENCE($,'Ac','Activities',#1,$,$);
+#3=IFCCLASSIFICATIONREFERENCE($,'Co','Complexes',#1,$,$);
+#4=IFCCLASSIFICATIONREFERENCE($,'En','Entities',#1,$,$);
+#5=IFCCLASSIFICATIONREFERENCE($,'SL','Spaces / Locations',#1,$,$);
+#6=IFCCLASSIFICATIONREFERENCE($,'EF','Elements / Functions',#1,$,$);
+#7=IFCCLASSIFICATIONREFERENCE($,'Ss','Systems',#1,$,$);
+#8=IFCCLASSIFICATIONREFERENCE($,'Pr','Products',#1,$,$);
+#9=IFCCLASSIFICATIONREFERENCE($,'TE','Tools and equipment',#1,$,$);
+#10=IFCCLASSIFICATIONREFERENCE($,'PM','Project management',#1,$,$);
+#11=IFCCLASSIFICATIONREFERENCE($,'FI','Form of information',#1,$,$);
+#12=IFCCLASSIFICATIONREFERENCE($,'Ro','Roles',#1,$,$);
+#13=IFCCLASSIFICATIONREFERENCE($,'Ma','Materials',#1,$,$);
+#14=IFCCLASSIFICATIONREFERENCE($,'PC','Properties and characteristics',#1,$,$);
+#15=IFCCLASSIFICATIONREFERENCE($,'Zz','CAD',#1,$,$);
+#16=IFCCLASSIFICATIONREFERENCE($,'Zz_10','Title sheet',#15,$,$);
+#17=IFCCLASSIFICATIONREFERENCE($,'Zz_10_20','Drawing frame',#16,$,$);
+#18=IFCCLASSIFICATIONREFERENCE($,'Zz_10_20_45','Logo',#17,$,$);
+#19=IFCCLASSIFICATIONREFERENCE($,'Zz_10_20_95','Viewports',#17,$,$);
+#20=IFCCLASSIFICATIONREFERENCE($,'Zz_10_40','Hold clouds and notation',#16,$,$);
+#21=IFCCLASSIFICATIONREFERENCE($,'Zz_10_70','Revisions',#16,$,$);
+#22=IFCCLASSIFICATIONREFERENCE($,'Zz_10_70_05','Annotation',#21,$,$);
+#23=IFCCLASSIFICATIONREFERENCE($,'Zz_10_70_10','Blocks and cells',#21,$,$);
+#24=IFCCLASSIFICATIONREFERENCE($,'Zz_10_70_20','Clouds and notations',#21,$,$);
+#25=IFCCLASSIFICATIONREFERENCE($,'Zz_10_80','Status stamps',#16,$,$);
+#26=IFCCLASSIFICATIONREFERENCE($,'Zz_20','Textual content',#15,$,$);
+#27=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10','Annotation',#26,$,$);
+#28=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_40','Keynotes',#27,$,$);
+#29=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_45','Labels',#27,$,$);
+#30=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_50','Leaders',#27,$,$);
+#31=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_55','Notes',#27,$,$);
+#32=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_70','Reference',#27,$,$);
+#33=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_85','Tags',#27,$,$);
+#34=IFCCLASSIFICATIONREFERENCE($,'Zz_20_10_90','Text',#27,$,$);
+#35=IFCCLASSIFICATIONREFERENCE($,'Zz_20_20','Dimensions',#26,$,$);
+#36=IFCCLASSIFICATIONREFERENCE($,'Zz_20_30','General masking',#26,$,$);
+#37=IFCCLASSIFICATIONREFERENCE($,'Zz_20_30_50','Masks',#36,$,$);
+#38=IFCCLASSIFICATIONREFERENCE($,'Zz_20_30_95','Wipeouts',#36,$,$);
+#39=IFCCLASSIFICATIONREFERENCE($,'Zz_20_40','Hatching',#26,$,$);
+#40=IFCCLASSIFICATIONREFERENCE($,'Zz_20_40_05','Area fill',#39,$,$);
+#41=IFCCLASSIFICATIONREFERENCE($,'Zz_20_40_35','Hatch boundaries',#39,$,$);
+#42=IFCCLASSIFICATIONREFERENCE($,'Zz_20_40_60','Pattern',#39,$,$);
+#43=IFCCLASSIFICATIONREFERENCE($,'Zz_20_40_80','Solid fill',#39,$,$);
+#44=IFCCLASSIFICATIONREFERENCE($,'Zz_20_70','Redlining',#26,$,$);
+#45=IFCCLASSIFICATIONREFERENCE($,'Zz_20_70_20','Comments',#44,$,$);
+#46=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80','Symbols',#26,$,$);
+#47=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80_10','Barscales',#46,$,$);
+#48=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80_15','Cross references',#46,$,$);
+#49=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80_40','Key plan',#46,$,$);
+#50=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80_50','Legends',#46,$,$);
+#51=IFCCLASSIFICATIONREFERENCE($,'Zz_20_80_55','North point',#46,$,$);
+#52=IFCCLASSIFICATIONREFERENCE($,'Zz_20_90','Title annotation',#26,$,$);
+#53=IFCCLASSIFICATIONREFERENCE($,'Zz_30','Insertions',#15,$,$);
+#54=IFCCLASSIFICATIONREFERENCE($,'Zz_30_20','Blocks and cells',#53,$,$);
+#55=IFCCLASSIFICATIONREFERENCE($,'Zz_30_30','External references',#53,$,$);
+#56=IFCCLASSIFICATIONREFERENCE($,'Zz_30_40','Images',#53,$,$);
+#57=IFCCLASSIFICATIONREFERENCE($,'Zz_30_60','Objects',#53,$,$);
+#58=IFCCLASSIFICATIONREFERENCE($,'Zz_30_90','Tables and schedules',#53,$,$);
+#59=IFCCLASSIFICATIONREFERENCE($,'Zz_35','Setting out',#15,$,$);
+#60=IFCCLASSIFICATIONREFERENCE($,'Zz_35_10','Alignments and super elevations',#59,$,$);
+#61=IFCCLASSIFICATIONREFERENCE($,'Zz_35_10_40','Horizontal alignment',#60,$,$);
+#62=IFCCLASSIFICATIONREFERENCE($,'Zz_35_10_80','Super elevation',#60,$,$);
+#63=IFCCLASSIFICATIONREFERENCE($,'Zz_35_10_90','Vertical alignment',#60,$,$);
+#64=IFCCLASSIFICATIONREFERENCE($,'Zz_35_20','Centrelines',#59,$,$);
+#65=IFCCLASSIFICATIONREFERENCE($,'Zz_35_30','Geospatial control points',#59,$,$);
+#66=IFCCLASSIFICATIONREFERENCE($,'Zz_35_40','Gridlines',#59,$,$);
+#67=IFCCLASSIFICATIONREFERENCE($,'Zz_35_40_20','Ceiling grid',#66,$,$);
+#68=IFCCLASSIFICATIONREFERENCE($,'Zz_35_40_80','Structural grid',#66,$,$);
+#69=IFCCLASSIFICATIONREFERENCE($,'Zz_35_60','Points',#59,$,$);
+#70=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80','Survey control points',#59,$,$);
+#71=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80_55','Bench mark',#70,$,$);
+#72=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80_60','Trigonometrical station',#70,$,$);
+#73=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80_80','Site bench mark',#70,$,$);
+#74=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80_85','Site survey control station',#70,$,$);
+#75=IFCCLASSIFICATIONREFERENCE($,'Zz_35_80_90','Temporary bench mark',#70,$,$);
+#76=IFCCLASSIFICATIONREFERENCE($,'Zz_40','Topography',#15,$,$);
+#77=IFCCLASSIFICATIONREFERENCE($,'Zz_40_15','Contours',#76,$,$);
+#78=IFCCLASSIFICATIONREFERENCE($,'Zz_40_15_50','Major contours',#77,$,$);
+#79=IFCCLASSIFICATIONREFERENCE($,'Zz_40_15_55','Minor contours',#77,$,$);
+#80=IFCCLASSIFICATIONREFERENCE($,'Zz_40_20','Cuttings and embankment indicators',#76,$,$);
+#81=IFCCLASSIFICATIONREFERENCE($,'Zz_40_50','Level indicators',#76,$,$);
+#82=IFCCLASSIFICATIONREFERENCE($,'Zz_50','Zones and boundaries',#15,$,$);
+#83=IFCCLASSIFICATIONREFERENCE($,'Zz_50_10','Boundaries',#82,$,$);
+#84=IFCCLASSIFICATIONREFERENCE($,'Zz_50_10_10','Blue line boundary',#83,$,$);
+#85=IFCCLASSIFICATIONREFERENCE($,'Zz_50_10_70','Red line boundary',#83,$,$);
+#86=IFCCLASSIFICATIONREFERENCE($,'Zz_50_50','Lots',#82,$,$);
+#87=IFCCLASSIFICATIONREFERENCE($,'Zz_50_60','Parcels',#82,$,$);
+#88=IFCCLASSIFICATIONREFERENCE($,'Zz_50_90','Volumes',#82,$,$);
+#89=IFCCLASSIFICATIONREFERENCE($,'Zz_50_95','Zones',#82,$,$);
+#90=IFCCLASSIFICATIONREFERENCE($,'Zz_60','Drawing symbols',#15,$,$);
+#91=IFCCLASSIFICATIONREFERENCE($,'Zz_60_20','Detail call ups',#90,$,$);
+#92=IFCCLASSIFICATIONREFERENCE($,'Zz_60_30','Fall indicators',#90,$,$);
+#93=IFCCLASSIFICATIONREFERENCE($,'Zz_60_40','Joint lines',#90,$,$);
+#94=IFCCLASSIFICATIONREFERENCE($,'Zz_60_40_15','Construction joints',#93,$,$);
+#95=IFCCLASSIFICATIONREFERENCE($,'Zz_60_40_20','Contraction joints',#93,$,$);
+#96=IFCCLASSIFICATIONREFERENCE($,'Zz_60_40_30','Expansion joints',#93,$,$);
+#97=IFCCLASSIFICATIONREFERENCE($,'Zz_60_45','Levels',#90,$,$);
+#98=IFCCLASSIFICATIONREFERENCE($,'Zz_60_45_20','Datum',#97,$,$);
+#99=IFCCLASSIFICATIONREFERENCE($,'Zz_60_45_60','Original ground level',#97,$,$);
+#100=IFCCLASSIFICATIONREFERENCE($,'Zz_60_45_70','Regrade ground level',#97,$,$);
+#101=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50','Markers',#90,$,$);
+#102=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_10','Break marks',#101,$,$);
+#103=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_20','Callout marks',#101,$,$);
+#104=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_30','Elevation marks',#101,$,$);
+#105=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_60','Plan',#101,$,$);
+#106=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_80','Section marks',#101,$,$);
+#107=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_85','Span direction markers',#101,$,$);
+#108=IFCCLASSIFICATIONREFERENCE($,'Zz_60_50_90','Void and opening markers',#101,$,$);
+#109=IFCCLASSIFICATIONREFERENCE($,'Zz_60_55','Match lines',#90,$,$);
+#110=IFCCLASSIFICATIONREFERENCE($,'Zz_70','Views',#15,$,$);
+#111=IFCCLASSIFICATIONREFERENCE($,'Zz_70_05','3D views',#110,$,$);
+#112=IFCCLASSIFICATIONREFERENCE($,'Zz_70_20','Details',#110,$,$);
+#113=IFCCLASSIFICATIONREFERENCE($,'Zz_70_30','Elevations',#110,$,$);
+#114=IFCCLASSIFICATIONREFERENCE($,'Zz_70_60','Plans',#110,$,$);
+#115=IFCCLASSIFICATIONREFERENCE($,'Zz_70_80','Sections',#110,$,$);
+#116=IFCCLASSIFICATIONREFERENCE($,'Zz_70_90','Visualizations',#110,$,$);
+#117=IFCCLASSIFICATIONREFERENCE($,'Zz_80','Presentation',#15,$,$);
+#118=IFCCLASSIFICATIONREFERENCE($,'Zz_80_30','Entourage',#117,$,$);
+#119=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45','Lines',#117,$,$);
+#120=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_10','Fine',#119,$,$);
+#121=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_20','Thin',#119,$,$);
+#122=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_30','Light',#119,$,$);
+#123=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_40','Medium',#119,$,$);
+#124=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_50','Heavy',#119,$,$);
+#125=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_60','Wide',#119,$,$);
+#126=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_70','Extra-wide',#119,$,$);
+#127=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_80','XX wide',#119,$,$);
+#128=IFCCLASSIFICATIONREFERENCE($,'Zz_80_45_90','XXX wide',#119,$,$);
+#129=IFCCLASSIFICATIONREFERENCE($,'Zz_80_60','People',#117,$,$);
+#130=IFCCLASSIFICATIONREFERENCE($,'Zz_80_85','Trees and planting',#117,$,$);
+#131=IFCCLASSIFICATIONREFERENCE($,'Zz_80_90','Vehicles',#117,$,$);
+#132=IFCCLASSIFICATIONREFERENCE($,'Zz_85','Generic 3D',#15,$,$);
+#133=IFCCLASSIFICATIONREFERENCE($,'Zz_85_05','3D solids',#132,$,$);
+#134=IFCCLASSIFICATIONREFERENCE($,'Zz_85_05_60','Paths',#133,$,$);
+#135=IFCCLASSIFICATIONREFERENCE($,'Zz_85_05_80','Solids',#133,$,$);
+#136=IFCCLASSIFICATIONREFERENCE($,'Zz_85_05_85','Solid voids',#133,$,$);
+#137=IFCCLASSIFICATIONREFERENCE($,'Zz_85_20','Concept',#132,$,$);
+#138=IFCCLASSIFICATIONREFERENCE($,'Zz_85_20_20','Concept massing',#137,$,$);
+#139=IFCCLASSIFICATIONREFERENCE($,'Zz_85_20_50','Mass group',#137,$,$);
+#140=IFCCLASSIFICATIONREFERENCE($,'Zz_85_20_55','Mass slice',#137,$,$);
+#141=IFCCLASSIFICATIONREFERENCE($,'Zz_90','Readme and plotting lines',#15,$,$);
+#142=IFCCLASSIFICATIONREFERENCE($,'Zz_90_20','Construction lines',#141,$,$);
+#143=IFCCLASSIFICATIONREFERENCE($,'Zz_90_30','External reference information',#141,$,$);
+#144=IFCCLASSIFICATIONREFERENCE($,'Zz_90_70','Readme',#141,$,$);
+#145=IFCCLASSIFICATIONREFERENCE($,'Ma_20','Combination inorganic/ organic materials',#13,$,$);
+#146=IFCCLASSIFICATIONREFERENCE($,'Ma_20_01','Adobe',#145,$,$);
+#147=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03','Aggregates',#145,$,$);
+#148=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_02','Air-cooled steel slag',#147,$,$);
+#149=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_04','All-in normal and heavyweight aggregates',#147,$,$);
+#150=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_06','Barytes aggregates',#147,$,$);
+#151=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_07','Base, bed and fill aggregates',#147,$,$);
+#152=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_07_03','Base, bed and fill all-in aggregates',#151,$,$);
+#153=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_07_15','Base, bed and fill coarse aggregates',#151,$,$);
+#154=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_07_30','Base, bed and fill fine aggregates',#151,$,$);
+#155=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_10','Blinding aggregates',#147,$,$);
+#156=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_10_15','Blinding coarse aggregates',#155,$,$);
+#157=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_10_30','Blinding fine aggregates',#155,$,$);
+#158=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_13','Clinker',#147,$,$);
+#159=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_15','Coarse aggregates',#147,$,$);
+#160=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_15_04','Armourstone coarse aggregates',#159,$,$);
+#161=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_15_34','Coarse general aggregates',#159,$,$);
+#162=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_15_47','Coarse lightweight aggregates for concrete and mortar',#159,$,$);
+#163=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_15_57','Coarse normal and heavyweight aggregates',#159,$,$);
+#164=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_19','Crushed stone aggregates',#147,$,$);
+#165=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_19_56','Natural stone aggregates',#164,$,$);
+#166=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_22','Decorative aggregates',#147,$,$);
+#167=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_22_08','Bonded surfacing decorative aggregates',#166,$,$);
+#168=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_22_47','Loose surfacing decorative aggregates',#166,$,$);
+#169=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28','Expanded aggregates',#147,$,$);
+#170=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28_15','Expanded clay lightweight aggregates',#169,$,$);
+#171=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28_34','Expanded glass aggregates',#169,$,$);
+#172=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28_77','Expanded slag aggregates',#169,$,$);
+#173=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28_79','Expanded slate aggregates',#169,$,$);
+#174=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_28_86','Synthetic foam granules',#169,$,$);
+#175=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30','Fine aggregates',#147,$,$);
+#176=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_29','Fine general aggregates',#175,$,$);
+#177=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_30','Fine lightweight aggregates for concrete and mortar',#175,$,$);
+#178=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_31','Fine normal and heavyweight aggregates',#175,$,$);
+#179=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_44','Jointing fine aggregates',#175,$,$);
+#180=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_46','Laying course fine aggregates',#175,$,$);
+#181=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_48','Limestone fines',#175,$,$);
+#182=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_30_86','Surface treatment fine aggregates',#175,$,$);
+#183=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_35','Granular cork aggregates',#147,$,$);
+#184=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_42','Iron ore aggregates',#147,$,$);
+#185=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_47','Lightweight general aggregates',#147,$,$);
+#186=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_54','Mortar aggregates',#147,$,$);
+#187=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_54_15','Mortar coarse aggregates',#186,$,$);
+#188=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_54_30','Mortar fine aggregates',#186,$,$);
+#189=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_56','Natural stone dusts',#147,$,$);
+#190=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_56_51','Marble dust',#189,$,$);
+#191=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_59','Oyster shells',#147,$,$);
+#192=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_63','Perlite aggregates',#147,$,$);
+#193=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_64','Permeable laying course aggregates',#147,$,$);
+#194=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_71','Recycled aggregates',#147,$,$);
+#195=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_71_47','Recycled lightweight aggregates',#194,$,$);
+#196=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_71_73','Recycled rubber granules',#194,$,$);
+#197=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_77','Scrap iron aggregates',#147,$,$);
+#198=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_80','Single-sized aggregates',#147,$,$);
+#199=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_85','Surface dressing aggregates',#147,$,$);
+#200=IFCCLASSIFICATIONREFERENCE($,'Ma_20_03_94','Vermiculite aggregates',#147,$,$);
+#201=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13','Ceramic',#145,$,$);
+#202=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13_18','Coade stone',#201,$,$);
+#203=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13_26','Earthenware',#201,$,$);
+#204=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13_27','Encaustic',#201,$,$);
+#205=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13_65','Porcelain',#201,$,$);
+#206=IFCCLASSIFICATIONREFERENCE($,'Ma_20_13_88','Terracotta',#201,$,$);
+#207=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16','Clays',#145,$,$);
+#208=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_07','Bentonite clays',#207,$,$);
+#209=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_07_12','Calcium bentonite',#208,$,$);
+#210=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_07_66','Potassium bentonite',#208,$,$);
+#211=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_07_83','Sodium bentonite',#208,$,$);
+#212=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_30','Fire clay',#207,$,$);
+#213=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_32','Fuller''s earth',#207,$,$);
+#214=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_35','Grog',#207,$,$);
+#215=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_45','Kaolin',#207,$,$);
+#216=IFCCLASSIFICATIONREFERENCE($,'Ma_20_16_66','Pozzolana',#207,$,$);
+#217=IFCCLASSIFICATIONREFERENCE($,'Ma_20_18','Cob',#145,$,$);
+#218=IFCCLASSIFICATIONREFERENCE($,'Ma_20_18_98','Wychert',#217,$,$);
+#219=IFCCLASSIFICATIONREFERENCE($,'Ma_20_21','Daub',#145,$,$);
+#220=IFCCLASSIFICATIONREFERENCE($,'Ma_20_64','Pis\X2\00E9\X0\',#145,$,$);
+#221=IFCCLASSIFICATIONREFERENCE($,'Ma_20_81','Soil',#145,$,$);
+#222=IFCCLASSIFICATIONREFERENCE($,'Ma_20_81_16','Cohesive soil',#221,$,$);
+#223=IFCCLASSIFICATIONREFERENCE($,'Ma_20_81_16_80','Silt',#222,$,$);
+#224=IFCCLASSIFICATIONREFERENCE($,'Ma_20_81_35','Granular soil',#221,$,$);
+#225=IFCCLASSIFICATIONREFERENCE($,'Ma_20_81_35_35','Gravel',#224,$,$);
+#226=IFCCLASSIFICATIONREFERENCE($,'Ma_40','Inorganic materials',#13,$,$);
+#227=IFCCLASSIFICATIONREFERENCE($,'Ma_40_04','Asbestos',#226,$,$);
+#228=IFCCLASSIFICATIONREFERENCE($,'Ma_40_12','Carbon',#226,$,$);
+#229=IFCCLASSIFICATIONREFERENCE($,'Ma_40_12_35','Graphite',#228,$,$);
+#230=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15','Cement',#226,$,$);
+#231=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_01','Accelerated cement',#230,$,$);
+#232=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_04','Asphalt cement',#230,$,$);
+#233=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_12','Calcium aluminate cement',#230,$,$);
+#234=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_28','Expanding cement',#230,$,$);
+#235=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_33','Glass-reinforced cement',#230,$,$);
+#236=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_34','Granite-powder cement',#230,$,$);
+#237=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_35','Gypsum cement',#230,$,$);
+#238=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48','Lime',#230,$,$);
+#239=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48_31','Formulated lime',#238,$,$);
+#240=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48_38','Hydrated lime',#238,$,$);
+#241=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48_39','Hydraulic lime',#238,$,$);
+#242=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48_56','Natural hydraulic lime',#238,$,$);
+#243=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_48_57','Non-hydraulic lime',#238,$,$);
+#244=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_50','Magnesia cement',#230,$,$);
+#245=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_52','Masonry cement',#230,$,$);
+#246=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_56','Natural cement',#230,$,$);
+#247=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_57','Neat cement',#230,$,$);
+#248=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_59','Oxychloric cement',#230,$,$);
+#249=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_65','Polymer-impregnated cement',#230,$,$);
+#250=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_66','Portland cement',#230,$,$);
+#251=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_66_85','Sulfate-resisting Portland cement',#250,$,$);
+#252=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_67','Pozzolan cement',#230,$,$);
+#253=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_79','Slag cement',#230,$,$);
+#254=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_81','Soil cement',#230,$,$);
+#255=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_85','Sulfur cement',#230,$,$);
+#256=IFCCLASSIFICATIONREFERENCE($,'Ma_40_15_87','Tabby',#230,$,$);
+#257=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16','Cement replacement materials',#226,$,$);
+#258=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_17','Condensed silica fume',#257,$,$);
+#259=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_35','Granulated blast-furnace slag (GBS)',#257,$,$);
+#260=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_35_35','Ground granulated blast-furnace slag (GGBS)',#259,$,$);
+#261=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_35_61','Partially ground granulated blast-furnace slag (PGGBS)',#259,$,$);
+#262=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_67','Pulverized fuel ash',#257,$,$);
+#263=IFCCLASSIFICATIONREFERENCE($,'Ma_40_16_67_80','Sintered pulverized fuel ash',#262,$,$);
+#264=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19','Concrete',#226,$,$);
+#265=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_01','Air-entrained concrete',#264,$,$);
+#266=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_04','Asphalt concrete',#264,$,$);
+#267=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_14','Cement-bound granular mixtures',#264,$,$);
+#268=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_16','Cinder concrete',#264,$,$);
+#269=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_22','Designated concrete',#264,$,$);
+#270=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_23','Designed concretes',#264,$,$);
+#271=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_29','Fine bedding concrete',#264,$,$);
+#272=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_32','Foamed concrete',#264,$,$);
+#273=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_36','Heat-resistant concrete',#264,$,$);
+#274=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_37','High-performance concrete',#264,$,$);
+#275=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_37_92','Ultra-high-performance concrete',#274,$,$);
+#276=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_39','Hydraulic road binder bound mixtures',#264,$,$);
+#277=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_41','In situ concrete',#264,$,$);
+#278=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_42','Insulating concrete',#264,$,$);
+#279=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_42_47','Lightweight insulating concrete',#278,$,$);
+#280=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_47','Lime concrete',#264,$,$);
+#281=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_56','No-fines concrete',#264,$,$);
+#282=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_57','Normal-class concrete',#264,$,$);
+#283=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_58','Normal-weight concrete',#264,$,$);
+#284=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_61','Polymer-impregnated concrete',#264,$,$);
+#285=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_63','Post-tensioned concrete',#264,$,$);
+#286=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_65','Pre-blended concrete',#264,$,$);
+#287=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_66','Precast concrete',#264,$,$);
+#288=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_66_65','Precast architectural concrete',#287,$,$);
+#289=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_66_66','Precast structural concrete',#287,$,$);
+#290=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_66_67','Precast structural post-tensioned concrete',#287,$,$);
+#291=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_67','Prestressed concrete',#264,$,$);
+#292=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_68','Proprietary concrete',#264,$,$);
+#293=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_70','Ready-mixed concrete',#264,$,$);
+#294=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71','Reinforced concrete',#264,$,$);
+#295=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71_28','Expansive concrete',#294,$,$);
+#296=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71_34','Glass fibre-reinforced concrete',#294,$,$);
+#297=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71_37','High-strength concrete',#294,$,$);
+#298=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71_66','Prescribed concrete',#294,$,$);
+#299=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_71_84','Standardized prescribed concrete',#294,$,$);
+#300=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_72','Resin concrete',#264,$,$);
+#301=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_73','Roman concrete',#264,$,$);
+#302=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_74','Rubble concrete',#264,$,$);
+#303=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_75','Self-compacting concrete',#264,$,$);
+#304=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_76','Self-consolidating concrete',#264,$,$);
+#305=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_78','Slag bound mixtures',#264,$,$);
+#306=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_80','Small-area repair concrete',#264,$,$);
+#307=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_82','Special-class concrete',#264,$,$);
+#308=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_82_82','Special-class prescription concrete',#307,$,$);
+#309=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_82_83','Special-class performance concrete',#307,$,$);
+#310=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_84','Sprayed concrete',#264,$,$);
+#311=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_84_84','Steel-reinforced dry process sprayed concrete',#310,$,$);
+#312=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_86','Sulfate-resistant concrete',#264,$,$);
+#313=IFCCLASSIFICATIONREFERENCE($,'Ma_40_19_93','Underwater concrete',#264,$,$);
+#314=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33','Gases',#226,$,$);
+#315=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_03','Ammonia',#314,$,$);
+#316=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_12','Carbon dioxide (CO2)',#314,$,$);
+#317=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_13','Carbon monoxide (CO)',#314,$,$);
+#318=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_15','Chlorine',#314,$,$);
+#319=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_17','Compressed air',#314,$,$);
+#320=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_37','Helium',#314,$,$);
+#321=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_39','Hydrogen',#314,$,$);
+#322=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_56','Nitrogen',#314,$,$);
+#323=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_57','Nitrous oxide (N2O)',#314,$,$);
+#324=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_58','Oxygen',#314,$,$);
+#325=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_59','Ozone',#314,$,$);
+#326=IFCCLASSIFICATIONREFERENCE($,'Ma_40_33_71','Radon',#314,$,$);
+#327=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35','Glass',#226,$,$);
+#328=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_04','Architectural glass',#327,$,$);
+#329=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_04_30','Figured glass',#328,$,$);
+#330=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_04_82','Spandrel glass',#328,$,$);
+#331=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_04_85','Structural glass',#328,$,$);
+#332=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_07','Blown glass',#327,$,$);
+#333=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_09','Borosilicate glass',#327,$,$);
+#334=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_17','Coloured glass',#327,$,$);
+#335=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_22','Dichromatic glass',#327,$,$);
+#336=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_29','Fibreglass',#327,$,$);
+#337=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_31','Float glass',#327,$,$);
+#338=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_33','Glare-reducing glass',#327,$,$);
+#339=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_34','Glass wool',#327,$,$);
+#340=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_35','Green glass',#327,$,$);
+#341=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_37','Heat-absorbing glass',#327,$,$);
+#342=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_38','Heat-resisting glass',#327,$,$);
+#343=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_39','Heat-strengthened glass',#327,$,$);
+#344=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_41','Insulating glass',#327,$,$);
+#345=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_46','Lead glass',#327,$,$);
+#346=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_46_19','Crystal glass',#345,$,$);
+#347=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_46_30','Flint glass',#345,$,$);
+#348=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_48','Lime glass',#327,$,$);
+#349=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_53','Mosaic glass',#327,$,$);
+#350=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_57','Non-reflective glass',#327,$,$);
+#351=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_59','Opal glass',#327,$,$);
+#352=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_61','Patterned glass',#327,$,$);
+#353=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_63','Photosensitive glass',#327,$,$);
+#354=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_65','Plate glass',#327,$,$);
+#355=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_67','Prismatic glass',#327,$,$);
+#356=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_71','Reflective glass',#327,$,$);
+#357=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_73','Rolled glass',#327,$,$);
+#358=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_75','Safety glass',#327,$,$);
+#359=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_75_03','Anti-bandit glass',#358,$,$);
+#360=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_75_10','Bullet-resistant glass',#358,$,$);
+#361=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_75_97','Wired glass',#358,$,$);
+#362=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_78','Sheet glass',#327,$,$);
+#363=IFCCLASSIFICATIONREFERENCE($,'Ma_40_35_99','X-ray protective glass',#327,$,$);
+#364=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52','Metal',#226,$,$);
+#365=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_03','Aluminium',#364,$,$);
+#366=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_08','Brass',#364,$,$);
+#367=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_09','Bronze',#364,$,$);
+#368=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_18','Copper',#364,$,$);
+#369=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_34','Gold',#364,$,$);
+#370=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_42','Iron',#364,$,$);
+#371=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_42_11','Cast iron',#370,$,$);
+#372=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_42_83','Spheroidal graphite iron',#370,$,$);
+#373=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_42_98','Wrought iron',#370,$,$);
+#374=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_47','Lead',#364,$,$);
+#375=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_79','Silver',#364,$,$);
+#376=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83','Steel',#364,$,$);
+#377=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_08','Blister steel',#376,$,$);
+#378=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_12','Carbon steel',#376,$,$);
+#379=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_16','Chrome steel',#376,$,$);
+#380=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_33','Galvanized steel',#376,$,$);
+#381=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_36','High-carbon steel',#376,$,$);
+#382=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_37','High-strength low-alloy steel',#376,$,$);
+#383=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_47','Low-carbon steel',#376,$,$);
+#384=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_51','Manganese steel',#376,$,$);
+#385=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_52','Medium-carbon steel',#376,$,$);
+#386=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_56','Nickel steel',#376,$,$);
+#387=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_82','Stainless steel',#376,$,$);
+#388=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_83','Steel-aluminium alloy',#376,$,$);
+#389=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_85','Structural steel',#376,$,$);
+#390=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_87','Terne-coated steel',#376,$,$);
+#391=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_89','Titanium steel',#376,$,$);
+#392=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_83_96','Weathering steel',#376,$,$);
+#393=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_88','Tin',#364,$,$);
+#394=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_89','Titanium',#364,$,$);
+#395=IFCCLASSIFICATIONREFERENCE($,'Ma_40_52_99','Zinc',#364,$,$);
+#396=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84','Stone',#226,$,$);
+#397=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_41','Igneous rocks',#396,$,$);
+#398=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_41_06','Basalt',#397,$,$);
+#399=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_41_24','Dolerite',#397,$,$);
+#400=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_41_34','Granite',#397,$,$);
+#401=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_41_91','Tuff',#397,$,$);
+#402=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51','Metamorphic rocks',#396,$,$);
+#403=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51_03','Anthracite',#402,$,$);
+#404=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51_34','Gneiss',#402,$,$);
+#405=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51_51','Marble',#402,$,$);
+#406=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51_69','Quartzite',#402,$,$);
+#407=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_51_80','Slate',#402,$,$);
+#408=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_53','Mineral wool',#396,$,$);
+#409=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79','Sedimentary rocks',#396,$,$);
+#410=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_03','Alabaster',#409,$,$);
+#411=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_15','Chert',#409,$,$);
+#412=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_17','Coal',#409,$,$);
+#413=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_24','Dolomite',#409,$,$);
+#414=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_30','Flint',#409,$,$);
+#415=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_34','Gritstone',#409,$,$);
+#416=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_47','Lignite',#409,$,$);
+#417=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_48','Limestone',#409,$,$);
+#418=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_51','Marl',#409,$,$);
+#419=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_76','Sandstone',#409,$,$);
+#420=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_80','Shale',#409,$,$);
+#421=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_89','Travertine',#409,$,$);
+#422=IFCCLASSIFICATIONREFERENCE($,'Ma_40_84_79_91','Tufa',#409,$,$);
+#423=IFCCLASSIFICATIONREFERENCE($,'Ma_40_86','Synthetic minerals',#226,$,$);
+#424=IFCCLASSIFICATIONREFERENCE($,'Ma_40_86_86','Silicon carbide',#423,$,$);
+#425=IFCCLASSIFICATIONREFERENCE($,'Ma_60','Organic materials',#13,$,$);
+#426=IFCCLASSIFICATIONREFERENCE($,'Ma_60_02','Animal-based material',#425,$,$);
+#427=IFCCLASSIFICATIONREFERENCE($,'Ma_60_02_09','Bone',#426,$,$);
+#428=IFCCLASSIFICATIONREFERENCE($,'Ma_60_02_47','Leather',#426,$,$);
+#429=IFCCLASSIFICATIONREFERENCE($,'Ma_60_02_80','Shell',#426,$,$);
+#430=IFCCLASSIFICATIONREFERENCE($,'Ma_60_02_98','Wool',#426,$,$);
+#431=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08','Bituminous material',#425,$,$);
+#432=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_52','Modified bituminous material',#431,$,$);
+#433=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_52_15','Coal tar',#432,$,$);
+#434=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_56','Natural bituminous material',#431,$,$);
+#435=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_56_04','Asphalt',#434,$,$);
+#436=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_56_05','Asphaltite',#434,$,$);
+#437=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_56_08','Bitumen',#434,$,$);
+#438=IFCCLASSIFICATIONREFERENCE($,'Ma_60_08_56_73','Rock asphalt',#434,$,$);
+#439=IFCCLASSIFICATIONREFERENCE($,'Ma_60_15','Chlorofluorocarbons',#425,$,$);
+#440=IFCCLASSIFICATIONREFERENCE($,'Ma_60_15_36','Halon',#439,$,$);
+#441=IFCCLASSIFICATIONREFERENCE($,'Ma_60_58','Oil',#425,$,$);
+#442=IFCCLASSIFICATIONREFERENCE($,'Ma_60_58_19','Crude oil',#441,$,$);
+#443=IFCCLASSIFICATIONREFERENCE($,'Ma_60_58_64','Petroleum',#441,$,$);
+#444=IFCCLASSIFICATIONREFERENCE($,'Ma_60_58_64_47','Liquefied petroleum gas',#443,$,$);
+#445=IFCCLASSIFICATIONREFERENCE($,'Ma_60_58_64_64','Petrol',#443,$,$);
+#446=IFCCLASSIFICATIONREFERENCE($,'Ma_60_61','Paper',#425,$,$);
+#447=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64','Plant-based material',#425,$,$);
+#448=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_06','Bamboo',#447,$,$);
+#449=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_18','Cork',#447,$,$);
+#450=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_35','Grass',#447,$,$);
+#451=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_62','Peat',#447,$,$);
+#452=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_72','Reed',#447,$,$);
+#453=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_76','Sawdust',#447,$,$);
+#454=IFCCLASSIFICATIONREFERENCE($,'Ma_60_64_82','Straw',#447,$,$);
+#455=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65','Plastics',#425,$,$);
+#456=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_00','Acrylonitrile butadiene styrene (ABS)',#455,$,$);
+#457=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_01','Polyacrylonitrile (PAN)',#455,$,$);
+#458=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_03','Polyamide (PA)',#455,$,$);
+#459=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_12','Polycarbonate (PC)',#455,$,$);
+#460=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_27','Polyester',#455,$,$);
+#461=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_27_28','Polyethylene terephthalate (PET)',#460,$,$);
+#462=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_28','Polyethylene (PE)',#455,$,$);
+#463=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_28_37','High-density polyethylene (HDPE)',#462,$,$);
+#464=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_28_48','Low-density polyethylene (LDPE)',#462,$,$);
+#465=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_28_51','Medium-density polyethylene (MDPE)',#462,$,$);
+#466=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_43','Polyisocyanurate (PIR)',#455,$,$);
+#467=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_59','Polyoxybenzylmethylenglycolanhydride',#455,$,$);
+#468=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_67','Polypropylene (PP)',#455,$,$);
+#469=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_85','Polystyrene (PS)',#455,$,$);
+#470=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_85_27','Expanded polystyrene (EPS)',#469,$,$);
+#471=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_85_28','Extruded polystyrene foam (XPS)',#469,$,$);
+#472=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_93','Polyurethane (PU)',#455,$,$);
+#473=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_94','Polyvinyl acetate (PVA)',#455,$,$);
+#474=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_95','Polyvinylidene fluoride (PVDF)',#455,$,$);
+#475=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_96','Polyvinyl chloride (PVC)',#455,$,$);
+#476=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_96_15','Chlorinated polyvinyl chloride (CPVC)',#475,$,$);
+#477=IFCCLASSIFICATIONREFERENCE($,'Ma_60_65_96_93','Unplasticized polyvinyl chloride (PVC-U)',#475,$,$);
+#478=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72','Resin',#425,$,$);
+#479=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56','Natural resin',#478,$,$);
+#480=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_06','Balsam resin',#479,$,$);
+#481=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_08','Benzoin resin',#479,$,$);
+#482=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_17','Copal resin',#479,$,$);
+#483=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_21','Damar resin',#479,$,$);
+#484=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_46','Lacquer resin',#479,$,$);
+#485=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_51','Mastic resin',#479,$,$);
+#486=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_79','Shellac resin',#479,$,$);
+#487=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_56_91','Turpentine resin',#479,$,$);
+#488=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86','Synthetic resin',#478,$,$);
+#489=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_00','Acetal resin',#488,$,$);
+#490=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_01','Acrylic resin',#488,$,$);
+#491=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_02','Acrylonitrile butadiene styrene resin',#488,$,$);
+#492=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_04','Alkyd resin',#488,$,$);
+#493=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_27','Epoxy resin',#488,$,$);
+#494=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_28','Ethylene vinyl acetate resin',#488,$,$);
+#495=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_46','Liquid crystal polymer resin',#488,$,$);
+#496=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_48','Long fibre-reinforced plastics resin',#488,$,$);
+#497=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_52','Melamine formaldehyde resin',#488,$,$);
+#498=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_60','Phenol formaldehyde resin',#488,$,$);
+#499=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_61','Polyamide resin',#488,$,$);
+#500=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_62','Polycarbonate resin',#488,$,$);
+#501=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_63','Polyester resin',#488,$,$);
+#502=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_64','Polyethylene resin',#488,$,$);
+#503=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_65','Polyethylene terephthalate resin',#488,$,$);
+#504=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_66','Polyphenylene sulfide resin',#488,$,$);
+#505=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_67','Polypropylene resin',#488,$,$);
+#506=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_68','Polystyrene resin',#488,$,$);
+#507=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_69','Polyurethane resin',#488,$,$);
+#508=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_70','Polyvinyl chloride resin',#488,$,$);
+#509=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_79','Silicone resin',#488,$,$);
+#510=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_89','Thermoplastic elastomer resin',#488,$,$);
+#511=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_92','Unsaturated polyester resin',#488,$,$);
+#512=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_93','Urea formaldehyde resin',#488,$,$);
+#513=IFCCLASSIFICATIONREFERENCE($,'Ma_60_72_86_94','Vinyl ester resin',#488,$,$);
+#514=IFCCLASSIFICATIONREFERENCE($,'Ma_60_74','Rubber',#425,$,$);
+#515=IFCCLASSIFICATIONREFERENCE($,'Ma_60_81','Soap',#425,$,$);
+#516=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97','Wood',#425,$,$);
+#517=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_04','Ash',#516,$,$);
+#518=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_07','Beech',#516,$,$);
+#519=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_08','Birch',#516,$,$);
+#520=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_08_80','Silver birch',#519,$,$);
+#521=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_08_97','White birch',#519,$,$);
+#522=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_13','Cedar',#516,$,$);
+#523=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_13_97','Western red cedar',#522,$,$);
+#524=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_26','Ebony',#516,$,$);
+#525=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_27','Elm',#516,$,$);
+#526=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_27_25','Dutch elm',#525,$,$);
+#527=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_27_27','English elm',#525,$,$);
+#528=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_27_98','Wych elm',#525,$,$);
+#529=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_30','Fir',#516,$,$);
+#530=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_30_24','Douglas fir',#529,$,$);
+#531=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_37','Hemlock',#516,$,$);
+#532=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_37_97','Western hemlock',#531,$,$);
+#533=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_44','Jarrah',#516,$,$);
+#534=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_46','Larch',#516,$,$);
+#535=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_46_28','European larch',#534,$,$);
+#536=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_46_44','Japanese larch',#534,$,$);
+#537=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_50','Mahogany',#516,$,$);
+#538=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_51','Maple',#516,$,$);
+#539=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58','Oak',#516,$,$);
+#540=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58_03','American red oak',#539,$,$);
+#541=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58_04','American white oak',#539,$,$);
+#542=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58_27','English oak',#539,$,$);
+#543=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58_28','European oak',#539,$,$);
+#544=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_58_32','French oak',#539,$,$);
+#545=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63','Pine',#516,$,$);
+#546=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_12','Caribbean pitch pine',#545,$,$);
+#547=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_48','Lodgepole pine',#545,$,$);
+#548=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_50','Maritime pine',#545,$,$);
+#549=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_70','Radiata pine',#545,$,$);
+#550=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_77','Scots pine',#545,$,$);
+#551=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_96','White pine',#545,$,$);
+#552=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_63_99','Yellow pine',#545,$,$);
+#553=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_66','Poplar',#516,$,$);
+#554=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_66_08','Black poplar',#553,$,$);
+#555=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_66_35','Grey poplar',#553,$,$);
+#556=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_66_97','White poplar',#553,$,$);
+#557=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_81','Spruce',#516,$,$);
+#558=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_81_57','Norway spruce',#557,$,$);
+#559=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_81_80','Sitka spruce',#557,$,$);
+#560=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_86','Sycamore',#516,$,$);
+#561=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_88','Teak',#516,$,$);
+#562=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_96','Wallaba',#516,$,$);
+#563=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_97','Walnut',#516,$,$);
+#564=IFCCLASSIFICATIONREFERENCE($,'Ma_60_97_99','Yew',#516,$,$);
+#565=IFCCLASSIFICATIONREFERENCE($,'Ma_80','Materials by form',#13,$,$);
+#566=IFCCLASSIFICATIONREFERENCE($,'Ma_80_01','Aerogel',#565,$,$);
+#567=IFCCLASSIFICATIONREFERENCE($,'Ma_80_02','Aerosol',#565,$,$);
+#568=IFCCLASSIFICATIONREFERENCE($,'Ma_80_15','Colloid',#565,$,$);
+#569=IFCCLASSIFICATIONREFERENCE($,'Ma_80_19','Crystal',#565,$,$);
+#570=IFCCLASSIFICATIONREFERENCE($,'Ma_80_27','Emulsion',#565,$,$);
+#571=IFCCLASSIFICATIONREFERENCE($,'Ma_80_27_51','Microemulsion',#570,$,$);
+#572=IFCCLASSIFICATIONREFERENCE($,'Ma_80_29','Fibre',#565,$,$);
+#573=IFCCLASSIFICATIONREFERENCE($,'Ma_80_30','Filament',#565,$,$);
+#574=IFCCLASSIFICATIONREFERENCE($,'Ma_80_30_52','Monofilament',#573,$,$);
+#575=IFCCLASSIFICATIONREFERENCE($,'Ma_80_31','Film',#565,$,$);
+#576=IFCCLASSIFICATIONREFERENCE($,'Ma_80_32','Foam',#565,$,$);
+#577=IFCCLASSIFICATIONREFERENCE($,'Ma_80_33','Gas',#565,$,$);
+#578=IFCCLASSIFICATIONREFERENCE($,'Ma_80_35','Granule',#565,$,$);
+#579=IFCCLASSIFICATIONREFERENCE($,'Ma_80_47','Liquid',#565,$,$);
+#580=IFCCLASSIFICATIONREFERENCE($,'Ma_80_51','Membrane',#565,$,$);
+#581=IFCCLASSIFICATIONREFERENCE($,'Ma_80_52','Mesh',#565,$,$);
+#582=IFCCLASSIFICATIONREFERENCE($,'Ma_80_56','Net',#565,$,$);
+#583=IFCCLASSIFICATIONREFERENCE($,'Ma_80_65','Powder',#565,$,$);
+#584=IFCCLASSIFICATIONREFERENCE($,'Ma_80_77','Sheet',#565,$,$);
+#585=IFCCLASSIFICATIONREFERENCE($,'Ma_80_80','Solid',#565,$,$);
+#586=IFCCLASSIFICATIONREFERENCE($,'Ma_80_81','Solution',#565,$,$);
+#587=IFCCLASSIFICATIONREFERENCE($,'FI_10','Communication',#11,$,$);
+#588=IFCCLASSIFICATIONREFERENCE($,'FI_10_03','Agenda (AG)',#587,$,$);
+#589=IFCCLASSIFICATIONREFERENCE($,'FI_10_10','Brochure (BL)',#587,$,$);
+#590=IFCCLASSIFICATIONREFERENCE($,'FI_10_15','Comment (CT)',#587,$,$);
+#591=IFCCLASSIFICATIONREFERENCE($,'FI_10_17','Conversation record (CD)',#587,$,$);
+#592=IFCCLASSIFICATIONREFERENCE($,'FI_10_20','Correspondence (CO)',#587,$,$);
+#593=IFCCLASSIFICATIONREFERENCE($,'FI_10_27','Email (EM)',#587,$,$);
+#594=IFCCLASSIFICATIONREFERENCE($,'FI_10_30','File note (FN)',#587,$,$);
+#595=IFCCLASSIFICATIONREFERENCE($,'FI_10_45','Leaflet (LF)',#587,$,$);
+#596=IFCCLASSIFICATIONREFERENCE($,'FI_10_46','Letter (LT)',#587,$,$);
+#597=IFCCLASSIFICATIONREFERENCE($,'FI_10_50','Memo (ME)',#587,$,$);
+#598=IFCCLASSIFICATIONREFERENCE($,'FI_10_55','Minutes (MI)',#587,$,$);
+#599=IFCCLASSIFICATIONREFERENCE($,'FI_10_59','Poster (PO)',#587,$,$);
+#600=IFCCLASSIFICATIONREFERENCE($,'FI_10_60','Presentation (PP)',#587,$,$);
+#601=IFCCLASSIFICATIONREFERENCE($,'FI_10_65','Press release (PE)',#587,$,$);
+#602=IFCCLASSIFICATIONREFERENCE($,'FI_10_70','Request (RI)',#587,$,$);
+#603=IFCCLASSIFICATIONREFERENCE($,'FI_10_86','Technical query (TQ)',#587,$,$);
+#604=IFCCLASSIFICATIONREFERENCE($,'FI_10_88','Transfer note (TN)',#587,$,$);
+#605=IFCCLASSIFICATIONREFERENCE($,'FI_10_90','Transmittal (TL)',#587,$,$);
+#606=IFCCLASSIFICATIONREFERENCE($,'FI_20','Contractual',#11,$,$);
+#607=IFCCLASSIFICATIONREFERENCE($,'FI_20_05','Application (AP)',#606,$,$);
+#608=IFCCLASSIFICATIONREFERENCE($,'FI_20_15','Contract (CC)',#606,$,$);
+#609=IFCCLASSIFICATIONREFERENCE($,'FI_20_25','Early warning notice (EW)',#606,$,$);
+#610=IFCCLASSIFICATIONREFERENCE($,'FI_20_40','Instruction (IN)',#606,$,$);
+#611=IFCCLASSIFICATIONREFERENCE($,'FI_20_65','Proposal (PS)',#606,$,$);
+#612=IFCCLASSIFICATIONREFERENCE($,'FI_20_70','Requisition (RQ)',#606,$,$);
+#613=IFCCLASSIFICATIONREFERENCE($,'FI_20_85','Subcontract order (SO)',#606,$,$);
+#614=IFCCLASSIFICATIONREFERENCE($,'FI_20_95','Variation (VA)',#606,$,$);
+#615=IFCCLASSIFICATIONREFERENCE($,'FI_30','Data',#11,$,$);
+#616=IFCCLASSIFICATIONREFERENCE($,'FI_30_20','Database (DB)',#615,$,$);
+#617=IFCCLASSIFICATIONREFERENCE($,'FI_30_22','Data set (DS)',#615,$,$);
+#618=IFCCLASSIFICATIONREFERENCE($,'FI_30_40','Information exchange file (IE)',#615,$,$);
+#619=IFCCLASSIFICATIONREFERENCE($,'FI_30_70','Room data sheet (RD)',#615,$,$);
+#620=IFCCLASSIFICATIONREFERENCE($,'FI_30_80','Schedule of accommodation (SA)',#615,$,$);
+#621=IFCCLASSIFICATIONREFERENCE($,'FI_40','Design',#11,$,$);
+#622=IFCCLASSIFICATIONREFERENCE($,'FI_40_10','Calculations (CA)',#621,$,$);
+#623=IFCCLASSIFICATIONREFERENCE($,'FI_40_78','Scope of works (SW)',#621,$,$);
+#624=IFCCLASSIFICATIONREFERENCE($,'FI_40_80','Specification (SP)',#621,$,$);
+#625=IFCCLASSIFICATIONREFERENCE($,'FI_50','Financial',#11,$,$);
+#626=IFCCLASSIFICATIONREFERENCE($,'FI_50_10','Bill of quantities (BQ)',#625,$,$);
+#627=IFCCLASSIFICATIONREFERENCE($,'FI_50_15','Cost plan (CP)',#625,$,$);
+#628=IFCCLASSIFICATIONREFERENCE($,'FI_50_27','Estimate (ES)',#625,$,$);
+#629=IFCCLASSIFICATIONREFERENCE($,'FI_50_40','Invoice (IV)',#625,$,$);
+#630=IFCCLASSIFICATIONREFERENCE($,'FI_50_69','Quotation (QN)',#625,$,$);
+#631=IFCCLASSIFICATIONREFERENCE($,'FI_60','Graphical',#11,$,$);
+#632=IFCCLASSIFICATIONREFERENCE($,'FI_60_05','Animation file (AF)',#631,$,$);
+#633=IFCCLASSIFICATIONREFERENCE($,'FI_60_15','Clash rendition (CR)',#631,$,$);
+#634=IFCCLASSIFICATIONREFERENCE($,'FI_60_20','Drawing (DG)',#631,$,$);
+#635=IFCCLASSIFICATIONREFERENCE($,'FI_60_25','Drawing rendition (DR)',#631,$,$);
+#636=IFCCLASSIFICATIONREFERENCE($,'FI_60_40','Image (IM)',#631,$,$);
+#637=IFCCLASSIFICATIONREFERENCE($,'FI_60_50','Model rendition (MR)',#631,$,$);
+#638=IFCCLASSIFICATIONREFERENCE($,'FI_60_53','Model \X2\2013\X0\ three-dimensional (M3)',#631,$,$);
+#639=IFCCLASSIFICATIONREFERENCE($,'FI_60_55','Model \X2\2013\X0\ two-dimensional (M2)',#631,$,$);
+#640=IFCCLASSIFICATIONREFERENCE($,'FI_60_60','Photograph (PH)',#631,$,$);
+#641=IFCCLASSIFICATIONREFERENCE($,'FI_60_76','Schematic (SC)',#631,$,$);
+#642=IFCCLASSIFICATIONREFERENCE($,'FI_60_80','Sketch (SK)',#631,$,$);
+#643=IFCCLASSIFICATIONREFERENCE($,'FI_60_95','Visualization (VS)',#631,$,$);
+#644=IFCCLASSIFICATIONREFERENCE($,'FI_70','Official guidance',#11,$,$);
+#645=IFCCLASSIFICATIONREFERENCE($,'FI_70_65','Protocol (PZ)',#644,$,$);
+#646=IFCCLASSIFICATIONREFERENCE($,'FI_70_72','Regulation (RN)',#644,$,$);
+#647=IFCCLASSIFICATIONREFERENCE($,'FI_70_85','Standard (SD)',#644,$,$);
+#648=IFCCLASSIFICATIONREFERENCE($,'FI_80','Project planning',#11,$,$);
+#649=IFCCLASSIFICATIONREFERENCE($,'FI_80_50','Method statement (MS)',#648,$,$);
+#650=IFCCLASSIFICATIONREFERENCE($,'FI_80_60','Policy (PY)',#648,$,$);
+#651=IFCCLASSIFICATIONREFERENCE($,'FI_80_63','Procedure (PC)',#648,$,$);
+#652=IFCCLASSIFICATIONREFERENCE($,'FI_80_65','Programme (PR)',#648,$,$);
+#653=IFCCLASSIFICATIONREFERENCE($,'FI_80_85','Strategy (SY)',#648,$,$);
+#654=IFCCLASSIFICATIONREFERENCE($,'FI_90','Record information',#11,$,$);
+#655=IFCCLASSIFICATIONREFERENCE($,'FI_90_13','Certificate (CE)',#654,$,$);
+#656=IFCCLASSIFICATIONREFERENCE($,'FI_90_15','Chart (CH)',#654,$,$);
+#657=IFCCLASSIFICATIONREFERENCE($,'FI_90_21','Data sheet (DT)',#654,$,$);
+#658=IFCCLASSIFICATIONREFERENCE($,'FI_90_23','Diary entry (DE)',#654,$,$);
+#659=IFCCLASSIFICATIONREFERENCE($,'FI_90_24','Directory (DY)',#654,$,$);
+#660=IFCCLASSIFICATIONREFERENCE($,'FI_90_30','Form (FM)',#654,$,$);
+#661=IFCCLASSIFICATIONREFERENCE($,'FI_90_35','Guide (GU)',#654,$,$);
+#662=IFCCLASSIFICATIONREFERENCE($,'FI_90_37','Health and safety (HS)',#654,$,$);
+#663=IFCCLASSIFICATIONREFERENCE($,'FI_90_45','List (LI)',#654,$,$);
+#664=IFCCLASSIFICATIONREFERENCE($,'FI_90_47','Log (LG)',#654,$,$);
+#665=IFCCLASSIFICATIONREFERENCE($,'FI_90_50','Manual (MA)',#654,$,$);
+#666=IFCCLASSIFICATIONREFERENCE($,'FI_90_52','Matrix (MX)',#654,$,$);
+#667=IFCCLASSIFICATIONREFERENCE($,'FI_90_60','Permit (PT)',#654,$,$);
+#668=IFCCLASSIFICATIONREFERENCE($,'FI_90_64','Plan (PL)',#654,$,$);
+#669=IFCCLASSIFICATIONREFERENCE($,'FI_90_66','Process workflow (PW)',#654,$,$);
+#670=IFCCLASSIFICATIONREFERENCE($,'FI_90_70','Register (RG)',#654,$,$);
+#671=IFCCLASSIFICATIONREFERENCE($,'FI_90_72','Report (RP)',#654,$,$);
+#672=IFCCLASSIFICATIONREFERENCE($,'FI_90_75','Schedule or table (SH)',#654,$,$);
+#673=IFCCLASSIFICATIONREFERENCE($,'FI_90_80','Snagging list (SN)',#654,$,$);
+#674=IFCCLASSIFICATIONREFERENCE($,'FI_90_83','Study (ST)',#654,$,$);
+#675=IFCCLASSIFICATIONREFERENCE($,'FI_90_85','Survey (SU)',#654,$,$);
+#676=IFCCLASSIFICATIONREFERENCE($,'FI_90_86','Technology file (TF)',#654,$,$);
+#677=IFCCLASSIFICATIONREFERENCE($,'FI_90_87','Test result (TR)',#654,$,$);
+#678=IFCCLASSIFICATIONREFERENCE($,'FI_90_88','Template (TE)',#654,$,$);
+#679=IFCCLASSIFICATIONREFERENCE($,'FI_90_90','Training record (TG)',#654,$,$);
+#680=IFCCLASSIFICATIONREFERENCE($,'FI_90_94','Valuation (VL)',#654,$,$);
+#681=IFCCLASSIFICATIONREFERENCE($,'PM_10','Project information',#10,$,$);
+#682=IFCCLASSIFICATIONREFERENCE($,'PM_10_10','Project',#681,$,$);
+#683=IFCCLASSIFICATIONREFERENCE($,'PM_10_10_10','Initial project brief',#682,$,$);
+#684=IFCCLASSIFICATIONREFERENCE($,'PM_10_10_20','Final project brief',#682,$,$);
+#685=IFCCLASSIFICATIONREFERENCE($,'PM_10_10_60','Project description',#682,$,$);
+#686=IFCCLASSIFICATIONREFERENCE($,'PM_10_20','Client requirements',#681,$,$);
+#687=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_03','Appointment document',#686,$,$);
+#688=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_07','Brief',#686,$,$);
+#689=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_09','Buildability statement',#686,$,$);
+#690=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_11','Carbon road map',#686,$,$);
+#691=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_12','Carbon strategy',#686,$,$);
+#692=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_13','Community analysis',#686,$,$);
+#693=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_14','Community and tenant liaison plan',#686,$,$);
+#694=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_16','Construction industry registration scheme requirements',#686,$,$);
+#695=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_17','Core requirements statement',#686,$,$);
+#696=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_18','Cost benefit analysis',#686,$,$);
+#697=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_21','Data quality plans',#686,$,$);
+#698=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_25','Employer''s requirements',#686,$,$);
+#699=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_26','Environmental policy',#686,$,$);
+#700=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_27','Environmental reporting information',#686,$,$);
+#701=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_28','Exchange information requirements',#686,$,$);
+#702=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_30','Feasibility study',#686,$,$);
+#703=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_46','Landlord and tenant liaison plan',#686,$,$);
+#704=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_69','Quality plan',#686,$,$);
+#705=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_73','Site appraisals',#686,$,$);
+#706=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_75','Stakeholder engagement plan',#686,$,$);
+#707=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_82','Statement of requirements',#686,$,$);
+#708=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_84','Statement of security requirements',#686,$,$);
+#709=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_86','Sustainable development engagement plan',#686,$,$);
+#710=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_90','Technical statement of requirements (TSOR)',#686,$,$);
+#711=IFCCLASSIFICATIONREFERENCE($,'PM_10_20_92','User requirement document',#686,$,$);
+#712=IFCCLASSIFICATIONREFERENCE($,'PM_10_80','Space management requirements',#681,$,$);
+#713=IFCCLASSIFICATIONREFERENCE($,'PM_10_80_10','Accommodation and layout plan',#712,$,$);
+#714=IFCCLASSIFICATIONREFERENCE($,'PM_10_80_75','Space design',#712,$,$);
+#715=IFCCLASSIFICATIONREFERENCE($,'PM_10_80_80','Space plan',#712,$,$);
+#716=IFCCLASSIFICATIONREFERENCE($,'PM_10_80_85','Space standard',#712,$,$);
+#717=IFCCLASSIFICATIONREFERENCE($,'PM_10_90','Transport management requirements',#681,$,$);
+#718=IFCCLASSIFICATIONREFERENCE($,'PM_10_90_01','Abnormal indivisible load (AIL) schedule',#717,$,$);
+#719=IFCCLASSIFICATIONREFERENCE($,'PM_10_90_04','Transport assessment and travel plan',#717,$,$);
+#720=IFCCLASSIFICATIONREFERENCE($,'PM_10_90_31','Freight management plan',#717,$,$);
+#721=IFCCLASSIFICATIONREFERENCE($,'PM_10_90_50','Transport management strategy',#717,$,$);
+#722=IFCCLASSIFICATIONREFERENCE($,'PM_10_90_85','Staff and visitor travel plan',#717,$,$);
+#723=IFCCLASSIFICATIONREFERENCE($,'PM_30','Site, ground and environmental information',#10,$,$);
+#724=IFCCLASSIFICATIONREFERENCE($,'PM_30_10','Site survey information',#723,$,$);
+#725=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_15','Condition survey information',#724,$,$);
+#726=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_22','Dimensional information',#724,$,$);
+#727=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_26','Electrical power quality assessment information',#724,$,$);
+#728=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_28','Existing structure information',#724,$,$);
+#729=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_36','Historic site survey information',#724,$,$);
+#730=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_37','Historic building survey information',#724,$,$);
+#731=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_38','Hydraulic information',#724,$,$);
+#732=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_39','Hydrology information',#724,$,$);
+#733=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_47','Land registration information',#724,$,$);
+#734=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_49','Light detection and ranging (LIDAR) survey information',#724,$,$);
+#735=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_58','Mapping information',#724,$,$);
+#736=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_60','Party wall survey information',#724,$,$);
+#737=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_62','Pedestrian flow analysis information',#724,$,$);
+#738=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_64','Photogrammetry survey information',#724,$,$);
+#739=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_73','Rights of light survey information',#724,$,$);
+#740=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_76','Scan survey information',#724,$,$);
+#741=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_77','Security needs assessment report',#724,$,$);
+#742=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_78','Site abnormal information',#724,$,$);
+#743=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_80','Site boundary information',#724,$,$);
+#744=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_85','Structural survey information',#724,$,$);
+#745=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_88','Topographical survey information',#724,$,$);
+#746=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_90','Transport feasibility survey information',#724,$,$);
+#747=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_93','Utilities and services survey information',#724,$,$);
+#748=IFCCLASSIFICATIONREFERENCE($,'PM_30_10_95','Vehicle flow analysis information',#724,$,$);
+#749=IFCCLASSIFICATIONREFERENCE($,'PM_30_20','Ground investigation and survey reports',#723,$,$);
+#750=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_02','Archaeological survey report',#749,$,$);
+#751=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_10','Geological survey report',#749,$,$);
+#752=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_17','Contaminated land survey report',#749,$,$);
+#753=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_24','Underground services survey report',#749,$,$);
+#754=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_33','Geotechnical survey report',#749,$,$);
+#755=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_35','Ground investigation report',#749,$,$);
+#756=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_46','Land quality assessment report',#749,$,$);
+#757=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_89','Topographic survey report',#749,$,$);
+#758=IFCCLASSIFICATIONREFERENCE($,'PM_30_20_92','Underground drainage closed-circuit television (CCTV) condition survey information',#749,$,$);
+#759=IFCCLASSIFICATIONREFERENCE($,'PM_30_30','Environmental information',#723,$,$);
+#760=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_02','Acoustic survey information',#759,$,$);
+#761=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_03','Air quality survey information',#759,$,$);
+#762=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_04','Arboricultural survey information',#759,$,$);
+#763=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_08','Broad scale model',#759,$,$);
+#764=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_10','Carbon calculation report',#759,$,$);
+#765=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_13','Climate forecasting information',#759,$,$);
+#766=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_15','Coastal model',#759,$,$);
+#767=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_17','Continuous flood simulation model',#759,$,$);
+#768=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_23','Catchment drainage model',#759,$,$);
+#769=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_24','Environmental constraints report',#759,$,$);
+#770=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_25','Ecology survey report',#759,$,$);
+#771=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_26','Environmental action report',#759,$,$);
+#772=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_27','Environmental impact report',#759,$,$);
+#773=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_28','Environmental survey report',#759,$,$);
+#774=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_29','Flood risk assessment report',#759,$,$);
+#775=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_30','Flood forecasting model',#759,$,$);
+#776=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_31','Flood protection information',#759,$,$);
+#777=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_32','Fluvial flow model',#759,$,$);
+#778=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_33','Flood simulation model',#759,$,$);
+#779=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_34','Flood history report',#759,$,$);
+#780=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_39','Hydrological model',#759,$,$);
+#781=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_41','Integrated catchment model',#759,$,$);
+#782=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_46','Landscape and visual impact assessment',#759,$,$);
+#783=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_51','Measured building survey information',#759,$,$);
+#784=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_53','Model calibration information',#759,$,$);
+#785=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_58','Operational waste management plan',#759,$,$);
+#786=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_65','Pluvial flow model',#759,$,$);
+#787=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_67','Protected species report',#759,$,$);
+#788=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_70','Reservoir model',#759,$,$);
+#789=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_72','Road safety audit report',#759,$,$);
+#790=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_75','Seismic survey report',#759,$,$);
+#791=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_85','Sustainability information',#759,$,$);
+#792=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_86','Thermal and environmental model',#759,$,$);
+#793=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_87','Tidal information',#759,$,$);
+#794=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_88','Tidal and coastal boundary information',#759,$,$);
+#795=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_96','Water management information',#759,$,$);
+#796=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_97','Water quality assessment information',#759,$,$);
+#797=IFCCLASSIFICATIONREFERENCE($,'PM_30_30_98','Weather forecasting information',#759,$,$);
+#798=IFCCLASSIFICATIONREFERENCE($,'PM_30_40','Hazardous substances information',#723,$,$);
+#799=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_06','Asbestos survey report',#798,$,$);
+#800=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_10','Biological agents survey report',#798,$,$);
+#801=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_33','Gases survey report',#798,$,$);
+#802=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_36','Hazardous chemicals survey report',#798,$,$);
+#803=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_39','Heavy metals survey report',#798,$,$);
+#804=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_46','Lead survey report',#798,$,$);
+#805=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_70','Radioactive waste survey report',#798,$,$);
+#806=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_92','Unexploded ordnance survey report',#798,$,$);
+#807=IFCCLASSIFICATIONREFERENCE($,'PM_30_40_94','Volatile organic compounds survey report',#798,$,$);
+#808=IFCCLASSIFICATIONREFERENCE($,'PM_35','Project performance requirements',#10,$,$);
+#809=IFCCLASSIFICATIONREFERENCE($,'PM_35_05','Project context requirements',#808,$,$);
+#810=IFCCLASSIFICATIONREFERENCE($,'PM_35_05_22','Development performance requirements',#809,$,$);
+#811=IFCCLASSIFICATIONREFERENCE($,'PM_35_05_79','Site context requirements',#809,$,$);
+#812=IFCCLASSIFICATIONREFERENCE($,'PM_35_10','Quality and operational properties performance requirements',#808,$,$);
+#813=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_03','Air quality performance requirements',#812,$,$);
+#814=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_13','Comfort performance requirements',#812,$,$);
+#815=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_15','Condensation control performance requirements',#812,$,$);
+#816=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_22','Design quality performance requirements',#812,$,$);
+#817=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_25','Durability performance requirements',#812,$,$);
+#818=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_32','Functional properties performance requirements',#812,$,$);
+#819=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_47','Life cycle performance requirements',#812,$,$);
+#820=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_60','Performance compliance requirements',#812,$,$);
+#821=IFCCLASSIFICATIONREFERENCE($,'PM_35_10_96','Watertightness performance requirements',#812,$,$);
+#822=IFCCLASSIFICATIONREFERENCE($,'PM_35_20','Structural performance requirements',#808,$,$);
+#823=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_03','Accidental loading performance requirements',#822,$,$);
+#824=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_26','Earthquake loading performance requirements',#822,$,$);
+#825=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_33','Geotechnical performance requirements',#822,$,$);
+#826=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_42','Imposed loads performance requirements',#822,$,$);
+#827=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_62','Permanent loads performance requirements',#822,$,$);
+#828=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_76','Snow and ice load performance requirements',#822,$,$);
+#829=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_80','Structural design performance requirements',#822,$,$);
+#830=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_81','Structural robustness performance requirements',#822,$,$);
+#831=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_82','Subsidence mitigation performance requirements',#822,$,$);
+#832=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_90','Thermal actions performance requirements',#822,$,$);
+#833=IFCCLASSIFICATIONREFERENCE($,'PM_35_20_96','Wind loading performance requirements',#822,$,$);
+#834=IFCCLASSIFICATIONREFERENCE($,'PM_35_30','Fire performance requirements',#808,$,$);
+#835=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_04','Automatic fire suppression performance requirements',#834,$,$);
+#836=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_18','Electrical fire performance requirements',#834,$,$);
+#837=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_20','Escape lighting performance requirements',#834,$,$);
+#838=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_24','Fire and rescue service requirements',#834,$,$);
+#839=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_26','Fire protection zone requirements',#834,$,$);
+#840=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_28','Fire resistance performance requirements',#834,$,$);
+#841=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_30','Fire safety performance requirements',#834,$,$);
+#842=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_70','Reaction to fire performance requirements',#834,$,$);
+#843=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_80','Spread of fire performance requirements',#834,$,$);
+#844=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_85','Structural fire performance requirements',#834,$,$);
+#845=IFCCLASSIFICATIONREFERENCE($,'PM_35_30_96','Wildfire protection performance requirements',#834,$,$);
+#846=IFCCLASSIFICATIONREFERENCE($,'PM_35_40','Environmentally sustainable design requirements',#808,$,$);
+#847=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_08','Biodiversity performance requirements',#846,$,$);
+#848=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_28','Earthworks and groundworks schedules',#846,$,$);
+#849=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_30','Environmental scheme performance requirements',#846,$,$);
+#850=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_32','Flood defence performance requirements',#846,$,$);
+#851=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_34','Habitat performance requirements',#846,$,$);
+#852=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_35','Hazardous materials control requirements',#846,$,$);
+#853=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_38','Hydrological performance requirements',#846,$,$);
+#854=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_72','Resistance to ground contaminants requirements',#846,$,$);
+#855=IFCCLASSIFICATIONREFERENCE($,'PM_35_40_84','Sustainability performance requirements',#846,$,$);
+#856=IFCCLASSIFICATIONREFERENCE($,'PM_35_50','Safety performance requirements',#808,$,$);
+#857=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_01','Accessibility performance requirements',#856,$,$);
+#858=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_08','Biosecurity performance requirements',#856,$,$);
+#859=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_47','Lightning protection performance requirements',#856,$,$);
+#860=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_65','Project and site safety performance requirements',#856,$,$);
+#861=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_72','Safety and protection performance requirements',#856,$,$);
+#862=IFCCLASSIFICATIONREFERENCE($,'PM_35_50_74','Security performance requirements',#856,$,$);
+#863=IFCCLASSIFICATIONREFERENCE($,'PM_35_60','Acoustic performance requirements',#808,$,$);
+#864=IFCCLASSIFICATIONREFERENCE($,'PM_35_60_01','Acoustic attenuation performance requirements',#863,$,$);
+#865=IFCCLASSIFICATIONREFERENCE($,'PM_35_60_03','Acoustic diffusion performance requirements',#863,$,$);
+#866=IFCCLASSIFICATIONREFERENCE($,'PM_35_60_05','Acoustic separation performance requirements',#863,$,$);
+#867=IFCCLASSIFICATIONREFERENCE($,'PM_35_60_95','Vibration control performance requirements',#863,$,$);
+#868=IFCCLASSIFICATIONREFERENCE($,'PM_35_70','Energy performance requirements',#808,$,$);
+#869=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_03','Airtightness performance requirements',#868,$,$);
+#870=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_05','Air conditioning performance requirement',#868,$,$);
+#871=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_15','Chilled water performance requirements',#868,$,$);
+#872=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_17','Combustion appliance performance requirements',#868,$,$);
+#873=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_20','Daylight and shading performance requirements',#868,$,$);
+#874=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_27','Energy metering requirements',#868,$,$);
+#875=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_36','Heating performance requirements',#868,$,$);
+#876=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_38','Hot and cold water supply performance requirements',#868,$,$);
+#877=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_46','Lighting performance requirements',#868,$,$);
+#878=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_92','Thermal performance requirements',#868,$,$);
+#879=IFCCLASSIFICATIONREFERENCE($,'PM_35_70_94','Ventilation performance requirements',#868,$,$);
+#880=IFCCLASSIFICATIONREFERENCE($,'PM_40','Design and approvals information',#10,$,$);
+#881=IFCCLASSIFICATIONREFERENCE($,'PM_40_20','Design strategies',#880,$,$);
+#882=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_01','Access and maintenance strategy',#881,$,$);
+#883=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_02','Acoustic strategy',#881,$,$);
+#884=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_05','Air conditioning design strategy',#881,$,$);
+#885=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_08','Building fabric strategy',#881,$,$);
+#886=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_10','Building services strategy',#881,$,$);
+#887=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_13','Civil engineering design strategy',#881,$,$);
+#888=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_14','Comfort strategy',#881,$,$);
+#889=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_15','Commissioning strategy',#881,$,$);
+#890=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_17','Conservation strategy',#881,$,$);
+#891=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_19','Cost plan strategy',#881,$,$);
+#892=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_21','Daylight design strategy',#881,$,$);
+#893=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_24','Drainage strategy',#881,$,$);
+#894=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_26','Energy strategy',#881,$,$);
+#895=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_30','Fire safety strategy',#881,$,$);
+#896=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_36','Health and safety strategy',#881,$,$);
+#897=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_38','Heating and cooling design strategy',#881,$,$);
+#898=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_39','High-voltage power supply strategy',#881,$,$);
+#899=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_40','Hot and cold water supply design strategy',#881,$,$);
+#900=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_42','Inclusive design strategy',#881,$,$);
+#901=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_43','Information and communications technology (ICT) strategy',#881,$,$);
+#902=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_46','Landscape design strategy',#881,$,$);
+#903=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_47','Lighting strategy',#881,$,$);
+#904=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_49','Low-voltage power supply strategy',#881,$,$);
+#905=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_58','Off-site construction strategy',#881,$,$);
+#906=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_59','Operational energy use strategy',#881,$,$);
+#907=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_61','Overheating mitigation strategy',#881,$,$);
+#908=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_63','Planning strategy',#881,$,$);
+#909=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_64','Plant and equipment replacement strategy',#881,$,$);
+#910=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_65','Plan for use strategy',#881,$,$);
+#911=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_70','Renewable energy strategy',#881,$,$);
+#912=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_77','Security design strategy',#881,$,$);
+#913=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_83','Structural engineering design strategy',#881,$,$);
+#914=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_85','Sustainability strategy',#881,$,$);
+#915=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_92','Thermal performance strategy',#881,$,$);
+#916=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_93','Urban design strategy',#881,$,$);
+#917=IFCCLASSIFICATIONREFERENCE($,'PM_40_20_94','Ventilation design strategy',#881,$,$);
+#918=IFCCLASSIFICATIONREFERENCE($,'PM_40_25','Design calculations',#880,$,$);
+#919=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_02','Above-ground drainage calculations',#918,$,$);
+#920=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_11','Cable calculations',#918,$,$);
+#921=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_15','Containment calculations',#918,$,$);
+#922=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_27','Electrical load calculations',#918,$,$);
+#923=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_37','Heating and cooling load calculations',#918,$,$);
+#924=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_39','Heat loss calculations',#918,$,$);
+#925=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_47','Lighting calculations',#918,$,$);
+#926=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_50','Maintenance factor calculations',#918,$,$);
+#927=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_52','Mechanical services calculations',#918,$,$);
+#928=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_63','Pipework calculations',#918,$,$);
+#929=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_68','Public health calculations',#918,$,$);
+#930=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_83','Structural engineering calculations',#918,$,$);
+#931=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_86','Surface water calculations',#918,$,$);
+#932=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_94','Ventilation calculations',#918,$,$);
+#933=IFCCLASSIFICATIONREFERENCE($,'PM_40_25_96','Wastewater drainage calculations',#918,$,$);
+#934=IFCCLASSIFICATIONREFERENCE($,'PM_40_30','Design information',#880,$,$);
+#935=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_17','Concept analysis',#934,$,$);
+#936=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_21','Design development register information',#934,$,$);
+#937=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_22','Designer health and safety risk assessment',#934,$,$);
+#938=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_23','Design philosophy statement',#934,$,$);
+#939=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_24','Design responsibility matrix',#934,$,$);
+#940=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_25','Developmental control plan',#934,$,$);
+#941=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_27','Energy target',#934,$,$);
+#942=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_28','Energy and comfort design calculations',#934,$,$);
+#943=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_34','Graphical information',#934,$,$);
+#944=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_50','Management control plan',#934,$,$);
+#945=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_52','Mechanical, electrical, instrumentation, controls and automation (MEICA) design',#934,$,$);
+#946=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_54','Modelling production and delivery table',#934,$,$);
+#947=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_55','Modelling specification',#934,$,$);
+#948=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_60','Parametric information',#934,$,$);
+#949=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_62','Photorealistic visualization images',#934,$,$);
+#950=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_63','Photorealistic visualization model',#934,$,$);
+#951=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_67','Prohibited materials information',#934,$,$);
+#952=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_70','Room data',#934,$,$);
+#953=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_77','Schedule of works',#934,$,$);
+#954=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_80','Site orientation',#934,$,$);
+#955=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_85','Sun path diagrams',#934,$,$);
+#956=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_89','Technical information',#934,$,$);
+#957=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_91','Thermal bridging calculations',#934,$,$);
+#958=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_96','Water hardness test report',#934,$,$);
+#959=IFCCLASSIFICATIONREFERENCE($,'PM_40_30_97','Water analysis report',#934,$,$);
+#960=IFCCLASSIFICATIONREFERENCE($,'PM_40_35','Design models',#880,$,$);
+#961=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_04','Architects models',#960,$,$);
+#962=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_10','Building services models',#960,$,$);
+#963=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_11','Catering models',#960,$,$);
+#964=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_15','Civil engineering models',#960,$,$);
+#965=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_18','Combined models',#960,$,$);
+#966=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_24','Drainage models',#960,$,$);
+#967=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_29','Fittings, furnishings and equipment (FF&E) models',#960,$,$);
+#968=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_45','Landscape models',#960,$,$);
+#969=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_65','Process models',#960,$,$);
+#970=IFCCLASSIFICATIONREFERENCE($,'PM_40_35_83','Structural engineering models',#960,$,$);
+#971=IFCCLASSIFICATIONREFERENCE($,'PM_40_40','Design drawings',#880,$,$);
+#972=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_01','2D plan drawings',#971,$,$);
+#973=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_02','3D plan drawings',#971,$,$);
+#974=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_10','Builders'' work drawings',#971,$,$);
+#975=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_15','Coordination drawings',#971,$,$);
+#976=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_18','Cross-section drawings',#971,$,$);
+#977=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_20','Decant drawings',#971,$,$);
+#978=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_22','Diagrammatical drawings',#971,$,$);
+#979=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_27','Elevation drawings',#971,$,$);
+#980=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_34','General arrangement drawings',#971,$,$);
+#981=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_42','Isometric drawings',#971,$,$);
+#982=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_50','Manufacturer''s drawings',#971,$,$);
+#983=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_54','Multi-view drawings',#971,$,$);
+#984=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_63','Phasing drawings',#971,$,$);
+#985=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_75','Schematic drawings',#971,$,$);
+#986=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_79','Sketch drawings',#971,$,$);
+#987=IFCCLASSIFICATIONREFERENCE($,'PM_40_40_88','Technical design drawings',#971,$,$);
+#988=IFCCLASSIFICATIONREFERENCE($,'PM_40_45','Specifications',#880,$,$);
+#989=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_03','Architectural construction specification',#988,$,$);
+#990=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_04','Architectural outline specification',#988,$,$);
+#991=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_05','Architectural performance specification',#988,$,$);
+#992=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_10','Building services construction specification',#988,$,$);
+#993=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_11','Building services outline specification',#988,$,$);
+#994=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_12','Building services performance specification',#988,$,$);
+#995=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_15','Civil engineering construction specification',#988,$,$);
+#996=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_16','Civil engineering outline specification',#988,$,$);
+#997=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_17','Civil engineering performance specification',#988,$,$);
+#998=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_45','Landscape architecture construction specification',#988,$,$);
+#999=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_46','Landscape architecture outline specification',#988,$,$);
+#1000=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_47','Landscape architecture performance specification',#988,$,$);
+#1001=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_83','Structural engineering construction specification',#988,$,$);
+#1002=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_84','Structural engineering outline specification',#988,$,$);
+#1003=IFCCLASSIFICATIONREFERENCE($,'PM_40_45_85','Structural engineering performance specification',#988,$,$);
+#1004=IFCCLASSIFICATIONREFERENCE($,'PM_40_50','Approvals information',#880,$,$);
+#1005=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_03','Approvals and assurance plan',#1004,$,$);
+#1006=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_10','Building codes application',#1004,$,$);
+#1007=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_12','Building codes approval',#1004,$,$);
+#1008=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_14','Consent',#1004,$,$);
+#1009=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_16','Contribution agreement',#1004,$,$);
+#1010=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_21','Design submittals',#1004,$,$);
+#1011=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_27','Environmental health officer approval',#1004,$,$);
+#1012=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_30','Fire officer approval',#1004,$,$);
+#1013=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_32','Funding profile',#1004,$,$);
+#1014=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_37','Heritage registration',#1004,$,$);
+#1015=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_41','Internal approval',#1004,$,$);
+#1016=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_47','Landowner agreement',#1004,$,$);
+#1017=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_49','Letter of authority',#1004,$,$);
+#1018=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_58','Outline planning application',#1004,$,$);
+#1019=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_60','Partnership agreement',#1004,$,$);
+#1020=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_63','Planning application',#1004,$,$);
+#1021=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_64','Planning conditions information',#1004,$,$);
+#1022=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_65','Planning permission',#1004,$,$);
+#1023=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_67','Project board agreement',#1004,$,$);
+#1024=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_69','Project team agreement',#1004,$,$);
+#1025=IFCCLASSIFICATIONREFERENCE($,'PM_40_50_90','Tree protection order',#1004,$,$);
+#1026=IFCCLASSIFICATIONREFERENCE($,'PM_40_60','Project information management information',#880,$,$);
+#1027=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_01','4D programme federated model',#1026,$,$);
+#1028=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_02','5D cost federated model',#1026,$,$);
+#1029=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_03','6D handover sequence federated model',#1026,$,$);
+#1030=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_05','Activities terminology',#1026,$,$);
+#1031=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_06','Asset delivery description',#1026,$,$);
+#1032=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_07','Benefits realization plan',#1026,$,$);
+#1033=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_08','BIM execution plan',#1026,$,$);
+#1034=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_11','Capability and capacity assessment report',#1026,$,$);
+#1035=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_12','Clash detection resolution report',#1026,$,$);
+#1036=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_16','COBie data set',#1026,$,$);
+#1037=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_18','Communications plan',#1026,$,$);
+#1038=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_19','Construction risk review',#1026,$,$);
+#1039=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_20','Contingency plan',#1026,$,$);
+#1040=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_21','Curriculum vitae (CV)',#1026,$,$);
+#1041=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_22','Data security policy',#1026,$,$);
+#1042=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_23','Description terminology',#1026,$,$);
+#1043=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_24','Detailed responsibility matrix',#1026,$,$);
+#1044=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_25','Design process management plan',#1026,$,$);
+#1045=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_26','Design programme',#1026,$,$);
+#1046=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_27','Electronic data interchange (EDI)',#1026,$,$);
+#1047=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_28','Document numbering system',#1026,$,$);
+#1048=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_31','Federated coordination models',#1026,$,$);
+#1049=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_33','Federated information models',#1026,$,$);
+#1050=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_38','Information assurance',#1026,$,$);
+#1051=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_39','Information validation',#1026,$,$);
+#1052=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_40','Information verification',#1026,$,$);
+#1053=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_41','Information delivery plan',#1026,$,$);
+#1054=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_43','Installation process management plan',#1026,$,$);
+#1055=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_44','Information security triage matrix',#1026,$,$);
+#1056=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_45','Key performance indicator (KPI) information',#1026,$,$);
+#1057=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_47','Landowner notice',#1026,$,$);
+#1058=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_50','Master information delivery plan',#1026,$,$);
+#1059=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_53','Mobilization plan',#1026,$,$);
+#1060=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_62','Post-occupancy evaluation',#1026,$,$);
+#1061=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_64','Pre-appointment BIM execution plan',#1026,$,$);
+#1062=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_65','Project execution plan',#1026,$,$);
+#1063=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_66','Project information production methods and procedures',#1026,$,$);
+#1064=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_67','Project information protocol',#1026,$,$);
+#1065=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_68','Project information standards',#1026,$,$);
+#1066=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_70','Risk schedule',#1026,$,$);
+#1067=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_72','Risk and opportunities management plan',#1026,$,$);
+#1068=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_85','Stakeholder management plan',#1026,$,$);
+#1069=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_87','Task information delivery plan',#1026,$,$);
+#1070=IFCCLASSIFICATIONREFERENCE($,'PM_40_60_89','Through-life management plan (TLMP)',#1026,$,$);
+#1071=IFCCLASSIFICATIONREFERENCE($,'PM_50','Financial and commercial information',#10,$,$);
+#1072=IFCCLASSIFICATIONREFERENCE($,'PM_50_30','Economic viability information',#1071,$,$);
+#1073=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_10','Business case',#1072,$,$);
+#1074=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_11','Capital contributions information',#1072,$,$);
+#1075=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_12','Commercial compliance report',#1072,$,$);
+#1076=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_14','Commercial plan',#1072,$,$);
+#1077=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_16','Commercial strategy',#1072,$,$);
+#1078=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_18','Cost model and indicative costing',#1072,$,$);
+#1079=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_26','Earned value management report',#1072,$,$);
+#1080=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_27','Efficiency assessment',#1072,$,$);
+#1081=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_28','Financial damage assessment',#1072,$,$);
+#1082=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_29','Financial strategy',#1072,$,$);
+#1083=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_30','Funding information',#1072,$,$);
+#1084=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_40','Initial planning estimate',#1072,$,$);
+#1085=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_42','Investment appraisal',#1072,$,$);
+#1086=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_60','Partnership funding report',#1072,$,$);
+#1087=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_64','Preliminary business case',#1072,$,$);
+#1088=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_66','Pre-tender estimate',#1072,$,$);
+#1089=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_68','Private-sector participation (PSP) evaluation report',#1072,$,$);
+#1090=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_70','Private-sector participation (PSP) financial close',#1072,$,$);
+#1091=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_85','Supply chain agreement',#1072,$,$);
+#1092=IFCCLASSIFICATIONREFERENCE($,'PM_50_30_96','Whole-life costing',#1072,$,$);
+#1093=IFCCLASSIFICATIONREFERENCE($,'PM_50_50','Procurement and tendering information',#1071,$,$);
+#1094=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_01','Procurement strategy',#1093,$,$);
+#1095=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_03','Prior information notice',#1093,$,$);
+#1096=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_05','Advance procurement information',#1093,$,$);
+#1097=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_10','Tender enquiry',#1093,$,$);
+#1098=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_12','Tender programme',#1093,$,$);
+#1099=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_15','Tender invitation',#1093,$,$);
+#1100=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_20','Early contractor involvement information',#1093,$,$);
+#1101=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_25','Framework agreement information',#1093,$,$);
+#1102=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_30','Tender acceptance criteria',#1093,$,$);
+#1103=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_35','Tender documents',#1093,$,$);
+#1104=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_40','Private-sector participation (PSP) tender',#1093,$,$);
+#1105=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_45','Tender clarification report',#1093,$,$);
+#1106=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_50','Tender instruction',#1093,$,$);
+#1107=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_55','Tender site visit strategy',#1093,$,$);
+#1108=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_60','Tender return',#1093,$,$);
+#1109=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_65','Tender assessment report',#1093,$,$);
+#1110=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_70','Tender evaluation report',#1093,$,$);
+#1111=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_75','Tender error resolution strategy',#1093,$,$);
+#1112=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_80','Tender acceptance report',#1093,$,$);
+#1113=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_85','Post-tender negotiation',#1093,$,$);
+#1114=IFCCLASSIFICATIONREFERENCE($,'PM_50_50_90','Tender notification',#1093,$,$);
+#1115=IFCCLASSIFICATIONREFERENCE($,'PM_55','Contract information',#10,$,$);
+#1116=IFCCLASSIFICATIONREFERENCE($,'PM_55_15','Contract compliance information',#1115,$,$);
+#1117=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_04','Asset compliance information',#1116,$,$);
+#1118=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_15','Compliance statement',#1116,$,$);
+#1119=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_17','Contract notice',#1116,$,$);
+#1120=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_28','Escrow agreement',#1116,$,$);
+#1121=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_47','Liquidated damages information',#1116,$,$);
+#1122=IFCCLASSIFICATIONREFERENCE($,'PM_55_15_65','Project brief derogations',#1116,$,$);
+#1123=IFCCLASSIFICATIONREFERENCE($,'PM_55_55','Contract',#1115,$,$);
+#1124=IFCCLASSIFICATIONREFERENCE($,'PM_55_55_50','Maintenance contract',#1123,$,$);
+#1125=IFCCLASSIFICATIONREFERENCE($,'PM_55_55_70','Services contract',#1123,$,$);
+#1126=IFCCLASSIFICATIONREFERENCE($,'PM_55_55_80','Supplies contract',#1123,$,$);
+#1127=IFCCLASSIFICATIONREFERENCE($,'PM_55_55_85','Target cost contracts',#1123,$,$);
+#1128=IFCCLASSIFICATIONREFERENCE($,'PM_55_55_90','Works contract',#1123,$,$);
+#1129=IFCCLASSIFICATIONREFERENCE($,'PM_60','Construction management information',#10,$,$);
+#1130=IFCCLASSIFICATIONREFERENCE($,'PM_60_10','Site information',#1129,$,$);
+#1131=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_50','Site access information',#1130,$,$);
+#1132=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_52','Site altitude',#1130,$,$);
+#1133=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_55','Site branding information',#1130,$,$);
+#1134=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_58','Site establishment information',#1130,$,$);
+#1135=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_60','Site grid reference',#1130,$,$);
+#1136=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_63','Site logistics plan',#1130,$,$);
+#1137=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_65','Site safety plan',#1130,$,$);
+#1138=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_70','Site services information',#1130,$,$);
+#1139=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_75','Site set-up information',#1130,$,$);
+#1140=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_77','Site security information',#1130,$,$);
+#1141=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_80','Surrounding land and building uses report',#1130,$,$);
+#1142=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_81','Temporary accommodation information',#1130,$,$);
+#1143=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_83','Temporary services information',#1130,$,$);
+#1144=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_85','Temporary works information',#1130,$,$);
+#1145=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_90','Temporary works impact report',#1130,$,$);
+#1146=IFCCLASSIFICATIONREFERENCE($,'PM_60_10_95','Working area information',#1130,$,$);
+#1147=IFCCLASSIFICATIONREFERENCE($,'PM_60_20','Project requirements',#1129,$,$);
+#1148=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_15','Completion work information',#1147,$,$);
+#1149=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_20','Concurrent work information',#1147,$,$);
+#1150=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_22','Construction method statement',#1147,$,$);
+#1151=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_24','Decant programme',#1147,$,$);
+#1152=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_26','Decant protocol',#1147,$,$);
+#1153=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_28','Embodied carbon assessment',#1147,$,$);
+#1154=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_55','Nominated subcontractor or supplier work information',#1147,$,$);
+#1155=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_60','Pre-construction information',#1147,$,$);
+#1156=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_62','Pre-ordered items information',#1147,$,$);
+#1157=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_64','Prime cost item',#1147,$,$);
+#1158=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_65','Preparatory work information',#1147,$,$);
+#1159=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_67','Provisional item',#1147,$,$);
+#1160=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_70','Red, amber, green (RAG) list compliance',#1147,$,$);
+#1161=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_73','Reuse and recycling information',#1147,$,$);
+#1162=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_79','Setting out methodology',#1147,$,$);
+#1163=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_90','Works by local authority information',#1147,$,$);
+#1164=IFCCLASSIFICATIONREFERENCE($,'PM_60_20_95','Work by statutory undertakers information',#1147,$,$);
+#1165=IFCCLASSIFICATIONREFERENCE($,'PM_60_25','Construction models',#1129,$,$);
+#1166=IFCCLASSIFICATIONREFERENCE($,'PM_60_25_83','Structural fabrication models',#1165,$,$);
+#1167=IFCCLASSIFICATIONREFERENCE($,'PM_60_30','Contract programme and progress',#1129,$,$);
+#1168=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_05','Actions log',#1167,$,$);
+#1169=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_13','Commissioning programme',#1167,$,$);
+#1170=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_15','Contract communications log',#1167,$,$);
+#1171=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_17','Contract consultation strategy',#1167,$,$);
+#1172=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_19','Contract administration information',#1167,$,$);
+#1173=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_20','Contract programme',#1167,$,$);
+#1174=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_22','Delivery risk review',#1167,$,$);
+#1175=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_26','Early warning notice',#1167,$,$);
+#1176=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_27','Excavation sequence programme',#1167,$,$);
+#1177=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_28','Exception report',#1167,$,$);
+#1178=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_37','Highlights report',#1167,$,$);
+#1179=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_40','Issues log',#1167,$,$);
+#1180=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_45','Limitations on method report',#1167,$,$);
+#1181=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_47','Limitations on sequence report',#1167,$,$);
+#1182=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_49','Limitations on timing report',#1167,$,$);
+#1183=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_51','Limitations on use of site report',#1167,$,$);
+#1184=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_57','Notice of commencement',#1167,$,$);
+#1185=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_66','Progress report',#1167,$,$);
+#1186=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_71','Request for information (RFI)',#1167,$,$);
+#1187=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_73','Responsible, accountable, consulted and informed (RACI) log',#1167,$,$);
+#1188=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_77','Site inspection programme',#1167,$,$);
+#1189=IFCCLASSIFICATIONREFERENCE($,'PM_60_30_80','Stage end report',#1167,$,$);
+#1190=IFCCLASSIFICATIONREFERENCE($,'PM_60_40','Meetings and records',#1129,$,$);
+#1191=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_05','Accident report',#1190,$,$);
+#1192=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_40','Labour and equipment record',#1190,$,$);
+#1193=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_50','Meeting agenda',#1190,$,$);
+#1194=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_55','Meeting minutes',#1190,$,$);
+#1195=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_58','Progress photographs',#1190,$,$);
+#1196=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_60','Progress record',#1190,$,$);
+#1197=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_70','Record photographs',#1190,$,$);
+#1198=IFCCLASSIFICATIONREFERENCE($,'PM_60_40_72','Risk register',#1190,$,$);
+#1199=IFCCLASSIFICATIONREFERENCE($,'PM_60_50','Contract cost management',#1129,$,$);
+#1200=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_10','Budget',#1199,$,$);
+#1201=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_12','Cash flow forecast',#1199,$,$);
+#1202=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_16','Compensation event',#1199,$,$);
+#1203=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_17','Completion certificate',#1199,$,$);
+#1204=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_19','Contract change to forecast',#1199,$,$);
+#1205=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_20','Contract instruction',#1199,$,$);
+#1206=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_23','Cost estimate',#1199,$,$);
+#1207=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_25','Cost forecast',#1199,$,$);
+#1208=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_27','Cost information report',#1199,$,$);
+#1209=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_35','Fee note',#1199,$,$);
+#1210=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_37','Financial report',#1199,$,$);
+#1211=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_50','Milestone payment schedule',#1199,$,$);
+#1212=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_58','Order',#1199,$,$);
+#1213=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_60','Payment application',#1199,$,$);
+#1214=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_62','Payment certificate',#1199,$,$);
+#1215=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_63','Pricing document',#1199,$,$);
+#1216=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_67','Purchasing protocol',#1199,$,$);
+#1217=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_69','Quotation',#1199,$,$);
+#1218=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_88','Technical query',#1199,$,$);
+#1219=IFCCLASSIFICATIONREFERENCE($,'PM_60_50_90','Timesheet',#1199,$,$);
+#1220=IFCCLASSIFICATIONREFERENCE($,'PM_60_60','Contract support information',#1129,$,$);
+#1221=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_15','Contract contacts list',#1220,$,$);
+#1222=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_26','Environmental protection information',#1220,$,$);
+#1223=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_40','Insurance policies and records',#1220,$,$);
+#1224=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_44','Lifting plan',#1220,$,$);
+#1225=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_55','Permit to work',#1220,$,$);
+#1226=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_58','Site communication plan',#1220,$,$);
+#1227=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_60','Site control and protection information',#1220,$,$);
+#1228=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_63','Site organization chart',#1220,$,$);
+#1229=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_65','Site personnel records',#1220,$,$);
+#1230=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_70','Site records',#1220,$,$);
+#1231=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_75','Site safety information',#1220,$,$);
+#1232=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_78','Site waste management plan',#1220,$,$);
+#1233=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_88','Temporary services records',#1220,$,$);
+#1234=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_90','Temporary works records',#1220,$,$);
+#1235=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_95','Waste transfer notes\X2\00A0\X0\',#1220,$,$);
+#1236=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_96','Winch operation plan',#1220,$,$);
+#1237=IFCCLASSIFICATIONREFERENCE($,'PM_60_60_98','Work equipment report',#1220,$,$);
+#1238=IFCCLASSIFICATIONREFERENCE($,'PM_60_70','Construction risk management',#1129,$,$);
+#1239=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_03','Asbestos works notification information',#1238,$,$);
+#1240=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_15','Construction notification report',#1238,$,$);
+#1241=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_17','Construction phase health and safety plan',#1238,$,$);
+#1242=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_18','Construction phase risk assessment report',#1238,$,$);
+#1243=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_20','Demolition hazard report',#1238,$,$);
+#1244=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_23','Environmental management plan',#1238,$,$);
+#1245=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_25','Execution hazard report',#1238,$,$);
+#1246=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_38','Health and safety audit report',#1238,$,$);
+#1247=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_40','Health and safety statement',#1238,$,$);
+#1248=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_60','Product hazard report',#1238,$,$);
+#1249=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_66','Safety, health, environment and wellbeing (SHEW) reports',#1238,$,$);
+#1250=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_68','Site hazard report',#1238,$,$);
+#1251=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_70','Site risk assessment',#1238,$,$);
+#1252=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_72','Site risk report',#1238,$,$);
+#1253=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_75','Site security policy',#1238,$,$);
+#1254=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_80','Social responsibility registration scheme',#1238,$,$);
+#1255=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_93','Vehicle safety report',#1238,$,$);
+#1256=IFCCLASSIFICATIONREFERENCE($,'PM_60_70_95','Welfare responsibility registration scheme',#1238,$,$);
+#1257=IFCCLASSIFICATIONREFERENCE($,'PM_60_90','Contract quality standards information',#1129,$,$);
+#1258=IFCCLASSIFICATIONREFERENCE($,'PM_60_90_40','Site inspection report',#1257,$,$);
+#1259=IFCCLASSIFICATIONREFERENCE($,'PM_60_90_46','Lessons learned logs',#1257,$,$);
+#1260=IFCCLASSIFICATIONREFERENCE($,'PM_60_90_47','Lessons learned report',#1257,$,$);
+#1261=IFCCLASSIFICATIONREFERENCE($,'PM_60_90_70','Quality control and management report',#1257,$,$);
+#1262=IFCCLASSIFICATIONREFERENCE($,'PM_70','Testing, commissioning and completion information',#10,$,$);
+#1263=IFCCLASSIFICATIONREFERENCE($,'PM_70_15','Compliance and certification documents',#1262,$,$);
+#1264=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_01','Acoustic test certificate',#1263,$,$);
+#1265=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_02','Airtightness test certificate',#1263,$,$);
+#1266=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_04','Asbestos clearance certificate',#1263,$,$);
+#1267=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_07','Building control completion certificate',#1263,$,$);
+#1268=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_08','Building control occupation certificate',#1263,$,$);
+#1269=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_11','Cabling test certificate',#1263,$,$);
+#1270=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_12','Certificate of making good defects',#1263,$,$);
+#1271=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_13','Chlorination certificate',#1263,$,$);
+#1272=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_16','Control of legionella certificate',#1263,$,$);
+#1273=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_21','Demolition certificate',#1263,$,$);
+#1274=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_23','Disinfection and sterilization certificate',#1263,$,$);
+#1275=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_24','Distribution network operator (DNO) notification certificate',#1263,$,$);
+#1276=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_25','Emergency lighting certificate',#1263,$,$);
+#1277=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_26','Environmental completion certificate',#1263,$,$);
+#1278=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_27','Electrical test certificate',#1263,$,$);
+#1279=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_28','Fire alarm electrical supply test certificate',#1263,$,$);
+#1280=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_29','Fire safety acceptance certificate',#1263,$,$);
+#1281=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_30','Fire-stopping protection certificate',#1263,$,$);
+#1282=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_31','Fire-stopping protection register',#1263,$,$);
+#1283=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_32','Flat roof electronic test results',#1263,$,$);
+#1284=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_33','Gas installation pressure test and purging certificate',#1263,$,$);
+#1285=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_34','Gas installation safety certificate',#1263,$,$);
+#1286=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_40','Incoming gas supply pressure test report',#1263,$,$);
+#1287=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_42','Insurance certificate',#1263,$,$);
+#1288=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_50','Material fire performance test certificate',#1263,$,$);
+#1289=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_60','Party wall certificate',#1263,$,$);
+#1290=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_63','Power metering commissioning certificate',#1263,$,$);
+#1291=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_65','Primary fresh air supply test certificate',#1263,$,$);
+#1292=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_76','Secondary and backup electricity supplies test certificate',#1263,$,$);
+#1293=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_80','Smoke and fire alarm and fire suppression system telephone lines test results',#1263,$,$);
+#1294=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_82','Soak test results',#1263,$,$);
+#1295=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_83','Sports pitch certificate',#1263,$,$);
+#1296=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_84','Structured data cabling test certificate',#1263,$,$);
+#1297=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_85','Sustainable timber certificate',#1263,$,$);
+#1298=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_91','Unvented hot water competence certificate',#1263,$,$);
+#1299=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_95','Water authority compliance certificate',#1263,$,$);
+#1300=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_96','Water quality and flushing test certificate',#1263,$,$);
+#1301=IFCCLASSIFICATIONREFERENCE($,'PM_70_15_98','White lining sign-off certificate',#1263,$,$);
+#1302=IFCCLASSIFICATIONREFERENCE($,'PM_70_30','Equipment certification documents',#1262,$,$);
+#1303=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_02','Air handling unit commissioning certificate',#1302,$,$);
+#1304=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_04','Automatic door test certificate',#1302,$,$);
+#1305=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_06','Boiler commissioning certificate',#1302,$,$);
+#1306=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_08','Booster pump set test certificate',#1302,$,$);
+#1307=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_10','Building management systems (BMS) commissioning certificate',#1302,$,$);
+#1308=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_12','Chilled beam commissioning certificate',#1302,$,$);
+#1309=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_13','Chiller commissioning certificate',#1302,$,$);
+#1310=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_15','Closed-circuit television (CCTV) commissioning certificate',#1302,$,$);
+#1311=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_21','Data cable test certificate',#1302,$,$);
+#1312=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_22','Disabled alarms and disabled refuge alarm testing certificate',#1302,$,$);
+#1313=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_24','Ductwork air leakage test certificate',#1302,$,$);
+#1314=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_25','Fan test certificate',#1302,$,$);
+#1315=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_26','Equipment safety certificate',#1302,$,$);
+#1316=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_27','Fire hydrant and mains commissioning certificate',#1302,$,$);
+#1317=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_28','Fire-rated doors test certificate',#1302,$,$);
+#1318=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_29','Fire-rated glazing and framing test certificate',#1302,$,$);
+#1319=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_30','Fire and smoke damper test certificate',#1302,$,$);
+#1320=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_31','Fan coil unit test certificate',#1302,$,$);
+#1321=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_32','Fume cupboard commissioning certificate',#1302,$,$);
+#1322=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_33','Gas appliance commissioning certificate',#1302,$,$);
+#1323=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_35','Generator commissioning certificate',#1302,$,$);
+#1324=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_37','Heater test certificate',#1302,$,$);
+#1325=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_40','Information and communications technology (ICT) security certification information',#1302,$,$);
+#1326=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_45','Kitchen equipment certificate',#1302,$,$);
+#1327=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_47','Lightning protection certificate',#1302,$,$);
+#1328=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_64','Photovoltaic solar panel test certificate',#1302,$,$);
+#1329=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_66','Pump test certificate',#1302,$,$);
+#1330=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_70','Retractable seating safety certificate',#1302,$,$);
+#1331=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_73','Roller shutter commissioning and conformity certificate',#1302,$,$);
+#1332=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_78','Security and intruder alarm commissioning certificate',#1302,$,$);
+#1333=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_79','Smoke curtain drop test and commissioning certificate',#1302,$,$);
+#1334=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_80','Solar hot water collector commissioning certificate',#1302,$,$);
+#1335=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_83','Sprinkler installation test certificate',#1302,$,$);
+#1336=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_88','Theatre lighting certificate',#1302,$,$);
+#1337=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_92','Uninterruptible power supply (UPS) test certificate',#1302,$,$);
+#1338=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_94','Water heater test certificate',#1302,$,$);
+#1339=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_95','Water treatment equipment test certificate',#1302,$,$);
+#1340=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_97','Window certificates',#1302,$,$);
+#1341=IFCCLASSIFICATIONREFERENCE($,'PM_70_30_98','Workshop equipment commissioning certificate',#1302,$,$);
+#1342=IFCCLASSIFICATIONREFERENCE($,'PM_70_40','Installation inspection information',#1262,$,$);
+#1343=IFCCLASSIFICATIONREFERENCE($,'PM_70_40_23','Drain test inspection report',#1342,$,$);
+#1344=IFCCLASSIFICATIONREFERENCE($,'PM_70_40_28','Fire-rated doors installation inspection report',#1342,$,$);
+#1345=IFCCLASSIFICATIONREFERENCE($,'PM_70_40_30','Fire-stopping installation inspection report',#1342,$,$);
+#1346=IFCCLASSIFICATIONREFERENCE($,'PM_70_40_34','Generator inspection report',#1342,$,$);
+#1347=IFCCLASSIFICATIONREFERENCE($,'PM_70_40_75','Safety glass installation inspection report',#1342,$,$);
+#1348=IFCCLASSIFICATIONREFERENCE($,'PM_70_70','Structural testing information',#1262,$,$);
+#1349=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_13','Cement test report',#1348,$,$);
+#1350=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_15','Concrete cube test report',#1348,$,$);
+#1351=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_17','Concrete design certificate',#1348,$,$);
+#1352=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_18','Concrete mix design certificate',#1348,$,$);
+#1353=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_25','Pile dynamic load testing report',#1348,$,$);
+#1354=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_28','External wall system assessment information',#1348,$,$);
+#1355=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_42','Pile integrity testing report',#1348,$,$);
+#1356=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_70','Pile rapid load testing report',#1348,$,$);
+#1357=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_74','Roof truss certificate',#1348,$,$);
+#1358=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_80','Static loading pile test report',#1348,$,$);
+#1359=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_82','Pile static load testing test records',#1348,$,$);
+#1360=IFCCLASSIFICATIONREFERENCE($,'PM_70_70_96','Wall ties and structural restraint inspection report',#1348,$,$);
+#1361=IFCCLASSIFICATIONREFERENCE($,'PM_70_75','Testing information',#1262,$,$);
+#1362=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_01','Acoustic test report',#1361,$,$);
+#1363=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_02','Air distribution test report',#1361,$,$);
+#1364=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_03','Access equipment test report',#1361,$,$);
+#1365=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_04','Air leakage test certificate',#1361,$,$);
+#1366=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_05','Air quality test certificate',#1361,$,$);
+#1367=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_06','Bathroom pod test certificate',#1361,$,$);
+#1368=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_07','Bell system test report',#1361,$,$);
+#1369=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_08','Boiler test report',#1361,$,$);
+#1370=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_09','Ceiling system fire resistance test report',#1361,$,$);
+#1371=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_10','Chlorination test report',#1361,$,$);
+#1372=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_11','Cable test report',#1361,$,$);
+#1373=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_12','Cladding and curtain walling water test report',#1361,$,$);
+#1374=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_13','Coliform and bacteria count test report',#1361,$,$);
+#1375=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_14','Combined heat and power (CHP) system test report',#1361,$,$);
+#1376=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_15','Control system test report',#1361,$,$);
+#1377=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_17','Co-ordinated shut down interface test report',#1361,$,$);
+#1378=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_21','Disabled alarms and disabled refuge alarm test report',#1361,$,$);
+#1379=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_22','Drainage leakage test results',#1361,$,$);
+#1380=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_23','Ductwork cleaning test certificate',#1361,$,$);
+#1381=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_24','Ductwork cleaning test report',#1361,$,$);
+#1382=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_25','Ductwork pressure test certificate',#1361,$,$);
+#1383=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_27','Electrical installation test report',#1361,$,$);
+#1384=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_28','Emergency lighting test report',#1361,$,$);
+#1385=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_29','Energy meter calibration test report',#1361,$,$);
+#1386=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_30','Fire protection installation test report',#1361,$,$);
+#1387=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_31','Fire alarm test certificate',#1361,$,$);
+#1388=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_32','Fire alarm decibel level test report',#1361,$,$);
+#1389=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_33','Fume cupboard test report',#1361,$,$);
+#1390=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_34','Gas interlock test report',#1361,$,$);
+#1391=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_35','Generator test report',#1361,$,$);
+#1392=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_36','Heating installation test report',#1361,$,$);
+#1393=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_37','High-voltage electrical installation test report',#1361,$,$);
+#1394=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_40','Information and communications technology (ICT) infrastructure test report',#1361,$,$);
+#1395=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_45','Kitchen equipment installation test report',#1361,$,$);
+#1396=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_47','Lifts test report',#1361,$,$);
+#1397=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_48','Lighting lux level test report',#1361,$,$);
+#1398=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_49','Lightning protection installation test report',#1361,$,$);
+#1399=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_52','Monitoring systems connection test report',#1361,$,$);
+#1400=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_61','Perimeter gates test report',#1361,$,$);
+#1401=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_63','Pipeline pressure test certificate',#1361,$,$);
+#1402=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_65','Pressure system installation test report',#1361,$,$);
+#1403=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_68','Public health installation test report',#1361,$,$);
+#1404=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_69','Rainwater drainage system test certificate',#1361,$,$);
+#1405=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_70','Rainwater harvesting system test certificate',#1361,$,$);
+#1406=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_71','Refrigerant pipeline pressure test certificate',#1361,$,$);
+#1407=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_79','Sliding partitions test report',#1361,$,$);
+#1408=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_81','Solar panel wind uplift test report',#1361,$,$);
+#1409=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_83','Sound and lighting systems test report',#1361,$,$);
+#1410=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_85','Surveillance equipment installation test report',#1361,$,$);
+#1411=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_88','Telecommunications installation test report',#1361,$,$);
+#1412=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_94','Ventilation test report',#1361,$,$);
+#1413=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_95','Wastewater drainage system test certificate',#1361,$,$);
+#1414=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_96','Water distribution pressure test report',#1361,$,$);
+#1415=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_97','Window cleaning equipment test report',#1361,$,$);
+#1416=IFCCLASSIFICATIONREFERENCE($,'PM_70_75_98','Workshop equipment test certificate',#1361,$,$);
+#1417=IFCCLASSIFICATIONREFERENCE($,'PM_70_80','Commissioning information',#1262,$,$);
+#1418=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_01','Access control commissioning certificate',#1417,$,$);
+#1419=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_02','Air distribution systems commissioning report',#1417,$,$);
+#1420=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_03','Air conditioning systems commissioning certificate',#1417,$,$);
+#1421=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_04','Air source heat pump commissioning certificate',#1417,$,$);
+#1422=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_05','Audiovisual systems commissioning and acceptance certificate',#1417,$,$);
+#1423=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_07','Bell system commissioning certificate',#1417,$,$);
+#1424=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_11','Chilled water system commissioning certificate',#1417,$,$);
+#1425=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_13','Combined heat and power (CHP) system commissioning certificate',#1417,$,$);
+#1426=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_14','Communications systems commissioning certificate',#1417,$,$);
+#1427=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_15','Control system commissioning report',#1417,$,$);
+#1428=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_22','Domestic hot water commissioning certificate',#1417,$,$);
+#1429=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_24','Dry fire main commissioning certificate',#1417,$,$);
+#1430=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_28','Emergency lighting installation commissioning report',#1417,$,$);
+#1431=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_30','Fire alarm system commissioning certificate',#1417,$,$);
+#1432=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_31','Fire suppression system commissioning certificate',#1417,$,$);
+#1433=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_32','Fume cupboard commissioning report',#1417,$,$);
+#1434=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_34','Ground source heat pump commissioning certificate',#1417,$,$);
+#1435=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_36','Heating system commissioning certificate',#1417,$,$);
+#1436=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_37','Heating system water treatment certificate',#1417,$,$);
+#1437=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_42','Induction loop commissioning certificate',#1417,$,$);
+#1438=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_45','Kitchen ventilation certificate',#1417,$,$);
+#1439=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_46','Lifts commissioning certificate',#1417,$,$);
+#1440=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_47','Lifts commissioning report',#1417,$,$);
+#1441=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_48','Lighting commissioning report',#1417,$,$);
+#1442=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_49','Lighting control certificate',#1417,$,$);
+#1443=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_75','Seasonal commissioning certificate',#1417,$,$);
+#1444=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_77','Security system commissioning report',#1417,$,$);
+#1445=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_79','Smoke extract and control system commissioning certificate',#1417,$,$);
+#1446=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_80','Smoke extract and control system commissioning report',#1417,$,$);
+#1447=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_85','Surveillance system installation commissioning report',#1417,$,$);
+#1448=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_88','Telecommunications installation certificate',#1417,$,$);
+#1449=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_89','Toilet alarm commissioning certificate',#1417,$,$);
+#1450=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_90','Trace heating commissioning certificate',#1417,$,$);
+#1451=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_92','Underfloor heating commissioning certificate',#1417,$,$);
+#1452=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_94','Ventilation commissioning certificate',#1417,$,$);
+#1453=IFCCLASSIFICATIONREFERENCE($,'PM_70_80_96','Water distribution commissioning report',#1417,$,$);
+#1454=IFCCLASSIFICATIONREFERENCE($,'PM_70_85','Completion information',#1262,$,$);
+#1455=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_08','Building logbook',#1454,$,$);
+#1456=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_10','Building manual',#1454,$,$);
+#1457=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_11','Clarifications information',#1454,$,$);
+#1458=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_14','Contractor sign-off report',#1454,$,$);
+#1459=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_15','Construction to occupation transition strategy',#1454,$,$);
+#1460=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_18','Defects notification information',#1454,$,$);
+#1461=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_20','Defects rectification report',#1454,$,$);
+#1462=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_22','Defects register',#1454,$,$);
+#1463=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_25','End user operating information',#1454,$,$);
+#1464=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_30','Final inspection report',#1454,$,$);
+#1465=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_31','Fire safety management plan information',#1454,$,$);
+#1466=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_33','Handover board record of acceptance for occupation',#1454,$,$);
+#1467=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_34','Handover communications information',#1454,$,$);
+#1468=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_35','Handover strategy',#1454,$,$);
+#1469=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_40','Health and safety file',#1454,$,$);
+#1470=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_44','Life expectancy information',#1454,$,$);
+#1471=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_45','List of spares and consumables',#1454,$,$);
+#1472=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_50','Maintenance schedules',#1454,$,$);
+#1473=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_52','Manufacturer information',#1454,$,$);
+#1474=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_55','Operating instruction',#1454,$,$);
+#1475=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_56','Operation and maintenance manual',#1454,$,$);
+#1476=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_60','Plant logbook',#1454,$,$);
+#1477=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_62','Pre-handover plan',#1454,$,$);
+#1478=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_64','Project completion report',#1454,$,$);
+#1479=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_70','Remedial work completion report',#1454,$,$);
+#1480=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_79','Soft landings process information',#1454,$,$);
+#1481=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_83','Supplier directory',#1454,$,$);
+#1482=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_90','Training documentation',#1454,$,$);
+#1483=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_91','Training programme',#1454,$,$);
+#1484=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_92','User acceptance information',#1454,$,$);
+#1485=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_93','Utilities readings',#1454,$,$);
+#1486=IFCCLASSIFICATIONREFERENCE($,'PM_70_85_96','Works completion certificate',#1454,$,$);
+#1487=IFCCLASSIFICATIONREFERENCE($,'PM_70_90','Record information',#1262,$,$);
+#1488=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_04','Architectural record drawings',#1487,$,$);
+#1489=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_15','Control system record drawings',#1487,$,$);
+#1490=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_27','Electrical systems record drawings',#1487,$,$);
+#1491=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_30','Fire system record drawings',#1487,$,$);
+#1492=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_46','Landscape record drawings',#1487,$,$);
+#1493=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_52','Mechanical systems record drawings',#1487,$,$);
+#1494=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_68','Public health system record drawings',#1487,$,$);
+#1495=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_77','Security system record drawings',#1487,$,$);
+#1496=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_79','Setting out records',#1487,$,$);
+#1497=IFCCLASSIFICATIONREFERENCE($,'PM_70_90_83','Structural record drawings',#1487,$,$);
+#1498=IFCCLASSIFICATIONREFERENCE($,'PM_70_95','Project assurance information',#1262,$,$);
+#1499=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_08','Building fabric strategy compliance report',#1498,$,$);
+#1500=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_20','Design compliance review report',#1498,$,$);
+#1501=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_21','Design compliance certificate',#1498,$,$);
+#1502=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_33','Gateway review information',#1498,$,$);
+#1503=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_34','Governance strategy information',#1498,$,$);
+#1504=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_58','Option analysis support paper',#1498,$,$);
+#1505=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_62','Performance testing compliance report',#1498,$,$);
+#1506=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_64','Post-project evaluation information',#1498,$,$);
+#1507=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_66','Project Assurance Group (PAG) sign-off',#1498,$,$);
+#1508=IFCCLASSIFICATIONREFERENCE($,'PM_70_95_70','Risk potential assessment',#1498,$,$);
+#1509=IFCCLASSIFICATIONREFERENCE($,'PM_80','Asset management information',#10,$,$);
+#1510=IFCCLASSIFICATIONREFERENCE($,'PM_80_10','Asset strategy, planning and management information',#1509,$,$);
+#1511=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_01','Asbestos management plan',#1510,$,$);
+#1512=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_03','Asset information protocol',#1510,$,$);
+#1513=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_05','Asset guarantee and warranty information',#1510,$,$);
+#1514=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_07','Asset management responsibility information',#1510,$,$);
+#1515=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_08','Asset management policy information',#1510,$,$);
+#1516=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_09','Asset management strategy information',#1510,$,$);
+#1517=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_10','Asset register',#1510,$,$);
+#1518=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_12','Building performance evaluation plan',#1510,$,$);
+#1519=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_14','Closed-circuit television (CCTV) strategy',#1510,$,$);
+#1520=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_15','Configuration management strategy',#1510,$,$);
+#1521=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_16','Configuration record',#1510,$,$);
+#1522=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_18','Crime prevention strategy',#1510,$,$);
+#1523=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_19','Critical assets list',#1510,$,$);
+#1524=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_20','Deterioration modelling',#1510,$,$);
+#1525=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_22','Display energy certificate',#1510,$,$);
+#1526=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_23','Employment and skills plan',#1510,$,$);
+#1527=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_24','Energy consumption information',#1510,$,$);
+#1528=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_25','Energy performance certificate',#1510,$,$);
+#1529=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_27','Equipment schedule',#1510,$,$);
+#1530=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_30','Finishes information',#1510,$,$);
+#1531=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_32','Furniture audit',#1510,$,$);
+#1532=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_40','Information and communications technology (ICT) protocol',#1510,$,$);
+#1533=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_42','Insurer''s requirements',#1510,$,$);
+#1534=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_44','Landscape and habitat management plan',#1510,$,$);
+#1535=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_45','Lessons learned notice',#1510,$,$);
+#1536=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_47','Loose equipment protocol',#1510,$,$);
+#1537=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_50','Maintenance requirements',#1510,$,$);
+#1538=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_52','Maintenance plan information',#1510,$,$);
+#1539=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_53','Maintenance programme information',#1510,$,$);
+#1540=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_54','Maintenance records',#1510,$,$);
+#1541=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_55','Metering strategy',#1510,$,$);
+#1542=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_56','Non-conformance notification',#1510,$,$);
+#1543=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_57','Non-conformance protocol',#1510,$,$);
+#1544=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_58','Organization chart',#1510,$,$);
+#1545=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_59','Organization operational instructions',#1510,$,$);
+#1546=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_60','Performance analysis',#1510,$,$);
+#1547=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_63','Plant and equipment service life report',#1510,$,$);
+#1548=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_64','Portable appliance test (PAT) information',#1510,$,$);
+#1549=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_65','Post-operational evaluation',#1510,$,$);
+#1550=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_67','Postal arrangements information',#1510,$,$);
+#1551=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_72','Road sewer adoption licence',#1510,$,$);
+#1552=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_78','Scenario modelling',#1510,$,$);
+#1553=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_79','Security management plan',#1510,$,$);
+#1554=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_80','Shoreline management plans',#1510,$,$);
+#1555=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_84','Survey management plan',#1510,$,$);
+#1556=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_88','Telephone system information',#1510,$,$);
+#1557=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_90','Travel plan information',#1510,$,$);
+#1558=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_93','Vehicle parking management plans',#1510,$,$);
+#1559=IFCCLASSIFICATIONREFERENCE($,'PM_80_10_94','Visit questionnaire information',#1510,$,$);
+#1560=IFCCLASSIFICATIONREFERENCE($,'PM_80_15','Asset maintenance information',#1509,$,$);
+#1561=IFCCLASSIFICATIONREFERENCE($,'PM_80_15_31','Fire safety log book',#1560,$,$);
+#1562=IFCCLASSIFICATIONREFERENCE($,'PM_80_15_47','Lighting and small power maintenance strategy',#1560,$,$);
+#1563=IFCCLASSIFICATIONREFERENCE($,'PM_80_15_52','Mechanical, electrical, instrumentation, controls and automation (MEICA) maintenance strategy',#1560,$,$);
+#1564=IFCCLASSIFICATIONREFERENCE($,'PM_80_15_70','Renewable energy equipment maintenance strategy',#1560,$,$);
+#1565=IFCCLASSIFICATIONREFERENCE($,'PM_80_15_94','Ventilation maintenance strategy',#1560,$,$);
+#1566=IFCCLASSIFICATIONREFERENCE($,'PM_80_20','Communications and engagement',#1509,$,$);
+#1567=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_15','Communications log',#1566,$,$);
+#1568=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_17','Consultation strategy',#1566,$,$);
+#1569=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_19','Contacts list',#1566,$,$);
+#1570=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_42','Issued communications',#1566,$,$);
+#1571=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_50','Media communications',#1566,$,$);
+#1572=IFCCLASSIFICATIONREFERENCE($,'PM_80_20_72','Received communications',#1566,$,$);
+#1573=IFCCLASSIFICATIONREFERENCE($,'PM_80_25','Asset impact assessments',#1509,$,$);
+#1574=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_08','Biodiversity net gain assessments',#1573,$,$);
+#1575=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_26','Energy performance assessments',#1573,$,$);
+#1576=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_30','Flood warning area assessments',#1573,$,$);
+#1577=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_36','Health impact assessments',#1573,$,$);
+#1578=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_38','Heritage impact assessments',#1573,$,$);
+#1579=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_46','Land use assessments',#1573,$,$);
+#1580=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_47','Life cycle assessments',#1573,$,$);
+#1581=IFCCLASSIFICATIONREFERENCE($,'PM_80_25_80','Socio-economic impact assessments',#1573,$,$);
+#1582=IFCCLASSIFICATIONREFERENCE($,'PM_80_30','Asset life cycle cost information',#1509,$,$);
+#1583=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_05','Acquisition costs',#1582,$,$);
+#1584=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_07','Asset value calculation information',#1582,$,$);
+#1585=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_12','Capital investment cost information',#1582,$,$);
+#1586=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_30','Finance charges information',#1582,$,$);
+#1587=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_50','Maintenance and repair cost information',#1582,$,$);
+#1588=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_51','Maintenance and lease agreement information',#1582,$,$);
+#1589=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_53','Management cost information',#1582,$,$);
+#1590=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_60','Office services cost information',#1582,$,$);
+#1591=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_63','Operational cost information',#1582,$,$);
+#1592=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_70','Replacement cost information',#1582,$,$);
+#1593=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_80','Staff cost information',#1582,$,$);
+#1594=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_90','Utilities cost information',#1582,$,$);
+#1595=IFCCLASSIFICATIONREFERENCE($,'PM_80_30_96','Written scheme of examination information',#1582,$,$);
+#1596=IFCCLASSIFICATIONREFERENCE($,'PM_80_40','Personnel training information',#1509,$,$);
+#1597=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_30','Fire warden training certificate',#1596,$,$);
+#1598=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_32','First responder training certificate',#1596,$,$);
+#1599=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_36','High-voltage systems operator training certificate',#1596,$,$);
+#1600=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_47','Lift training certificate',#1596,$,$);
+#1601=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_52','Medical gases training certificate',#1596,$,$);
+#1602=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_80','Software training documentation',#1596,$,$);
+#1603=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_89','Training completion reports',#1596,$,$);
+#1604=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_90','Training guides and videos',#1596,$,$);
+#1605=IFCCLASSIFICATIONREFERENCE($,'PM_80_40_96','Water hygiene awareness training certificate',#1596,$,$);
+#1606=IFCCLASSIFICATIONREFERENCE($,'PM_80_50','Emergency strategy information',#1509,$,$);
+#1607=IFCCLASSIFICATIONREFERENCE($,'PM_80_50_20','Disaster recovery strategy',#1606,$,$);
+#1608=IFCCLASSIFICATIONREFERENCE($,'PM_80_50_25','Disaster response strategy',#1606,$,$);
+#1609=IFCCLASSIFICATIONREFERENCE($,'PM_80_50_27','Emergency response packs',#1606,$,$);
+#1610=IFCCLASSIFICATIONREFERENCE($,'PM_80_50_30','Fire evacuation strategy',#1606,$,$);
+#1611=IFCCLASSIFICATIONREFERENCE($,'PM_80_50_80','Security strategy',#1606,$,$);
+#1612=IFCCLASSIFICATIONREFERENCE($,'PM_80_60','Asset risk management information',#1509,$,$);
+#1613=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_12','Change of risk information',#1612,$,$);
+#1614=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_13','Chemical safety data sheets',#1612,$,$);
+#1615=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_15','Compliance risk management information',#1612,$,$);
+#1616=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_30','Financial risk management information',#1612,$,$);
+#1617=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_31','Fire risk assessment information',#1612,$,$);
+#1618=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_32','Flood risk management information',#1612,$,$);
+#1619=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_47','Legionella risk assessment information',#1612,$,$);
+#1620=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_50','Health and safety risk management information',#1612,$,$);
+#1621=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_56','Natural flood risk management information',#1612,$,$);
+#1622=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_60','Operational risk management information',#1612,$,$);
+#1623=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_65','Performance risk management information',#1612,$,$);
+#1624=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_67','Power failure risk management information',#1612,$,$);
+#1625=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_68','Public safety risk management information',#1612,$,$);
+#1626=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_70','Residual risk information',#1612,$,$);
+#1627=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_85','Structural risk assessment information',#1612,$,$);
+#1628=IFCCLASSIFICATIONREFERENCE($,'PM_80_60_97','Working at height compliance test information',#1612,$,$);
+#1629=IFCCLASSIFICATIONREFERENCE($,'En_20','Administrative, commercial and protective service entities',#4,$,$);
+#1630=IFCCLASSIFICATIONREFERENCE($,'En_20_10','Legislative entities',#1629,$,$);
+#1631=IFCCLASSIFICATIONREFERENCE($,'En_20_10_45','Governmental buildings',#1630,$,$);
+#1632=IFCCLASSIFICATIONREFERENCE($,'En_20_15','Administrative office entities',#1629,$,$);
+#1633=IFCCLASSIFICATIONREFERENCE($,'En_20_15_10','Multiple occupation office buildings',#1632,$,$);
+#1634=IFCCLASSIFICATIONREFERENCE($,'En_20_15_70','Single occupation office buildings',#1632,$,$);
+#1635=IFCCLASSIFICATIONREFERENCE($,'En_20_20','Secular representative entities',#1629,$,$);
+#1636=IFCCLASSIFICATIONREFERENCE($,'En_20_20_10','Buildings for representatives of nation states abroad',#1635,$,$);
+#1637=IFCCLASSIFICATIONREFERENCE($,'En_20_20_40','Local government buildings',#1635,$,$);
+#1638=IFCCLASSIFICATIONREFERENCE($,'En_20_20_50','National government buildings',#1635,$,$);
+#1639=IFCCLASSIFICATIONREFERENCE($,'En_20_20_70','Regional government buildings',#1635,$,$);
+#1640=IFCCLASSIFICATIONREFERENCE($,'En_20_45','Motor vehicle maintenance and fuelling entities',#1629,$,$);
+#1641=IFCCLASSIFICATIONREFERENCE($,'En_20_45_50','Motor vehicle fuelling and charging entities',#1640,$,$);
+#1642=IFCCLASSIFICATIONREFERENCE($,'En_20_45_54','Motor vehicle servicing and repair entities',#1640,$,$);
+#1643=IFCCLASSIFICATIONREFERENCE($,'En_20_50','Commercial entities',#1629,$,$);
+#1644=IFCCLASSIFICATIONREFERENCE($,'En_20_50_05','Auction buildings',#1643,$,$);
+#1645=IFCCLASSIFICATIONREFERENCE($,'En_20_50_22','Department stores',#1643,$,$);
+#1646=IFCCLASSIFICATIONREFERENCE($,'En_20_50_29','Financial and professional services buildings',#1643,$,$);
+#1647=IFCCLASSIFICATIONREFERENCE($,'En_20_50_50','Markets',#1643,$,$);
+#1648=IFCCLASSIFICATIONREFERENCE($,'En_20_50_53','Mixed use buildings',#1643,$,$);
+#1649=IFCCLASSIFICATIONREFERENCE($,'En_20_50_55','Motor vehicle sales entities',#1643,$,$);
+#1650=IFCCLASSIFICATIONREFERENCE($,'En_20_50_80','Shop units',#1643,$,$);
+#1651=IFCCLASSIFICATIONREFERENCE($,'En_20_50_85','Supermarkets',#1643,$,$);
+#1652=IFCCLASSIFICATIONREFERENCE($,'En_20_50_97','Wholesale buildings',#1643,$,$);
+#1653=IFCCLASSIFICATIONREFERENCE($,'En_20_55','Postal communications entities',#1629,$,$);
+#1654=IFCCLASSIFICATIONREFERENCE($,'En_20_55_65','Post office buildings',#1653,$,$);
+#1655=IFCCLASSIFICATIONREFERENCE($,'En_20_55_80','Sorting office buildings',#1653,$,$);
+#1656=IFCCLASSIFICATIONREFERENCE($,'En_20_60','Military entities',#1629,$,$);
+#1657=IFCCLASSIFICATIONREFERENCE($,'En_20_60_02','Air force buildings',#1656,$,$);
+#1658=IFCCLASSIFICATIONREFERENCE($,'En_20_60_10','Army buildings',#1656,$,$);
+#1659=IFCCLASSIFICATIONREFERENCE($,'En_20_60_56','Navy buildings',#1656,$,$);
+#1660=IFCCLASSIFICATIONREFERENCE($,'En_20_65','Law enforcement operational entities',#1629,$,$);
+#1661=IFCCLASSIFICATIONREFERENCE($,'En_20_65_09','Police buildings',#1660,$,$);
+#1662=IFCCLASSIFICATIONREFERENCE($,'En_20_70','Judicial entities',#1629,$,$);
+#1663=IFCCLASSIFICATIONREFERENCE($,'En_20_70_40','Law court buildings',#1662,$,$);
+#1664=IFCCLASSIFICATIONREFERENCE($,'En_20_75','Detention entities',#1629,$,$);
+#1665=IFCCLASSIFICATIONREFERENCE($,'En_20_75_10','Detention buildings',#1664,$,$);
+#1666=IFCCLASSIFICATIONREFERENCE($,'En_20_80','Weapons training ranges',#1629,$,$);
+#1667=IFCCLASSIFICATIONREFERENCE($,'En_20_80_29','Firing range buildings',#1666,$,$);
+#1668=IFCCLASSIFICATIONREFERENCE($,'En_20_80_30','Exterior firing ranges',#1666,$,$);
+#1669=IFCCLASSIFICATIONREFERENCE($,'En_20_85','Security entities',#1629,$,$);
+#1670=IFCCLASSIFICATIONREFERENCE($,'En_20_85_15','Security control buildings',#1669,$,$);
+#1671=IFCCLASSIFICATIONREFERENCE($,'En_20_85_30','Security fences',#1669,$,$);
+#1672=IFCCLASSIFICATIONREFERENCE($,'En_20_90','Incident support entities',#1629,$,$);
+#1673=IFCCLASSIFICATIONREFERENCE($,'En_20_90_10','Fire and rescue training buildings',#1672,$,$);
+#1674=IFCCLASSIFICATIONREFERENCE($,'En_20_90_15','Fire station buildings',#1672,$,$);
+#1675=IFCCLASSIFICATIONREFERENCE($,'En_25','Cultural, educational, scientific and information entities',#4,$,$);
+#1676=IFCCLASSIFICATIONREFERENCE($,'En_25_05','Commemoration entities',#1675,$,$);
+#1677=IFCCLASSIFICATIONREFERENCE($,'En_25_05_35','Gardens of remembrance',#1676,$,$);
+#1678=IFCCLASSIFICATIONREFERENCE($,'En_25_05_50','Memorials',#1676,$,$);
+#1679=IFCCLASSIFICATIONREFERENCE($,'En_25_05_55','Monuments',#1676,$,$);
+#1680=IFCCLASSIFICATIONREFERENCE($,'En_25_10','Educational entities',#1675,$,$);
+#1681=IFCCLASSIFICATIONREFERENCE($,'En_25_10_10','Preschool educational buildings',#1680,$,$);
+#1682=IFCCLASSIFICATIONREFERENCE($,'En_25_10_20','Infant educational buildings',#1680,$,$);
+#1683=IFCCLASSIFICATIONREFERENCE($,'En_25_10_30','Primary educational buildings',#1680,$,$);
+#1684=IFCCLASSIFICATIONREFERENCE($,'En_25_10_40','Secondary educational buildings',#1680,$,$);
+#1685=IFCCLASSIFICATIONREFERENCE($,'En_25_10_50','Pre-tertiary educational buildings',#1680,$,$);
+#1686=IFCCLASSIFICATIONREFERENCE($,'En_25_10_60','Tertiary educational buildings',#1680,$,$);
+#1687=IFCCLASSIFICATIONREFERENCE($,'En_25_10_70','Adult educational buildings',#1680,$,$);
+#1688=IFCCLASSIFICATIONREFERENCE($,'En_25_30','Scientific and laboratory entities',#1675,$,$);
+#1689=IFCCLASSIFICATIONREFERENCE($,'En_25_30_40','Laboratory buildings',#1688,$,$);
+#1690=IFCCLASSIFICATIONREFERENCE($,'En_25_30_50','Meteorological stations',#1688,$,$);
+#1691=IFCCLASSIFICATIONREFERENCE($,'En_25_30_60','Observatory buildings',#1688,$,$);
+#1692=IFCCLASSIFICATIONREFERENCE($,'En_25_30_66','Observatory antennas',#1688,$,$);
+#1693=IFCCLASSIFICATIONREFERENCE($,'En_25_30_70','Research buildings',#1688,$,$);
+#1694=IFCCLASSIFICATIONREFERENCE($,'En_25_30_77','Seed banks',#1688,$,$);
+#1695=IFCCLASSIFICATIONREFERENCE($,'En_25_30_90','Triangulation pillars',#1688,$,$);
+#1696=IFCCLASSIFICATIONREFERENCE($,'En_25_50','Exhibition entities',#1675,$,$);
+#1697=IFCCLASSIFICATIONREFERENCE($,'En_25_50_02','Art exhibition buildings',#1696,$,$);
+#1698=IFCCLASSIFICATIONREFERENCE($,'En_25_50_04','Art installations',#1696,$,$);
+#1699=IFCCLASSIFICATIONREFERENCE($,'En_25_50_15','Collection exhibition buildings',#1696,$,$);
+#1700=IFCCLASSIFICATIONREFERENCE($,'En_25_50_29','Fauna exhibition buildings',#1696,$,$);
+#1701=IFCCLASSIFICATIONREFERENCE($,'En_25_50_30','Fauna exhibition grounds',#1696,$,$);
+#1702=IFCCLASSIFICATIONREFERENCE($,'En_25_50_31','Flora exhibition buildings',#1696,$,$);
+#1703=IFCCLASSIFICATIONREFERENCE($,'En_25_50_32','Flora exhibition grounds',#1696,$,$);
+#1704=IFCCLASSIFICATIONREFERENCE($,'En_25_50_54','Multipurpose exhibition buildings',#1696,$,$);
+#1705=IFCCLASSIFICATIONREFERENCE($,'En_25_70','Information entities',#1675,$,$);
+#1706=IFCCLASSIFICATIONREFERENCE($,'En_25_70_02','Archive buildings',#1705,$,$);
+#1707=IFCCLASSIFICATIONREFERENCE($,'En_25_70_11','Clock towers',#1705,$,$);
+#1708=IFCCLASSIFICATIONREFERENCE($,'En_25_70_13','Conference buildings',#1705,$,$);
+#1709=IFCCLASSIFICATIONREFERENCE($,'En_25_70_42','Information kiosks',#1705,$,$);
+#1710=IFCCLASSIFICATIONREFERENCE($,'En_25_70_47','Library buildings',#1705,$,$);
+#1711=IFCCLASSIFICATIONREFERENCE($,'En_25_90','Worship entities',#1675,$,$);
+#1712=IFCCLASSIFICATIONREFERENCE($,'En_25_90_30','Faith worship buildings',#1711,$,$);
+#1713=IFCCLASSIFICATIONREFERENCE($,'En_30','Industrial entities',#4,$,$);
+#1714=IFCCLASSIFICATIONREFERENCE($,'En_30_10','Mineral extraction entities',#1713,$,$);
+#1715=IFCCLASSIFICATIONREFERENCE($,'En_30_10_57','Offshore oil and gas extraction platforms',#1714,$,$);
+#1716=IFCCLASSIFICATIONREFERENCE($,'En_30_10_80','Spoil heaps',#1714,$,$);
+#1717=IFCCLASSIFICATIONREFERENCE($,'En_30_10_85','Surface mining structures',#1714,$,$);
+#1718=IFCCLASSIFICATIONREFERENCE($,'En_30_10_86','Surface mining cuttings',#1714,$,$);
+#1719=IFCCLASSIFICATIONREFERENCE($,'En_30_10_90','Underground mining structures',#1714,$,$);
+#1720=IFCCLASSIFICATIONREFERENCE($,'En_30_20','Nuclear and chemical management entities',#1713,$,$);
+#1721=IFCCLASSIFICATIONREFERENCE($,'En_30_20_15','Radioactivity waste management control buildings',#1720,$,$);
+#1722=IFCCLASSIFICATIONREFERENCE($,'En_30_20_30','High-heat-generating radioactive waste management tunnels',#1720,$,$);
+#1723=IFCCLASSIFICATIONREFERENCE($,'En_30_20_35','High-heat radioactive waste package transfer buildings',#1720,$,$);
+#1724=IFCCLASSIFICATIONREFERENCE($,'En_30_20_45','Low-heat radioactive waste package transfer buildings',#1720,$,$);
+#1725=IFCCLASSIFICATIONREFERENCE($,'En_30_20_60','Low-heat-generating radioactive waste management vault',#1720,$,$);
+#1726=IFCCLASSIFICATIONREFERENCE($,'En_30_20_70','Radioactivity decontamination buildings',#1720,$,$);
+#1727=IFCCLASSIFICATIONREFERENCE($,'En_30_20_75','Radioactivity effluent management buildings',#1720,$,$);
+#1728=IFCCLASSIFICATIONREFERENCE($,'En_30_30','Mineral processing entities',#1713,$,$);
+#1729=IFCCLASSIFICATIONREFERENCE($,'En_30_30_33','Gas processing structures',#1728,$,$);
+#1730=IFCCLASSIFICATIONREFERENCE($,'En_30_30_58','Oil processing structures',#1728,$,$);
+#1731=IFCCLASSIFICATIONREFERENCE($,'En_30_30_59','Ore processing structures',#1728,$,$);
+#1732=IFCCLASSIFICATIONREFERENCE($,'En_30_40','Animal and plant products processing entities',#1713,$,$);
+#1733=IFCCLASSIFICATIONREFERENCE($,'En_30_40_01','Animal processing buildings',#1732,$,$);
+#1734=IFCCLASSIFICATIONREFERENCE($,'En_30_40_20','Crop processing buildings',#1732,$,$);
+#1735=IFCCLASSIFICATIONREFERENCE($,'En_30_40_30','Fish processing buildings',#1732,$,$);
+#1736=IFCCLASSIFICATIONREFERENCE($,'En_30_40_40','Horticultural processing buildings',#1732,$,$);
+#1737=IFCCLASSIFICATIONREFERENCE($,'En_30_40_90','Timber processing buildings',#1732,$,$);
+#1738=IFCCLASSIFICATIONREFERENCE($,'En_30_50','Manufacturing entities',#1713,$,$);
+#1739=IFCCLASSIFICATIONREFERENCE($,'En_30_50_15','Cranes',#1738,$,$);
+#1740=IFCCLASSIFICATIONREFERENCE($,'En_30_50_50','Manufacturing buildings',#1738,$,$);
+#1741=IFCCLASSIFICATIONREFERENCE($,'En_30_60','Cleaning and maintenance entities',#1713,$,$);
+#1742=IFCCLASSIFICATIONREFERENCE($,'En_30_60_20','Decontamination laundry buildings',#1741,$,$);
+#1743=IFCCLASSIFICATIONREFERENCE($,'En_30_60_40','Laundry buildings',#1741,$,$);
+#1744=IFCCLASSIFICATIONREFERENCE($,'En_30_60_50','Maintenance buildings',#1741,$,$);
+#1745=IFCCLASSIFICATIONREFERENCE($,'En_30_60_94','Vehicle-cleaning buildings',#1741,$,$);
+#1746=IFCCLASSIFICATIONREFERENCE($,'En_30_70','Process entities',#1713,$,$);
+#1747=IFCCLASSIFICATIONREFERENCE($,'En_30_70_13','Chimney stacks',#1746,$,$);
+#1748=IFCCLASSIFICATIONREFERENCE($,'En_30_70_15','Conveyors',#1746,$,$);
+#1749=IFCCLASSIFICATIONREFERENCE($,'En_30_70_17','Cooling towers',#1746,$,$);
+#1750=IFCCLASSIFICATIONREFERENCE($,'En_30_70_28','Equipment gantries',#1746,$,$);
+#1751=IFCCLASSIFICATIONREFERENCE($,'En_30_80','Mechanical power generation',#1713,$,$);
+#1752=IFCCLASSIFICATIONREFERENCE($,'En_30_80_96','Watermills',#1751,$,$);
+#1753=IFCCLASSIFICATIONREFERENCE($,'En_30_80_97','Windmills',#1751,$,$);
+#1754=IFCCLASSIFICATIONREFERENCE($,'En_30_85','Marine and water entities',#1713,$,$);
+#1755=IFCCLASSIFICATIONREFERENCE($,'En_30_85_07','Boathouse buildings',#1754,$,$);
+#1756=IFCCLASSIFICATIONREFERENCE($,'En_30_85_08','Boatyard buildings',#1754,$,$);
+#1757=IFCCLASSIFICATIONREFERENCE($,'En_30_85_24','Dry docks',#1754,$,$);
+#1758=IFCCLASSIFICATIONREFERENCE($,'En_30_85_80','Shipyard buildings',#1754,$,$);
+#1759=IFCCLASSIFICATIONREFERENCE($,'En_30_85_97','Wet docks',#1754,$,$);
+#1760=IFCCLASSIFICATIONREFERENCE($,'En_30_90','Warehousing and distribution entities',#1713,$,$);
+#1761=IFCCLASSIFICATIONREFERENCE($,'En_30_90_33','Goods warehousing buildings',#1760,$,$);
+#1762=IFCCLASSIFICATIONREFERENCE($,'En_30_90_35','Goods distribution buildings',#1760,$,$);
+#1763=IFCCLASSIFICATIONREFERENCE($,'En_32','Water and land management entities',#4,$,$);
+#1764=IFCCLASSIFICATIONREFERENCE($,'En_32_10','Agricultural and horticultural entities',#1763,$,$);
+#1765=IFCCLASSIFICATIONREFERENCE($,'En_32_10_02','Arable buildings',#1764,$,$);
+#1766=IFCCLASSIFICATIONREFERENCE($,'En_32_10_04','Arable land',#1764,$,$);
+#1767=IFCCLASSIFICATIONREFERENCE($,'En_32_10_06','Barns',#1764,$,$);
+#1768=IFCCLASSIFICATIONREFERENCE($,'En_32_10_20','Coppices',#1764,$,$);
+#1769=IFCCLASSIFICATIONREFERENCE($,'En_32_10_28','Fishing buildings',#1764,$,$);
+#1770=IFCCLASSIFICATIONREFERENCE($,'En_32_10_29','Fishing cages',#1764,$,$);
+#1771=IFCCLASSIFICATIONREFERENCE($,'En_32_10_30','Forestry buildings',#1764,$,$);
+#1772=IFCCLASSIFICATIONREFERENCE($,'En_32_10_31','Forestry plantations',#1764,$,$);
+#1773=IFCCLASSIFICATIONREFERENCE($,'En_32_10_37','Hedgerows',#1764,$,$);
+#1774=IFCCLASSIFICATIONREFERENCE($,'En_32_10_39','Horticultural buildings',#1764,$,$);
+#1775=IFCCLASSIFICATIONREFERENCE($,'En_32_10_40','Horticultural land',#1764,$,$);
+#1776=IFCCLASSIFICATIONREFERENCE($,'En_32_10_46','Livestock buildings',#1764,$,$);
+#1777=IFCCLASSIFICATIONREFERENCE($,'En_32_10_47','Livestock paddocks and fields',#1764,$,$);
+#1778=IFCCLASSIFICATIONREFERENCE($,'En_32_10_93','Vineyard and winery buildings',#1764,$,$);
+#1779=IFCCLASSIFICATIONREFERENCE($,'En_32_10_94','Vineyard plantations',#1764,$,$);
+#1780=IFCCLASSIFICATIONREFERENCE($,'En_32_15','Dam entities',#1763,$,$);
+#1781=IFCCLASSIFICATIONREFERENCE($,'En_32_15_19','Dam cut-off walls',#1780,$,$);
+#1782=IFCCLASSIFICATIONREFERENCE($,'En_32_15_22','Dam discharge conduits',#1780,$,$);
+#1783=IFCCLASSIFICATIONREFERENCE($,'En_32_15_23','Dam spillways',#1780,$,$);
+#1784=IFCCLASSIFICATIONREFERENCE($,'En_32_15_26','Drop inlet works',#1780,$,$);
+#1785=IFCCLASSIFICATIONREFERENCE($,'En_32_15_27','Emergency spillways',#1780,$,$);
+#1786=IFCCLASSIFICATIONREFERENCE($,'En_32_15_57','Outlet channels',#1780,$,$);
+#1787=IFCCLASSIFICATIONREFERENCE($,'En_32_15_58','Outlet works',#1780,$,$);
+#1788=IFCCLASSIFICATIONREFERENCE($,'En_32_15_85','Spillway gates',#1780,$,$);
+#1789=IFCCLASSIFICATIONREFERENCE($,'En_32_15_88','Toe drains',#1780,$,$);
+#1790=IFCCLASSIFICATIONREFERENCE($,'En_32_20','Designated land entities',#1763,$,$);
+#1791=IFCCLASSIFICATIONREFERENCE($,'En_32_20_65','Plots of land',#1790,$,$);
+#1792=IFCCLASSIFICATIONREFERENCE($,'En_32_35','Grounds',#1763,$,$);
+#1793=IFCCLASSIFICATIONREFERENCE($,'En_32_35_05','Arboretums',#1792,$,$);
+#1794=IFCCLASSIFICATIONREFERENCE($,'En_32_35_15','Community gardens',#1792,$,$);
+#1795=IFCCLASSIFICATIONREFERENCE($,'En_32_35_33','Gardens',#1792,$,$);
+#1796=IFCCLASSIFICATIONREFERENCE($,'En_32_35_36','Hard landscapes',#1792,$,$);
+#1797=IFCCLASSIFICATIONREFERENCE($,'En_32_35_80','Soft landscapes',#1792,$,$);
+#1798=IFCCLASSIFICATIONREFERENCE($,'En_32_40','Land managed entities',#1763,$,$);
+#1799=IFCCLASSIFICATIONREFERENCE($,'En_32_40_20','Cuttings',#1798,$,$);
+#1800=IFCCLASSIFICATIONREFERENCE($,'En_32_40_26','Embankments',#1798,$,$);
+#1801=IFCCLASSIFICATIONREFERENCE($,'En_32_40_30','False cuttings',#1798,$,$);
+#1802=IFCCLASSIFICATIONREFERENCE($,'En_32_40_37','High ground',#1798,$,$);
+#1803=IFCCLASSIFICATIONREFERENCE($,'En_32_40_65','Precipitation compounds',#1798,$,$);
+#1804=IFCCLASSIFICATIONREFERENCE($,'En_32_40_90','Trenches',#1798,$,$);
+#1805=IFCCLASSIFICATIONREFERENCE($,'En_32_50','Marine and waterside entities',#1763,$,$);
+#1806=IFCCLASSIFICATIONREFERENCE($,'En_32_50_20','Degaussing and acoustic ranges',#1805,$,$);
+#1807=IFCCLASSIFICATIONREFERENCE($,'En_32_50_22','Dock buildings',#1805,$,$);
+#1808=IFCCLASSIFICATIONREFERENCE($,'En_32_50_44','Jetties',#1805,$,$);
+#1809=IFCCLASSIFICATIONREFERENCE($,'En_32_50_46','Landing stages',#1805,$,$);
+#1810=IFCCLASSIFICATIONREFERENCE($,'En_32_50_58','Offshore anchorages',#1805,$,$);
+#1811=IFCCLASSIFICATIONREFERENCE($,'En_32_50_63','Piers',#1805,$,$);
+#1812=IFCCLASSIFICATIONREFERENCE($,'En_32_50_65','Pontoons',#1805,$,$);
+#1813=IFCCLASSIFICATIONREFERENCE($,'En_32_50_69','Quays',#1805,$,$);
+#1814=IFCCLASSIFICATIONREFERENCE($,'En_32_50_96','Waterside platforms',#1805,$,$);
+#1815=IFCCLASSIFICATIONREFERENCE($,'En_32_50_98','Wharfs',#1805,$,$);
+#1816=IFCCLASSIFICATIONREFERENCE($,'En_32_60','Pollution control entities',#1763,$,$);
+#1817=IFCCLASSIFICATIONREFERENCE($,'En_32_60_60','Permeable reactive barriers',#1816,$,$);
+#1818=IFCCLASSIFICATIONREFERENCE($,'En_32_65','Natural entities',#1763,$,$);
+#1819=IFCCLASSIFICATIONREFERENCE($,'En_32_65_06','Beaches',#1818,$,$);
+#1820=IFCCLASSIFICATIONREFERENCE($,'En_32_65_13','Cliff faces',#1818,$,$);
+#1821=IFCCLASSIFICATIONREFERENCE($,'En_32_65_14','Cliff toes',#1818,$,$);
+#1822=IFCCLASSIFICATIONREFERENCE($,'En_32_65_15','Clifftops',#1818,$,$);
+#1823=IFCCLASSIFICATIONREFERENCE($,'En_32_65_37','Heathlands',#1818,$,$);
+#1824=IFCCLASSIFICATIONREFERENCE($,'En_32_65_50','Marshes and wet grasslands',#1818,$,$);
+#1825=IFCCLASSIFICATIONREFERENCE($,'En_32_65_51','Meadows',#1818,$,$);
+#1826=IFCCLASSIFICATIONREFERENCE($,'En_32_65_53','Moorlands',#1818,$,$);
+#1827=IFCCLASSIFICATIONREFERENCE($,'En_32_65_55','Mudflats',#1818,$,$);
+#1828=IFCCLASSIFICATIONREFERENCE($,'En_32_65_59','Open grasslands',#1818,$,$);
+#1829=IFCCLASSIFICATIONREFERENCE($,'En_32_65_73','Rocks and screes',#1818,$,$);
+#1830=IFCCLASSIFICATIONREFERENCE($,'En_32_65_75','Sand dunes',#1818,$,$);
+#1831=IFCCLASSIFICATIONREFERENCE($,'En_32_65_76','Scrub',#1818,$,$);
+#1832=IFCCLASSIFICATIONREFERENCE($,'En_32_65_80','Shingle banks',#1818,$,$);
+#1833=IFCCLASSIFICATIONREFERENCE($,'En_32_65_81','Shores',#1818,$,$);
+#1834=IFCCLASSIFICATIONREFERENCE($,'En_32_65_82','Species-rich grassland',#1818,$,$);
+#1835=IFCCLASSIFICATIONREFERENCE($,'En_32_65_95','Washland',#1818,$,$);
+#1836=IFCCLASSIFICATIONREFERENCE($,'En_32_85','Water control and retaining entities',#1763,$,$);
+#1837=IFCCLASSIFICATIONREFERENCE($,'En_32_85_06','Barrier beaches',#1836,$,$);
+#1838=IFCCLASSIFICATIONREFERENCE($,'En_32_85_10','Breakwaters',#1836,$,$);
+#1839=IFCCLASSIFICATIONREFERENCE($,'En_32_85_15','Control gates',#1836,$,$);
+#1840=IFCCLASSIFICATIONREFERENCE($,'En_32_85_23','Debris screens',#1836,$,$);
+#1841=IFCCLASSIFICATIONREFERENCE($,'En_32_85_24','Dolphins',#1836,$,$);
+#1842=IFCCLASSIFICATIONREFERENCE($,'En_32_85_25','Draw-off towers',#1836,$,$);
+#1843=IFCCLASSIFICATIONREFERENCE($,'En_32_85_30','Flood prevention structures',#1836,$,$);
+#1844=IFCCLASSIFICATIONREFERENCE($,'En_32_85_31','Flumes',#1836,$,$);
+#1845=IFCCLASSIFICATIONREFERENCE($,'En_32_85_35','Groynes',#1836,$,$);
+#1846=IFCCLASSIFICATIONREFERENCE($,'En_32_85_45','Levees',#1836,$,$);
+#1847=IFCCLASSIFICATIONREFERENCE($,'En_32_85_59','Outfalls',#1836,$,$);
+#1848=IFCCLASSIFICATIONREFERENCE($,'En_32_85_72','Revetments',#1836,$,$);
+#1849=IFCCLASSIFICATIONREFERENCE($,'En_32_85_75','Sand traps',#1836,$,$);
+#1850=IFCCLASSIFICATIONREFERENCE($,'En_32_85_77','Sea dikes',#1836,$,$);
+#1851=IFCCLASSIFICATIONREFERENCE($,'En_32_85_80','Sluices',#1836,$,$);
+#1852=IFCCLASSIFICATIONREFERENCE($,'En_32_85_82','Spillways',#1836,$,$);
+#1853=IFCCLASSIFICATIONREFERENCE($,'En_32_85_84','Stilling basins',#1836,$,$);
+#1854=IFCCLASSIFICATIONREFERENCE($,'En_32_85_96','Water-retaining walls',#1836,$,$);
+#1855=IFCCLASSIFICATIONREFERENCE($,'En_32_85_97','Weirs',#1836,$,$);
+#1856=IFCCLASSIFICATIONREFERENCE($,'En_32_85_98','Wells',#1836,$,$);
+#1857=IFCCLASSIFICATIONREFERENCE($,'En_32_95','Waterways',#1763,$,$);
+#1858=IFCCLASSIFICATIONREFERENCE($,'En_32_95_14','Channels',#1857,$,$);
+#1859=IFCCLASSIFICATIONREFERENCE($,'En_32_95_16','Complex culverts',#1857,$,$);
+#1860=IFCCLASSIFICATIONREFERENCE($,'En_32_95_23','Ditches',#1857,$,$);
+#1861=IFCCLASSIFICATIONREFERENCE($,'En_32_95_30','Fish, eel and lamprey passes',#1857,$,$);
+#1862=IFCCLASSIFICATIONREFERENCE($,'En_32_95_59','Open channels',#1857,$,$);
+#1863=IFCCLASSIFICATIONREFERENCE($,'En_32_95_80','Simple culverts',#1857,$,$);
+#1864=IFCCLASSIFICATIONREFERENCE($,'En_32_95_85','Surface water channels',#1857,$,$);
+#1865=IFCCLASSIFICATIONREFERENCE($,'En_32_95_86','Swales',#1857,$,$);
+#1866=IFCCLASSIFICATIONREFERENCE($,'En_35','Medical, health, welfare and sanitary entities',#4,$,$);
+#1867=IFCCLASSIFICATIONREFERENCE($,'En_35_10','Medical entities',#1866,$,$);
+#1868=IFCCLASSIFICATIONREFERENCE($,'En_35_10_10','Medical buildings',#1867,$,$);
+#1869=IFCCLASSIFICATIONREFERENCE($,'En_35_50','Welfare entities',#1866,$,$);
+#1870=IFCCLASSIFICATIONREFERENCE($,'En_35_50_21','Day welfare buildings',#1869,$,$);
+#1871=IFCCLASSIFICATIONREFERENCE($,'En_35_50_70','Residential welfare buildings',#1869,$,$);
+#1872=IFCCLASSIFICATIONREFERENCE($,'En_35_50_94','Visitor welfare buildings',#1869,$,$);
+#1873=IFCCLASSIFICATIONREFERENCE($,'En_35_70','Funerary entities',#1866,$,$);
+#1874=IFCCLASSIFICATIONREFERENCE($,'En_35_70_06','Body storage buildings',#1873,$,$);
+#1875=IFCCLASSIFICATIONREFERENCE($,'En_35_70_10','Burial buildings',#1873,$,$);
+#1876=IFCCLASSIFICATIONREFERENCE($,'En_35_70_11','Burial grounds',#1873,$,$);
+#1877=IFCCLASSIFICATIONREFERENCE($,'En_35_70_30','Funeral buildings',#1873,$,$);
+#1878=IFCCLASSIFICATIONREFERENCE($,'En_35_70_60','Medical chimney stacks',#1873,$,$);
+#1879=IFCCLASSIFICATIONREFERENCE($,'En_35_80','Sanitary entities',#1866,$,$);
+#1880=IFCCLASSIFICATIONREFERENCE($,'En_35_80_10','Bathing buildings',#1879,$,$);
+#1881=IFCCLASSIFICATIONREFERENCE($,'En_35_80_90','Toilet buildings',#1879,$,$);
+#1882=IFCCLASSIFICATIONREFERENCE($,'En_35_85','Animal entities',#1866,$,$);
+#1883=IFCCLASSIFICATIONREFERENCE($,'En_35_85_02','Animal cage buildings',#1882,$,$);
+#1884=IFCCLASSIFICATIONREFERENCE($,'En_35_85_03','Animal pen buildings',#1882,$,$);
+#1885=IFCCLASSIFICATIONREFERENCE($,'En_35_85_84','Stable buildings',#1882,$,$);
+#1886=IFCCLASSIFICATIONREFERENCE($,'En_35_90','Animal medical, health, welfare and funerary entities',#1866,$,$);
+#1887=IFCCLASSIFICATIONREFERENCE($,'En_35_90_10','Animal cemeteries',#1886,$,$);
+#1888=IFCCLASSIFICATIONREFERENCE($,'En_35_90_30','Animal funerary buildings',#1886,$,$);
+#1889=IFCCLASSIFICATIONREFERENCE($,'En_35_90_50','Animal medical buildings',#1886,$,$);
+#1890=IFCCLASSIFICATIONREFERENCE($,'En_35_90_80','Small animal treatment buildings',#1886,$,$);
+#1891=IFCCLASSIFICATIONREFERENCE($,'En_40','Recreational entities',#4,$,$);
+#1892=IFCCLASSIFICATIONREFERENCE($,'En_40_05','Amusement entities',#1891,$,$);
+#1893=IFCCLASSIFICATIONREFERENCE($,'En_40_05_03','Amusement buildings',#1892,$,$);
+#1894=IFCCLASSIFICATIONREFERENCE($,'En_40_05_13','Casinos',#1892,$,$);
+#1895=IFCCLASSIFICATIONREFERENCE($,'En_40_05_27','E-sport buildings',#1892,$,$);
+#1896=IFCCLASSIFICATIONREFERENCE($,'En_40_05_42','Indoor fairgrounds',#1892,$,$);
+#1897=IFCCLASSIFICATIONREFERENCE($,'En_40_05_60','Outdoor fairgrounds',#1892,$,$);
+#1898=IFCCLASSIFICATIONREFERENCE($,'En_40_05_68','Public amenities',#1892,$,$);
+#1899=IFCCLASSIFICATIONREFERENCE($,'En_40_20','Dining entities',#1891,$,$);
+#1900=IFCCLASSIFICATIONREFERENCE($,'En_40_20_23','Dining buildings',#1899,$,$);
+#1901=IFCCLASSIFICATIONREFERENCE($,'En_40_35','Historic entities',#1891,$,$);
+#1902=IFCCLASSIFICATIONREFERENCE($,'En_40_35_10','Buildings of historic interest',#1901,$,$);
+#1903=IFCCLASSIFICATIONREFERENCE($,'En_40_35_36','Historic buildings',#1901,$,$);
+#1904=IFCCLASSIFICATIONREFERENCE($,'En_40_60','Performing arts entities',#1891,$,$);
+#1905=IFCCLASSIFICATIONREFERENCE($,'En_40_60_10','Multiple performing arts buildings',#1904,$,$);
+#1906=IFCCLASSIFICATIONREFERENCE($,'En_40_60_70','Single performing arts buildings',#1904,$,$);
+#1907=IFCCLASSIFICATIONREFERENCE($,'En_40_75','Social recreation entities',#1891,$,$);
+#1908=IFCCLASSIFICATIONREFERENCE($,'En_40_75_10','Multiple social recreation buildings',#1907,$,$);
+#1909=IFCCLASSIFICATIONREFERENCE($,'En_40_75_15','Club houses',#1907,$,$);
+#1910=IFCCLASSIFICATIONREFERENCE($,'En_40_75_70','Single social recreation buildings',#1907,$,$);
+#1911=IFCCLASSIFICATIONREFERENCE($,'En_40_75_94','Visitor centres',#1907,$,$);
+#1912=IFCCLASSIFICATIONREFERENCE($,'En_42','Sport and activity entities',#4,$,$);
+#1913=IFCCLASSIFICATIONREFERENCE($,'En_42_15','Courts, pitches and field sports entities',#1912,$,$);
+#1914=IFCCLASSIFICATIONREFERENCE($,'En_42_15_04','Athletics facilities',#1913,$,$);
+#1915=IFCCLASSIFICATIONREFERENCE($,'En_42_15_06','Ball courts',#1913,$,$);
+#1916=IFCCLASSIFICATIONREFERENCE($,'En_42_15_81','Sports grounds',#1913,$,$);
+#1917=IFCCLASSIFICATIONREFERENCE($,'En_42_15_82','Sports pitches',#1913,$,$);
+#1918=IFCCLASSIFICATIONREFERENCE($,'En_42_40','Indoor activity entities',#1912,$,$);
+#1919=IFCCLASSIFICATIONREFERENCE($,'En_42_40_80','Sports buildings',#1918,$,$);
+#1920=IFCCLASSIFICATIONREFERENCE($,'En_42_55','Outdoor activity entities',#1912,$,$);
+#1921=IFCCLASSIFICATIONREFERENCE($,'En_42_55_01','Activity grounds',#1920,$,$);
+#1922=IFCCLASSIFICATIONREFERENCE($,'En_42_55_18','Cricket pavilions',#1920,$,$);
+#1923=IFCCLASSIFICATIONREFERENCE($,'En_42_55_34','Golf driving ranges',#1920,$,$);
+#1924=IFCCLASSIFICATIONREFERENCE($,'En_42_85','Swimming entities',#1912,$,$);
+#1925=IFCCLASSIFICATIONREFERENCE($,'En_42_85_60','Outdoor swimming pools',#1924,$,$);
+#1926=IFCCLASSIFICATIONREFERENCE($,'En_42_85_83','Swimming pool buildings',#1924,$,$);
+#1927=IFCCLASSIFICATIONREFERENCE($,'En_42_90','Water activity entities',#1912,$,$);
+#1928=IFCCLASSIFICATIONREFERENCE($,'En_42_95','Winter sports entities',#1912,$,$);
+#1929=IFCCLASSIFICATIONREFERENCE($,'En_42_95_40','Ice rink buildings',#1928,$,$);
+#1930=IFCCLASSIFICATIONREFERENCE($,'En_42_95_80','Ski resort buildings',#1928,$,$);
+#1931=IFCCLASSIFICATIONREFERENCE($,'En_45','Residential entities',#4,$,$);
+#1932=IFCCLASSIFICATIONREFERENCE($,'En_45_10','Residential buildings',#1931,$,$);
+#1933=IFCCLASSIFICATIONREFERENCE($,'En_45_10_39','Houses',#1932,$,$);
+#1934=IFCCLASSIFICATIONREFERENCE($,'En_45_10_47','Long-term residential buildings',#1932,$,$);
+#1935=IFCCLASSIFICATIONREFERENCE($,'En_45_10_70','Short-term residential buildings',#1932,$,$);
+#1936=IFCCLASSIFICATIONREFERENCE($,'En_45_10_90','Temporary residential buildings',#1932,$,$);
+#1937=IFCCLASSIFICATIONREFERENCE($,'En_50','Waste disposal entities',#4,$,$);
+#1938=IFCCLASSIFICATIONREFERENCE($,'En_50_10','Gas waste collection entities',#1937,$,$);
+#1939=IFCCLASSIFICATIONREFERENCE($,'En_50_20','Non-aqueous waste collection entities',#1937,$,$);
+#1940=IFCCLASSIFICATIONREFERENCE($,'En_50_20_10','Non-aqueous waste collection tanks',#1939,$,$);
+#1941=IFCCLASSIFICATIONREFERENCE($,'En_50_30','Drainage collection entities',#1937,$,$);
+#1942=IFCCLASSIFICATIONREFERENCE($,'En_50_30_25','Drainage collection pipelines',#1941,$,$);
+#1943=IFCCLASSIFICATIONREFERENCE($,'En_50_35','Wastewater collection entities',#1937,$,$);
+#1944=IFCCLASSIFICATIONREFERENCE($,'En_50_35_93','Wastewater collection pumping stations',#1943,$,$);
+#1945=IFCCLASSIFICATIONREFERENCE($,'En_50_35_98','Wastewater collection pipelines',#1943,$,$);
+#1946=IFCCLASSIFICATIONREFERENCE($,'En_50_40','Dry waste collection and distribution',#1937,$,$);
+#1947=IFCCLASSIFICATIONREFERENCE($,'En_50_40_10','Dry waste collection structures',#1946,$,$);
+#1948=IFCCLASSIFICATIONREFERENCE($,'En_50_40_11','Dry waste storage structures',#1946,$,$);
+#1949=IFCCLASSIFICATIONREFERENCE($,'En_50_40_12','Dry waste storage yards',#1946,$,$);
+#1950=IFCCLASSIFICATIONREFERENCE($,'En_50_40_50','Dry waste distribution structures',#1946,$,$);
+#1951=IFCCLASSIFICATIONREFERENCE($,'En_50_50','Gas waste storage, treatment and disposal',#1937,$,$);
+#1952=IFCCLASSIFICATIONREFERENCE($,'En_50_60','Non-aqueous waste storage, treatment and disposal',#1937,$,$);
+#1953=IFCCLASSIFICATIONREFERENCE($,'En_50_70','Drainage storage, treatment and disposal',#1937,$,$);
+#1954=IFCCLASSIFICATIONREFERENCE($,'En_50_75','Wastewater storage, treatment and disposal entities',#1937,$,$);
+#1955=IFCCLASSIFICATIONREFERENCE($,'En_50_75_28','Effluent transfer and disposal pipelines',#1954,$,$);
+#1956=IFCCLASSIFICATIONREFERENCE($,'En_50_75_30','Effluent transfer and disposal pumping stations',#1954,$,$);
+#1957=IFCCLASSIFICATIONREFERENCE($,'En_50_75_68','Wastewater treatment pumping stations',#1954,$,$);
+#1958=IFCCLASSIFICATIONREFERENCE($,'En_50_75_80','Sludge treatment entities',#1954,$,$);
+#1959=IFCCLASSIFICATIONREFERENCE($,'En_50_75_95','Wastewater treatment entities',#1954,$,$);
+#1960=IFCCLASSIFICATIONREFERENCE($,'En_50_75_96','Wastewater storage entities',#1954,$,$);
+#1961=IFCCLASSIFICATIONREFERENCE($,'En_50_80','Dry waste treatment and disposal',#1937,$,$);
+#1962=IFCCLASSIFICATIONREFERENCE($,'En_50_80_40','Dry waste treatment structures',#1961,$,$);
+#1963=IFCCLASSIFICATIONREFERENCE($,'En_50_80_70','Dry waste disposal structures',#1961,$,$);
+#1964=IFCCLASSIFICATIONREFERENCE($,'En_55','Piped supply entities',#4,$,$);
+#1965=IFCCLASSIFICATIONREFERENCE($,'En_55_05','Gas extraction, treatment and storage',#1964,$,$);
+#1966=IFCCLASSIFICATIONREFERENCE($,'En_55_05_30','Gas extraction structures',#1965,$,$);
+#1967=IFCCLASSIFICATIONREFERENCE($,'En_55_05_35','Gas extraction vessels',#1965,$,$);
+#1968=IFCCLASSIFICATIONREFERENCE($,'En_55_05_38','Gas extraction pipelines',#1965,$,$);
+#1969=IFCCLASSIFICATIONREFERENCE($,'En_55_05_40','Gas storage tanks',#1965,$,$);
+#1970=IFCCLASSIFICATIONREFERENCE($,'En_55_05_70','Gas treatment buildings',#1965,$,$);
+#1971=IFCCLASSIFICATIONREFERENCE($,'En_55_05_75','Gas treatment plant',#1965,$,$);
+#1972=IFCCLASSIFICATIONREFERENCE($,'En_55_05_78','Gas treatment pipelines',#1965,$,$);
+#1973=IFCCLASSIFICATIONREFERENCE($,'En_55_10','Liquid fuel extraction and treatment entities',#1964,$,$);
+#1974=IFCCLASSIFICATIONREFERENCE($,'En_55_10_10','Oil extraction structures',#1973,$,$);
+#1975=IFCCLASSIFICATIONREFERENCE($,'En_55_10_45','Oil storage tanks',#1973,$,$);
+#1976=IFCCLASSIFICATIONREFERENCE($,'En_55_10_50','Fuel treatment buildings',#1973,$,$);
+#1977=IFCCLASSIFICATIONREFERENCE($,'En_55_10_55','Fuel treatment tanks',#1973,$,$);
+#1978=IFCCLASSIFICATIONREFERENCE($,'En_55_10_58','Fuel treatment pipelines',#1973,$,$);
+#1979=IFCCLASSIFICATIONREFERENCE($,'En_55_15','Water extraction and treatment entities',#1964,$,$);
+#1980=IFCCLASSIFICATIONREFERENCE($,'En_55_15_50','Raw water treatment entities',#1979,$,$);
+#1981=IFCCLASSIFICATIONREFERENCE($,'En_55_15_72','Raw water pipelines',#1979,$,$);
+#1982=IFCCLASSIFICATIONREFERENCE($,'En_55_15_75','Raw water pumping stations',#1979,$,$);
+#1983=IFCCLASSIFICATIONREFERENCE($,'En_55_15_80','Raw water storage entities',#1979,$,$);
+#1984=IFCCLASSIFICATIONREFERENCE($,'En_55_20','Gas supply entities',#1964,$,$);
+#1985=IFCCLASSIFICATIONREFERENCE($,'En_55_20_50','Gas distribution structures',#1984,$,$);
+#1986=IFCCLASSIFICATIONREFERENCE($,'En_55_20_60','Gas distribution pipelines',#1984,$,$);
+#1987=IFCCLASSIFICATIONREFERENCE($,'En_55_30','Fire-extinguishing supply entities',#1964,$,$);
+#1988=IFCCLASSIFICATIONREFERENCE($,'En_55_40','Steam supply entities',#1964,$,$);
+#1989=IFCCLASSIFICATIONREFERENCE($,'En_55_50','Liquid fuel supply entities',#1964,$,$);
+#1990=IFCCLASSIFICATIONREFERENCE($,'En_55_50_20','Fuel distribution pipelines',#1989,$,$);
+#1991=IFCCLASSIFICATIONREFERENCE($,'En_55_50_45','Liquid fuel distribution buildings',#1989,$,$);
+#1992=IFCCLASSIFICATIONREFERENCE($,'En_55_60','Process liquid supply entities',#1964,$,$);
+#1993=IFCCLASSIFICATIONREFERENCE($,'En_55_70','Water supply entities',#1964,$,$);
+#1994=IFCCLASSIFICATIONREFERENCE($,'En_55_70_85','Treated water pipelines',#1993,$,$);
+#1995=IFCCLASSIFICATIONREFERENCE($,'En_55_70_87','Treated water pumping stations',#1993,$,$);
+#1996=IFCCLASSIFICATIONREFERENCE($,'En_55_70_89','Treated water storage entities',#1993,$,$);
+#1997=IFCCLASSIFICATIONREFERENCE($,'En_55_90','Piped solids supply entities',#1964,$,$);
+#1998=IFCCLASSIFICATIONREFERENCE($,'En_60','Heating, cooling and refrigeration entities',#4,$,$);
+#1999=IFCCLASSIFICATIONREFERENCE($,'En_60_30','Rail and paving heating entities',#1998,$,$);
+#2000=IFCCLASSIFICATIONREFERENCE($,'En_60_40','Space heating and cooling entities',#1998,$,$);
+#2001=IFCCLASSIFICATIONREFERENCE($,'En_60_40_10','District heating buildings',#2000,$,$);
+#2002=IFCCLASSIFICATIONREFERENCE($,'En_60_40_20','District heating pipelines',#2000,$,$);
+#2003=IFCCLASSIFICATIONREFERENCE($,'En_60_40_50','District cooling buildings',#2000,$,$);
+#2004=IFCCLASSIFICATIONREFERENCE($,'En_60_40_60','District cooling pipelines',#2000,$,$);
+#2005=IFCCLASSIFICATIONREFERENCE($,'En_60_60','Refrigeration entities',#1998,$,$);
+#2006=IFCCLASSIFICATIONREFERENCE($,'En_60_80','Drying entities',#1998,$,$);
+#2007=IFCCLASSIFICATIONREFERENCE($,'En_65','Ventilation and air conditioning entities',#4,$,$);
+#2008=IFCCLASSIFICATIONREFERENCE($,'En_65_40','Ventilation entities',#2007,$,$);
+#2009=IFCCLASSIFICATIONREFERENCE($,'En_65_40_80','Shaft and tunnel ventilation plant building',#2008,$,$);
+#2010=IFCCLASSIFICATIONREFERENCE($,'En_65_80','Air conditioning entities',#2007,$,$);
+#2011=IFCCLASSIFICATIONREFERENCE($,'En_70','Electrical power generation and distribution entities',#4,$,$);
+#2012=IFCCLASSIFICATIONREFERENCE($,'En_70_10','Electrical power generation entities',#2011,$,$);
+#2013=IFCCLASSIFICATIONREFERENCE($,'En_70_10_10','Electrical power generation buildings',#2012,$,$);
+#2014=IFCCLASSIFICATIONREFERENCE($,'En_70_10_35','Generator transformer substations',#2012,$,$);
+#2015=IFCCLASSIFICATIONREFERENCE($,'En_70_10_39','Hydroelectric power generation entities',#2012,$,$);
+#2016=IFCCLASSIFICATIONREFERENCE($,'En_70_10_80','Solar panel fields',#2012,$,$);
+#2017=IFCCLASSIFICATIONREFERENCE($,'En_70_10_90','Wind turbines',#2012,$,$);
+#2018=IFCCLASSIFICATIONREFERENCE($,'En_70_30','Electricity distribution and transmission entities',#2011,$,$);
+#2019=IFCCLASSIFICATIONREFERENCE($,'En_70_30_05','Autotransformer feeder stations',#2018,$,$);
+#2020=IFCCLASSIFICATIONREFERENCE($,'En_70_30_18','Electricity transmission pylons and lines',#2018,$,$);
+#2021=IFCCLASSIFICATIONREFERENCE($,'En_70_30_26','Extra-high-voltage sub-transmission substations',#2018,$,$);
+#2022=IFCCLASSIFICATIONREFERENCE($,'En_70_30_28','Extra-high-voltage transmission substations',#2018,$,$);
+#2023=IFCCLASSIFICATIONREFERENCE($,'En_70_30_35','High-voltage distribution substations',#2018,$,$);
+#2024=IFCCLASSIFICATIONREFERENCE($,'En_70_30_45','Low-voltage electricity substations',#2018,$,$);
+#2025=IFCCLASSIFICATIONREFERENCE($,'En_70_30_60','Overhead power distribution lines',#2018,$,$);
+#2026=IFCCLASSIFICATIONREFERENCE($,'En_70_30_90','Underground electricity transmission lines',#2018,$,$);
+#2027=IFCCLASSIFICATIONREFERENCE($,'En_75','Communications, security, safety and protection entities',#4,$,$);
+#2028=IFCCLASSIFICATIONREFERENCE($,'En_75_10','Communication entities',#2027,$,$);
+#2029=IFCCLASSIFICATIONREFERENCE($,'En_75_10_10','Broadcast communications buildings',#2028,$,$);
+#2030=IFCCLASSIFICATIONREFERENCE($,'En_75_10_16','Broadcast communications masts and towers',#2028,$,$);
+#2031=IFCCLASSIFICATIONREFERENCE($,'En_75_10_20','Data centres',#2028,$,$);
+#2032=IFCCLASSIFICATIONREFERENCE($,'En_75_10_50','Mobile telecommunications masts and towers',#2028,$,$);
+#2033=IFCCLASSIFICATIONREFERENCE($,'En_75_10_90','Telecommunications buildings',#2028,$,$);
+#2034=IFCCLASSIFICATIONREFERENCE($,'En_75_30','Signalling entities',#2027,$,$);
+#2035=IFCCLASSIFICATIONREFERENCE($,'En_75_30_10','Peer-to-peer communications buildings',#2034,$,$);
+#2036=IFCCLASSIFICATIONREFERENCE($,'En_75_30_18','Peer-to-peer communications networks',#2034,$,$);
+#2037=IFCCLASSIFICATIONREFERENCE($,'En_75_30_78','Signalling control centres',#2034,$,$);
+#2038=IFCCLASSIFICATIONREFERENCE($,'En_75_40','Security systems entities',#2027,$,$);
+#2039=IFCCLASSIFICATIONREFERENCE($,'En_75_50','Safety and protection entities',#2027,$,$);
+#2040=IFCCLASSIFICATIONREFERENCE($,'En_75_60','Environmental safety entities',#2027,$,$);
+#2041=IFCCLASSIFICATIONREFERENCE($,'En_75_70','Control and management entities',#2027,$,$);
+#2042=IFCCLASSIFICATIONREFERENCE($,'En_75_70_60','Operational control centres',#2041,$,$);
+#2043=IFCCLASSIFICATIONREFERENCE($,'En_75_80','Protection entities',#2027,$,$);
+#2044=IFCCLASSIFICATIONREFERENCE($,'En_80','Transport entities',#4,$,$);
+#2045=IFCCLASSIFICATIONREFERENCE($,'En_80_05','Aerospace entities',#2044,$,$);
+#2046=IFCCLASSIFICATIONREFERENCE($,'En_80_05_01','Air traffic control towers',#2045,$,$);
+#2047=IFCCLASSIFICATIONREFERENCE($,'En_80_05_02','Aircraft hangars',#2045,$,$);
+#2048=IFCCLASSIFICATIONREFERENCE($,'En_80_05_60','Passenger terminal buildings',#2045,$,$);
+#2049=IFCCLASSIFICATIONREFERENCE($,'En_80_05_70','Runways',#2045,$,$);
+#2050=IFCCLASSIFICATIONREFERENCE($,'En_80_05_90','Taxiways',#2045,$,$);
+#2051=IFCCLASSIFICATIONREFERENCE($,'En_80_20','Cable transport entities',#2044,$,$);
+#2052=IFCCLASSIFICATIONREFERENCE($,'En_80_20_11','Cable car entities',#2051,$,$);
+#2053=IFCCLASSIFICATIONREFERENCE($,'En_80_20_12','Cable car stations',#2051,$,$);
+#2054=IFCCLASSIFICATIONREFERENCE($,'En_80_20_86','Suspended cableways',#2051,$,$);
+#2055=IFCCLASSIFICATIONREFERENCE($,'En_80_35','Road entities',#2044,$,$);
+#2056=IFCCLASSIFICATIONREFERENCE($,'En_80_35_01','Access roads',#2055,$,$);
+#2057=IFCCLASSIFICATIONREFERENCE($,'En_80_35_05','Bus lanes',#2055,$,$);
+#2058=IFCCLASSIFICATIONREFERENCE($,'En_80_35_07','Bus maintenance depots',#2055,$,$);
+#2059=IFCCLASSIFICATIONREFERENCE($,'En_80_35_09','Bus and coach stations',#2055,$,$);
+#2060=IFCCLASSIFICATIONREFERENCE($,'En_80_35_34','Guided bus lanes',#2055,$,$);
+#2061=IFCCLASSIFICATIONREFERENCE($,'En_80_35_35','Highway maintenance depots',#2055,$,$);
+#2062=IFCCLASSIFICATIONREFERENCE($,'En_80_35_38','Highway service stations',#2055,$,$);
+#2063=IFCCLASSIFICATIONREFERENCE($,'En_80_35_56','Motorways',#2055,$,$);
+#2064=IFCCLASSIFICATIONREFERENCE($,'En_80_35_67','Private roads',#2055,$,$);
+#2065=IFCCLASSIFICATIONREFERENCE($,'En_80_35_74','Roads',#2055,$,$);
+#2066=IFCCLASSIFICATIONREFERENCE($,'En_80_35_77','Service area buildings',#2055,$,$);
+#2067=IFCCLASSIFICATIONREFERENCE($,'En_80_35_88','Tollgates',#2055,$,$);
+#2068=IFCCLASSIFICATIONREFERENCE($,'En_80_35_89','Tracks',#2055,$,$);
+#2069=IFCCLASSIFICATIONREFERENCE($,'En_80_35_90','Truck maintenance depots',#2055,$,$);
+#2070=IFCCLASSIFICATIONREFERENCE($,'En_80_40','Pathways',#2044,$,$);
+#2071=IFCCLASSIFICATIONREFERENCE($,'En_80_40_02','Active travel networks',#2070,$,$);
+#2072=IFCCLASSIFICATIONREFERENCE($,'En_80_40_08','Bridleways',#2070,$,$);
+#2073=IFCCLASSIFICATIONREFERENCE($,'En_80_40_10','Byways',#2070,$,$);
+#2074=IFCCLASSIFICATIONREFERENCE($,'En_80_40_20','Cycle pathways',#2070,$,$);
+#2075=IFCCLASSIFICATIONREFERENCE($,'En_80_40_30','Footpaths',#2070,$,$);
+#2076=IFCCLASSIFICATIONREFERENCE($,'En_80_40_37','Hiking paths',#2070,$,$);
+#2077=IFCCLASSIFICATIONREFERENCE($,'En_80_40_66','Promenades',#2070,$,$);
+#2078=IFCCLASSIFICATIONREFERENCE($,'En_80_40_70','Rambler ways',#2070,$,$);
+#2079=IFCCLASSIFICATIONREFERENCE($,'En_80_40_90','Trails',#2070,$,$);
+#2080=IFCCLASSIFICATIONREFERENCE($,'En_80_45','Vehicle storage entities',#2044,$,$);
+#2081=IFCCLASSIFICATIONREFERENCE($,'En_80_45_08','Bus parks',#2080,$,$);
+#2082=IFCCLASSIFICATIONREFERENCE($,'En_80_45_11','Car garaging entities',#2080,$,$);
+#2083=IFCCLASSIFICATIONREFERENCE($,'En_80_45_17','Coach parks',#2080,$,$);
+#2084=IFCCLASSIFICATIONREFERENCE($,'En_80_45_20','Cycle shelters',#2080,$,$);
+#2085=IFCCLASSIFICATIONREFERENCE($,'En_80_45_55','Multistorey vehicle parks',#2080,$,$);
+#2086=IFCCLASSIFICATIONREFERENCE($,'En_80_45_85','Surface vehicle parks',#2080,$,$);
+#2087=IFCCLASSIFICATIONREFERENCE($,'En_80_45_89','Truck parks',#2080,$,$);
+#2088=IFCCLASSIFICATIONREFERENCE($,'En_80_45_92','Underground vehicle parks',#2080,$,$);
+#2089=IFCCLASSIFICATIONREFERENCE($,'En_80_50','Railway entities',#2044,$,$);
+#2090=IFCCLASSIFICATIONREFERENCE($,'En_80_50_53','Monorail entities',#2089,$,$);
+#2091=IFCCLASSIFICATIONREFERENCE($,'En_80_50_58','Platforms',#2089,$,$);
+#2092=IFCCLASSIFICATIONREFERENCE($,'En_80_50_60','Rack rail maintenance buildings',#2089,$,$);
+#2093=IFCCLASSIFICATIONREFERENCE($,'En_80_50_62','Rack railways track entities',#2089,$,$);
+#2094=IFCCLASSIFICATIONREFERENCE($,'En_80_50_64','Rail distribution depots',#2089,$,$);
+#2095=IFCCLASSIFICATIONREFERENCE($,'En_80_50_68','Rail marshalling entities',#2089,$,$);
+#2096=IFCCLASSIFICATIONREFERENCE($,'En_80_50_71','Railway corridors',#2089,$,$);
+#2097=IFCCLASSIFICATIONREFERENCE($,'En_80_50_74','Railway stations',#2089,$,$);
+#2098=IFCCLASSIFICATIONREFERENCE($,'En_80_50_78','Rolling stock depots',#2089,$,$);
+#2099=IFCCLASSIFICATIONREFERENCE($,'En_80_50_83','Station buildings',#2089,$,$);
+#2100=IFCCLASSIFICATIONREFERENCE($,'En_80_50_85','Test track entities',#2089,$,$);
+#2101=IFCCLASSIFICATIONREFERENCE($,'En_80_50_86','Track maintenance depots',#2089,$,$);
+#2102=IFCCLASSIFICATIONREFERENCE($,'En_80_50_87','Trackside circuit breaker equipment buildings',#2089,$,$);
+#2103=IFCCLASSIFICATIONREFERENCE($,'En_80_50_88','Train maintenance depots',#2089,$,$);
+#2104=IFCCLASSIFICATIONREFERENCE($,'En_80_50_90','Tramways',#2089,$,$);
+#2105=IFCCLASSIFICATIONREFERENCE($,'En_80_50_94','Underground railway stations',#2089,$,$);
+#2106=IFCCLASSIFICATIONREFERENCE($,'En_80_50_95','Wagon decontamination buildings',#2089,$,$);
+#2107=IFCCLASSIFICATIONREFERENCE($,'En_80_50_97','Wagon maintenance buildings',#2089,$,$);
+#2108=IFCCLASSIFICATIONREFERENCE($,'En_80_70','Marine and waterways transport entities',#2044,$,$);
+#2109=IFCCLASSIFICATIONREFERENCE($,'En_80_70_06','Barge loading terminals',#2108,$,$);
+#2110=IFCCLASSIFICATIONREFERENCE($,'En_80_70_11','Canal channels',#2108,$,$);
+#2111=IFCCLASSIFICATIONREFERENCE($,'En_80_70_15','Canal locks',#2108,$,$);
+#2112=IFCCLASSIFICATIONREFERENCE($,'En_80_70_46','Lake passenger terminals',#2108,$,$);
+#2113=IFCCLASSIFICATIONREFERENCE($,'En_80_70_50','Marinas',#2108,$,$);
+#2114=IFCCLASSIFICATIONREFERENCE($,'En_80_70_52','Marine and waterways passenger terminals',#2108,$,$);
+#2115=IFCCLASSIFICATIONREFERENCE($,'En_80_70_71','River passenger terminals',#2108,$,$);
+#2116=IFCCLASSIFICATIONREFERENCE($,'En_80_90','Transport hub entities',#2044,$,$);
+#2117=IFCCLASSIFICATIONREFERENCE($,'En_80_90_30','Freight depots',#2116,$,$);
+#2118=IFCCLASSIFICATIONREFERENCE($,'En_80_90_66','Rail freight entities',#2116,$,$);
+#2119=IFCCLASSIFICATIONREFERENCE($,'En_80_90_73','Road freight depots',#2116,$,$);
+#2120=IFCCLASSIFICATIONREFERENCE($,'En_80_90_90','Transport interchanges',#2116,$,$);
+#2121=IFCCLASSIFICATIONREFERENCE($,'En_80_94','Bridges',#2044,$,$);
+#2122=IFCCLASSIFICATIONREFERENCE($,'En_80_94_05','Arch bridges',#2121,$,$);
+#2123=IFCCLASSIFICATIONREFERENCE($,'En_80_94_08','Beam bridges',#2121,$,$);
+#2124=IFCCLASSIFICATIONREFERENCE($,'En_80_94_11','Cable-stayed bridges',#2121,$,$);
+#2125=IFCCLASSIFICATIONREFERENCE($,'En_80_94_13','Cantilever bridges',#2121,$,$);
+#2126=IFCCLASSIFICATIONREFERENCE($,'En_80_94_30','Fixed bridges',#2121,$,$);
+#2127=IFCCLASSIFICATIONREFERENCE($,'En_80_94_50','Moveable bridges',#2121,$,$);
+#2128=IFCCLASSIFICATIONREFERENCE($,'En_80_94_85','Suspension bridges',#2121,$,$);
+#2129=IFCCLASSIFICATIONREFERENCE($,'En_80_94_90','Transporter bridges',#2121,$,$);
+#2130=IFCCLASSIFICATIONREFERENCE($,'En_80_94_92','Truss bridges',#2121,$,$);
+#2131=IFCCLASSIFICATIONREFERENCE($,'En_80_96','Tunnels and shafts',#2044,$,$);
+#2132=IFCCLASSIFICATIONREFERENCE($,'En_80_96_17','Cross-passage tunnels',#2131,$,$);
+#2133=IFCCLASSIFICATIONREFERENCE($,'En_80_96_20','Drift tunnels',#2131,$,$);
+#2134=IFCCLASSIFICATIONREFERENCE($,'En_80_96_46','Lined drift tunnels',#2131,$,$);
+#2135=IFCCLASSIFICATIONREFERENCE($,'En_80_96_49','Lined tunnels',#2131,$,$);
+#2136=IFCCLASSIFICATIONREFERENCE($,'En_80_96_58','Operational caverns',#2131,$,$);
+#2137=IFCCLASSIFICATIONREFERENCE($,'En_80_96_70','Running tunnels',#2131,$,$);
+#2138=IFCCLASSIFICATIONREFERENCE($,'En_80_96_80','Shafts',#2131,$,$);
+#2139=IFCCLASSIFICATIONREFERENCE($,'En_80_96_89','Tunnel approach ramps',#2131,$,$);
+#2140=IFCCLASSIFICATIONREFERENCE($,'En_80_96_90','Tunnels',#2131,$,$);
+#2141=IFCCLASSIFICATIONREFERENCE($,'En_80_96_91','Tunnel portals',#2131,$,$);
+#2142=IFCCLASSIFICATIONREFERENCE($,'En_80_96_92','Underpasses',#2131,$,$);
+#2143=IFCCLASSIFICATIONREFERENCE($,'En_82','Vehicle entities',#4,$,$);
+#2144=IFCCLASSIFICATIONREFERENCE($,'En_82_48','Locomotive entities',#2143,$,$);
+#2145=IFCCLASSIFICATIONREFERENCE($,'En_82_48_07','Battery-electric locomotive entities',#2144,$,$);
+#2146=IFCCLASSIFICATIONREFERENCE($,'En_82_48_15','Conductor rail electric locomotive entities',#2144,$,$);
+#2147=IFCCLASSIFICATIONREFERENCE($,'En_82_48_23','Diesel locomotive entities',#2144,$,$);
+#2148=IFCCLASSIFICATIONREFERENCE($,'En_82_48_59','Overhead line electric locomotive entities',#2144,$,$);
+#2149=IFCCLASSIFICATIONREFERENCE($,'En_82_48_84','Steam locomotive entities',#2144,$,$);
+#2150=IFCCLASSIFICATIONREFERENCE($,'En_82_55','Multiple-unit (MU) train entities',#2143,$,$);
+#2151=IFCCLASSIFICATIONREFERENCE($,'En_82_55_23','Diesel multiple-unit (DMU) train entities',#2150,$,$);
+#2152=IFCCLASSIFICATIONREFERENCE($,'En_82_55_27','Electric multiple-unit (EMU) train entities',#2150,$,$);
+#2153=IFCCLASSIFICATIONREFERENCE($,'En_82_70','Railway vehicle entities',#2143,$,$);
+#2154=IFCCLASSIFICATIONREFERENCE($,'En_82_70_30','Flat wagons',#2153,$,$);
+#2155=IFCCLASSIFICATIONREFERENCE($,'En_82_70_38','Hopper wagons',#2153,$,$);
+#2156=IFCCLASSIFICATIONREFERENCE($,'En_82_70_53','Motor bogies',#2153,$,$);
+#2157=IFCCLASSIFICATIONREFERENCE($,'En_82_70_70','Railway wagons',#2153,$,$);
+#2158=IFCCLASSIFICATIONREFERENCE($,'En_82_70_73','Road-rail vehicles',#2153,$,$);
+#2159=IFCCLASSIFICATIONREFERENCE($,'En_82_70_77','Shunting vehicles',#2153,$,$);
+#2160=IFCCLASSIFICATIONREFERENCE($,'En_82_70_79','Sleeper wagons',#2153,$,$);
+#2161=IFCCLASSIFICATIONREFERENCE($,'En_82_70_83','Spoil wagons',#2153,$,$);
+#2162=IFCCLASSIFICATIONREFERENCE($,'En_82_70_89','Trailer bogies',#2153,$,$);
+#2163=IFCCLASSIFICATIONREFERENCE($,'En_82_70_93','Ultrasonic testing trolleys',#2153,$,$);
+#2164=IFCCLASSIFICATIONREFERENCE($,'En_90','Circulation, storage and general entities',#4,$,$);
+#2165=IFCCLASSIFICATIONREFERENCE($,'En_90_10','Circulation entities',#2164,$,$);
+#2166=IFCCLASSIFICATIONREFERENCE($,'En_90_10_02','Access stairways and walkways',#2165,$,$);
+#2167=IFCCLASSIFICATIONREFERENCE($,'En_90_10_42','Inspection galleries',#2165,$,$);
+#2168=IFCCLASSIFICATIONREFERENCE($,'En_90_10_62','Pedestrianized areas',#2165,$,$);
+#2169=IFCCLASSIFICATIONREFERENCE($,'En_90_10_77','External service areas',#2165,$,$);
+#2170=IFCCLASSIFICATIONREFERENCE($,'En_90_30','Construction entities',#2164,$,$);
+#2171=IFCCLASSIFICATIONREFERENCE($,'En_90_30_10','Building envelope',#2170,$,$);
+#2172=IFCCLASSIFICATIONREFERENCE($,'En_90_30_15','Construction sites',#2170,$,$);
+#2173=IFCCLASSIFICATIONREFERENCE($,'En_90_30_95','Work areas',#2170,$,$);
+#2174=IFCCLASSIFICATIONREFERENCE($,'En_90_50','Storage entities',#2164,$,$);
+#2175=IFCCLASSIFICATIONREFERENCE($,'En_90_50_02','Agricultural storage buildings',#2174,$,$);
+#2176=IFCCLASSIFICATIONREFERENCE($,'En_90_50_03','Agricultural storage silos',#2174,$,$);
+#2177=IFCCLASSIFICATIONREFERENCE($,'En_90_50_28','Explosives stores',#2174,$,$);
+#2178=IFCCLASSIFICATIONREFERENCE($,'En_90_50_50','Manufacturing tanks and silos',#2174,$,$);
+#2179=IFCCLASSIFICATIONREFERENCE($,'En_90_50_53','Mineral storage silos',#2174,$,$);
+#2180=IFCCLASSIFICATIONREFERENCE($,'En_90_50_55','Motor vehicle storage entities',#2174,$,$);
+#2181=IFCCLASSIFICATIONREFERENCE($,'En_90_50_68','Refrigerated container storage entities',#2174,$,$);
+#2182=IFCCLASSIFICATIONREFERENCE($,'En_90_50_75','Salt storage barns',#2174,$,$);
+#2183=IFCCLASSIFICATIONREFERENCE($,'En_90_50_80','Storage buildings',#2174,$,$);
+#2184=IFCCLASSIFICATIONREFERENCE($,'En_90_90','Plant and control entities',#2164,$,$);
+#2185=IFCCLASSIFICATIONREFERENCE($,'En_90_90_09','Buried services routes',#2184,$,$);
+#2186=IFCCLASSIFICATIONREFERENCE($,'En_90_90_11','Cable routes',#2184,$,$);
+#2187=IFCCLASSIFICATIONREFERENCE($,'En_90_90_27','Environment monitoring buildings',#2184,$,$);
+#2188=IFCCLASSIFICATIONREFERENCE($,'En_90_90_33','Gauge houses',#2184,$,$);
+#2189=IFCCLASSIFICATIONREFERENCE($,'En_90_90_35','Gauging station buildings',#2184,$,$);
+#2190=IFCCLASSIFICATIONREFERENCE($,'En_90_90_50','Mechanical services buildings',#2184,$,$);
+#2191=IFCCLASSIFICATIONREFERENCE($,'En_90_90_64','Plant and equipment buildings',#2184,$,$);
+#2192=IFCCLASSIFICATIONREFERENCE($,'En_90_90_68','Pump houses',#2184,$,$);
+#2193=IFCCLASSIFICATIONREFERENCE($,'En_90_90_80','Services routes',#2184,$,$);
+#2194=IFCCLASSIFICATIONREFERENCE($,'Pr_15','Preparatory products',#8,$,$);
+#2195=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31','Formless preparatory products',#2194,$,$);
+#2196=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04','Applied cleaning and treatment products',#2195,$,$);
+#2197=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_02','Acid neutralization products',#2196,$,$);
+#2198=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_06','Biocidal cleaning solutions',#2196,$,$);
+#2199=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_10','Chemical absorbent products',#2196,$,$);
+#2200=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_11','Chemical cleaning gels and liquids',#2196,$,$);
+#2201=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_12','Chemical poultices',#2196,$,$);
+#2202=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_13','Cleaners',#2196,$,$);
+#2203=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_14','Cleaning agents',#2196,$,$);
+#2204=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_15','Concrete surface retarders',#2196,$,$);
+#2205=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_16','Concrete treatment surface and injection chemicals',#2196,$,$);
+#2206=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_20','Curing compounds',#2196,$,$);
+#2207=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_23','De-icing chemicals',#2196,$,$);
+#2208=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_34','Graffiti-removing chemicals',#2196,$,$);
+#2209=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_35','Grit',#2196,$,$);
+#2210=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_53','Mould removers',#2196,$,$);
+#2211=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_58','Oil-absorbent products',#2196,$,$);
+#2212=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_60','Paint removers',#2196,$,$);
+#2213=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_64','Plain poultices',#2196,$,$);
+#2214=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_72','Rock salt',#2196,$,$);
+#2215=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_77','Shampoos',#2196,$,$);
+#2216=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_80','Snow-clearing chemicals',#2196,$,$);
+#2217=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_81','Solvents',#2196,$,$);
+#2218=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_84','Spot-removing chemicals',#2196,$,$);
+#2219=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_85','Sugar soap',#2196,$,$);
+#2220=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_04_86','Surface cleaners',#2196,$,$);
+#2221=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_12','Chemical soils stabilizers',#2195,$,$);
+#2222=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_12_42','Injectable resinous soil stabilizers',#2221,$,$);
+#2223=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26','Excavated earth and fill materials',#2195,$,$);
+#2224=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_02','Asphalt arisings granular unbound mixtures',#2223,$,$);
+#2225=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_07','Bentonite',#2223,$,$);
+#2226=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_13','Chalk',#2223,$,$);
+#2227=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_14','Clay',#2223,$,$);
+#2228=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_15','Coarse no fines rubble fill materials',#2223,$,$);
+#2229=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_17','Cohesive material',#2223,$,$);
+#2230=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_18','Close-graded granular unbound mixtures',#2223,$,$);
+#2231=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_26','Earth',#2223,$,$);
+#2232=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_31','Glass bottles',#2223,$,$);
+#2233=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_33','Graded granular fill materials',#2223,$,$);
+#2234=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_34','Graded natural granular fill materials',#2223,$,$);
+#2235=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_35','Graded recycled granular fill materials',#2223,$,$);
+#2236=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_36','Hardcore',#2223,$,$);
+#2237=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_39','Higher fines content well graded granular mixtures',#2223,$,$);
+#2238=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_42','Hoggin',#2223,$,$);
+#2239=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_46','Landscape area fill materials',#2223,$,$);
+#2240=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_50','Made ground',#2223,$,$);
+#2241=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_58','Open-graded granular unbound mixtures',#2223,$,$);
+#2242=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_71','River deposits',#2223,$,$);
+#2243=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_75','Sand',#2223,$,$);
+#2244=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_90','Topsoil',#2223,$,$);
+#2245=IFCCLASSIFICATIONREFERENCE($,'Pr_15_31_26_96','Well graded granular unbound mixtures',#2223,$,$);
+#2246=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57','Non-rigid sheet, mat and strip preparatory products',#2194,$,$);
+#2247=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_04','Applied cleaning and repair products',#2246,$,$);
+#2248=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_04_34','Graffiti-removing wipes',#2247,$,$);
+#2249=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25','Geocells',#2246,$,$);
+#2250=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_03','Acrylonitrile butadiene styrene (ABS) geocell boards',#2249,$,$);
+#2251=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_04','Acrylonitrile butadiene styrene (ABS) geocell sheets',#2249,$,$);
+#2252=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_32','Geocell boards',#2249,$,$);
+#2253=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_33','Geocell sheets',#2249,$,$);
+#2254=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_35','Heavy-duty polystyrene geocell boards',#2249,$,$);
+#2255=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_36','Heavy-duty polystyrene geocell sheets',#2249,$,$);
+#2256=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_39','High-density polyethylene (PE-HD) geocell boards',#2249,$,$);
+#2257=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_40','High-density polyethylene (PE-HD) geocell sheets',#2249,$,$);
+#2258=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_57','Needle-punched polyester linen',#2249,$,$);
+#2259=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_70','Polyester strips',#2249,$,$);
+#2260=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_74','Polypropylene geocell boards',#2249,$,$);
+#2261=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_25_75','Polypropylene geocell sheets',#2249,$,$);
+#2262=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27','Geocomposites',#2246,$,$);
+#2263=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_33','Geocomposite sheets',#2262,$,$);
+#2264=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_36','Geocomposite studded sheets',#2262,$,$);
+#2265=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_38','Geomembrane geogrid composite sheets',#2262,$,$);
+#2266=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_39','Geosynthetic clay liners (GCLs)',#2262,$,$);
+#2267=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_43','Geotextile geogrid composite sheets',#2262,$,$);
+#2268=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_45','Geotextile geomembrane composite sheets',#2262,$,$);
+#2269=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_47','Geotextile geonet composite sheets',#2262,$,$);
+#2270=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_49','Geotextile plastics composite sheets',#2262,$,$);
+#2271=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_27_60','Plastics geocomposite sheets',#2262,$,$);
+#2272=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_30','Geomembranes',#2246,$,$);
+#2273=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33','Geosynthetics',#2246,$,$);
+#2274=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_36','Geogrids',#2273,$,$);
+#2275=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_37','Geomats',#2273,$,$);
+#2276=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_38','Geonets',#2273,$,$);
+#2277=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_39','Geowebs',#2273,$,$);
+#2278=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_41','High-density polyethylene (PE-HD) geogrids',#2273,$,$);
+#2279=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_42','High-density polyethylene (PE-HD) geonets',#2273,$,$);
+#2280=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_64','Plastics geogrids',#2273,$,$);
+#2281=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_75','Polyester geogrids',#2273,$,$);
+#2282=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_77','Polyethylene geomats',#2273,$,$);
+#2283=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_79','Polymeric rib geonets',#2273,$,$);
+#2284=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_80','Polyolefin geomats',#2273,$,$);
+#2285=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_85','Spun-bonded polypropylene (PP) membranes',#2273,$,$);
+#2286=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_33_97','Woven polypropylene (PP) membranes',#2273,$,$);
+#2287=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_35','Geotextiles',#2246,$,$);
+#2288=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_35_56','Natural material geotextiles',#2287,$,$);
+#2289=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_35_57','Needle-punched non-woven geotextiles',#2287,$,$);
+#2290=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_35_61','Plastics geotextiles',#2287,$,$);
+#2291=IFCCLASSIFICATIONREFERENCE($,'Pr_15_57_35_88','Thermally bonded non-woven geotextiles',#2287,$,$);
+#2292=IFCCLASSIFICATIONREFERENCE($,'Pr_15_71','Rigid board, panel and sheet preparatory products',#2194,$,$);
+#2293=IFCCLASSIFICATIONREFERENCE($,'Pr_15_71_90','Trench boards and sheets',#2292,$,$);
+#2294=IFCCLASSIFICATIONREFERENCE($,'Pr_15_71_90_90','Trench boards',#2293,$,$);
+#2295=IFCCLASSIFICATIONREFERENCE($,'Pr_15_71_90_91','Trench sheets',#2293,$,$);
+#2296=IFCCLASSIFICATIONREFERENCE($,'Pr_15_93','Unit preparatory products',#2194,$,$);
+#2297=IFCCLASSIFICATIONREFERENCE($,'Pr_15_93_30','Fill blocks',#2296,$,$);
+#2298=IFCCLASSIFICATIONREFERENCE($,'Pr_15_93_30_28','Expanded polystyrene (EPS) fill blocks',#2297,$,$);
+#2299=IFCCLASSIFICATIONREFERENCE($,'Pr_20','Structure and general products',#8,$,$);
+#2300=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29','Fastener products',#2299,$,$);
+#2301=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03','Anchors and components',#2300,$,$);
+#2302=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_04','Anchor blocks',#2301,$,$);
+#2303=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_05','Anchor rails',#2301,$,$);
+#2304=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_10','Carbon steel anchor plates',#2301,$,$);
+#2305=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_11','Carbon steel chemical anchor rods',#2301,$,$);
+#2306=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_12','Carbon steel chemical anchor sockets',#2301,$,$);
+#2307=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_13','Carbon steel post base plates',#2301,$,$);
+#2308=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_14','Carbon steel post spikes',#2301,$,$);
+#2309=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_15','Cavity anchors',#2301,$,$);
+#2310=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_16','Chemical anchor capsules',#2301,$,$);
+#2311=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_17','Chemical anchor cartridges',#2301,$,$);
+#2312=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_18','Chemical anchors',#2301,$,$);
+#2313=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_28','Expansion anchors',#2301,$,$);
+#2314=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_30','Fixing discs',#2301,$,$);
+#2315=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_31','Framing anchors',#2301,$,$);
+#2316=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_32','Framing fasteners',#2301,$,$);
+#2317=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_33','Ground anchor heads',#2301,$,$);
+#2318=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_34','Ground plate anchors',#2301,$,$);
+#2319=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_35','Grouted ground anchors',#2301,$,$);
+#2320=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_36','Hammer-in fasteners',#2301,$,$);
+#2321=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_44','J-pins',#2301,$,$);
+#2322=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_47','Lifting anchors',#2301,$,$);
+#2323=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_48','Lifting hoops',#2301,$,$);
+#2324=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_66','Prestressing anchors',#2301,$,$);
+#2325=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_72','Rock bolts',#2301,$,$);
+#2326=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_73','Rock dowels',#2301,$,$);
+#2327=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_77','Socket anchors',#2301,$,$);
+#2328=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_79','Split rings',#2301,$,$);
+#2329=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_80','Sprayed concrete anchor studs',#2301,$,$);
+#2330=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_81','Sprayed concrete ties',#2301,$,$);
+#2331=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_82','Stainless steel anchor plates',#2301,$,$);
+#2332=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_83','Stainless steel chemical anchor rods',#2301,$,$);
+#2333=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_84','Stainless steel chemical anchor sockets',#2301,$,$);
+#2334=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_86','Structural anchors',#2301,$,$);
+#2335=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_88','Threaded anchors',#2301,$,$);
+#2336=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_92','Undercut anchors',#2301,$,$);
+#2337=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_03_97','Wedge anchors',#2301,$,$);
+#2338=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_04','Angle fasteners',#2300,$,$);
+#2339=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_04_26','Equal angles fasteners',#2338,$,$);
+#2340=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_04_27','Equipment fasteners',#2338,$,$);
+#2341=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08','Bolts and accessories',#2300,$,$);
+#2342=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_04','Anchor bolts',#2341,$,$);
+#2343=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_07','Black hexagon nuts and bolts',#2341,$,$);
+#2344=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_08','Bolt boxes',#2341,$,$);
+#2345=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_11','Carbon steel hexagon-headed nuts and bolts',#2341,$,$);
+#2346=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_12','Carbon steel hook bolts',#2341,$,$);
+#2347=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_15','Coach bolts and nuts',#2341,$,$);
+#2348=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_18','Crossing bolts',#2341,$,$);
+#2349=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_26','Elevator bolts',#2341,$,$);
+#2350=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_27','Eye bolts',#2341,$,$);
+#2351=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_28','Expanding bolts',#2341,$,$);
+#2352=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_30','Fishplate bolts',#2341,$,$);
+#2353=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_32','Flangeway bolts',#2341,$,$);
+#2354=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_36','Hanger bolts',#2341,$,$);
+#2355=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_38','Holding down bolt assemblies',#2341,$,$);
+#2356=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_42','Indented bolts',#2341,$,$);
+#2357=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_46','Lag bolts',#2341,$,$);
+#2358=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_57','Nylon gutter bolts',#2341,$,$);
+#2359=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_66','Preloaded bolt assemblies',#2341,$,$);
+#2360=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_70','Rail securing bolts',#2341,$,$);
+#2361=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_76','Shear bolts',#2341,$,$);
+#2362=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_78','Shoulder bolts',#2341,$,$);
+#2363=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_83','Stainless steel gutter bolts',#2341,$,$);
+#2364=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_84','Stainless steel hexagon-headed nuts and bolts',#2341,$,$);
+#2365=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_85','Stainless steel hook bolts',#2341,$,$);
+#2366=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_86','Stud bolts',#2341,$,$);
+#2367=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_08_92','U-bolts',#2341,$,$);
+#2368=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10','Bridge suspension cable accessories',#2300,$,$);
+#2369=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_11','Cable sleeves',#2368,$,$);
+#2370=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_12','Cable strand sockets',#2368,$,$);
+#2371=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_13','Cast steel anchorage couplers',#2368,$,$);
+#2372=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_14','Cast steel cable bands',#2368,$,$);
+#2373=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_15','Cast steel saddles',#2368,$,$);
+#2374=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_16','Cast steel suspender sockets',#2368,$,$);
+#2375=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_21','Dampers',#2368,$,$);
+#2376=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_10_79','Sleeve clamps',#2368,$,$);
+#2377=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14','Clips, clamps and couplers',#2300,$,$);
+#2378=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_07','Beam clamps',#2377,$,$);
+#2379=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_08','Beam clips',#2377,$,$);
+#2380=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_13','Circlips',#2377,$,$);
+#2381=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_15','Coupler connections',#2377,$,$);
+#2382=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_16','Colour pipe clips',#2377,$,$);
+#2383=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_17','Copper clips',#2377,$,$);
+#2384=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_22','Deck board clips',#2377,$,$);
+#2385=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_24','Drainage pipe clips',#2377,$,$);
+#2386=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_28','Fence mesh clips',#2377,$,$);
+#2387=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_29','Fence netting clips',#2377,$,$);
+#2388=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_30','Fence panel clips',#2377,$,$);
+#2389=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_31','Floor clips',#2377,$,$);
+#2390=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_32','Frame cramps',#2377,$,$);
+#2391=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_33','Glass panel fixing clips',#2377,$,$);
+#2392=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_34','Glass-to-glass clips',#2377,$,$);
+#2393=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_35','Glass-to-wall clips',#2377,$,$);
+#2394=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_36','Girder clamps',#2377,$,$);
+#2395=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_40','Iron clips',#2377,$,$);
+#2396=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_45','Lift-off panel clips',#2377,$,$);
+#2397=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_50','Masonry cramps',#2377,$,$);
+#2398=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_65','Pipe clips',#2377,$,$);
+#2399=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_68','Push fit panel clips',#2377,$,$);
+#2400=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_76','Security glazing clips',#2377,$,$);
+#2401=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_79','Shackles',#2377,$,$);
+#2402=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_80','Sound isolation clips',#2377,$,$);
+#2403=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_82','Stainless steel spring clips',#2377,$,$);
+#2404=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_84','Standing seam fixed clips',#2377,$,$);
+#2405=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_85','Standing seam sliding clips',#2377,$,$);
+#2406=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_86','Steel clips',#2377,$,$);
+#2407=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_87','Suspended ceiling clips',#2377,$,$);
+#2408=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_14_90','Truss clips',#2377,$,$);
+#2409=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23','Dowels and rods',#2300,$,$);
+#2410=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_11','Carbon steel dowel bars',#2409,$,$);
+#2411=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_12','Carbon steel rods',#2409,$,$);
+#2412=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_22','Dowel bar caps',#2409,$,$);
+#2413=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_23','Dowel-retaining fasteners',#2409,$,$);
+#2414=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_30','Fibre-reinforced plastics dowels',#2409,$,$);
+#2415=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_36','Hardwood dowels',#2409,$,$);
+#2416=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_40','Hot welding rods',#2409,$,$);
+#2417=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_50','Masonry dowels',#2409,$,$);
+#2418=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_52','Metal dowels, pins and rods',#2409,$,$);
+#2419=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_65','Plastics dowel bar caps',#2409,$,$);
+#2420=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_80','Softwood dowels',#2409,$,$);
+#2421=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_83','Stainless steel dowel bars',#2409,$,$);
+#2422=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_84','Stainless steel rods',#2409,$,$);
+#2423=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_23_92','U-pins',#2409,$,$);
+#2424=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29','Ferrules and sleeves',#2300,$,$);
+#2425=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_23','Dowel bar sleeves',#2424,$,$);
+#2426=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_29','Ferrules',#2424,$,$);
+#2427=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_62','Plastics pile sleeves',#2424,$,$);
+#2428=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_66','Prestressed reinforcement cable conduits',#2424,$,$);
+#2429=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_84','Spacer sleeves',#2424,$,$);
+#2430=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_29_96','Wire-crimp ferrules',#2424,$,$);
+#2431=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30','Fixing lugs',#2300,$,$);
+#2432=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_11','Cable fixing lugs',#2431,$,$);
+#2433=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_12','Carbon steel fixing lugs',#2431,$,$);
+#2434=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_24','Door fixing lugs',#2431,$,$);
+#2435=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_31','Furniture floor fixing lugs',#2431,$,$);
+#2436=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_32','Furniture wall fixing lugs',#2431,$,$);
+#2437=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_30_96','Window fixing lugs',#2431,$,$);
+#2438=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31','Flat and folded plate fasteners',#2300,$,$);
+#2439=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_08','Bolted joint connectors',#2438,$,$);
+#2440=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_12','Carbon steel nailing plates',#2438,$,$);
+#2441=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_13','Carbon steel punched metal plate fasteners',#2438,$,$);
+#2442=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_44','Joist hangers',#2438,$,$);
+#2443=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_52','Mortise and tenon joint oak pegs',#2438,$,$);
+#2444=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_84','Stainless steel nailing plates',#2438,$,$);
+#2445=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_31_85','Stainless steel punched metal plate fasteners',#2438,$,$);
+#2446=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34','Glass fixing plates, brackets and anchors',#2300,$,$);
+#2447=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34_16','Cast brass glass fixing brackets',#2446,$,$);
+#2448=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34_34','Glass fin splice plates',#2446,$,$);
+#2449=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34_35','Glass patch plates',#2446,$,$);
+#2450=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34_85','Stainless steel glass block panel anchors',#2446,$,$);
+#2451=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_34_86','Stainless steel point connectors',#2446,$,$);
+#2452=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_40','Insulation fasteners',#2300,$,$);
+#2453=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_40_12','Ceiling insulation fasteners',#2452,$,$);
+#2454=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_40_30','Floor insulation fasteners',#2452,$,$);
+#2455=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_40_73','Roof insulation fasteners',#2452,$,$);
+#2456=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_40_96','Wall insulation fasteners',#2452,$,$);
+#2457=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56','Nails',#2300,$,$);
+#2458=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_02','Aluminium nails',#2457,$,$);
+#2459=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_03','Annular nails',#2457,$,$);
+#2460=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_11','Carbon steel nails',#2457,$,$);
+#2461=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_12','Carbon steel wire nails',#2457,$,$);
+#2462=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_14','Clout head nails',#2457,$,$);
+#2463=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_15','Copper nails',#2457,$,$);
+#2464=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_16','Corrugated fasteners',#2457,$,$);
+#2465=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_19','Cut clasp nails',#2457,$,$);
+#2466=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_20','Cut floor brads',#2457,$,$);
+#2467=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_36','Hardboard nails',#2457,$,$);
+#2468=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_38','Helical twist nails',#2457,$,$);
+#2469=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_48','Lost head (round) nails',#2457,$,$);
+#2470=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_50','Masonry nails',#2457,$,$);
+#2471=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_59','Oval wire nails',#2457,$,$);
+#2472=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_60','Panel pins',#2457,$,$);
+#2473=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_65','Power-driven nails',#2457,$,$);
+#2474=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_78','Shot-fire nails',#2457,$,$);
+#2475=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_82','Sprigs',#2457,$,$);
+#2476=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_83','Springhead roofing nails',#2457,$,$);
+#2477=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_84','Square twisted nails',#2457,$,$);
+#2478=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_85','Stainless steel nails',#2457,$,$);
+#2479=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_86','Staples',#2457,$,$);
+#2480=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_87','Tacks',#2457,$,$);
+#2481=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_56_93','Upholstery nails',#2457,$,$);
+#2482=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57','Nuts',#2300,$,$);
+#2483=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_01','Acorn nuts',#2482,$,$);
+#2484=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_11','Cage nuts',#2482,$,$);
+#2485=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_12','Captive nuts',#2482,$,$);
+#2486=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_13','Castle nuts',#2482,$,$);
+#2487=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_23','Dome nuts',#2482,$,$);
+#2488=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_30','Flange nuts',#2482,$,$);
+#2489=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_35','Hard lock nuts',#2482,$,$);
+#2490=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_36','Half nuts',#2482,$,$);
+#2491=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_37','Heavy hex nuts',#2482,$,$);
+#2492=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_38','Hex nuts',#2482,$,$);
+#2493=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_44','Jam nuts',#2482,$,$);
+#2494=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_45','K-lock nuts',#2482,$,$);
+#2495=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_50','Manifold nuts',#2482,$,$);
+#2496=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_56','Nylon-insert jam nuts',#2482,$,$);
+#2497=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_57','Nylon-insert lock nuts',#2482,$,$);
+#2498=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_66','Prevailing torque lock nuts',#2482,$,$);
+#2499=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_75','Self-locking nuts',#2482,$,$);
+#2500=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_76','Serrated flange nuts',#2482,$,$);
+#2501=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_80','Slotted nuts',#2482,$,$);
+#2502=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_83','Square nuts',#2482,$,$);
+#2503=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_85','Stud connector nuts',#2482,$,$);
+#2504=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_88','Tee nuts',#2482,$,$);
+#2505=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_57_96','Wing nuts',#2482,$,$);
+#2506=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60','Packings, washers and spacers',#2300,$,$);
+#2507=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_07','Bituminous felt packers',#2506,$,$);
+#2508=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_17','Crinkle washers',#2506,$,$);
+#2509=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_20','Cup (finishing) washers',#2506,$,$);
+#2510=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_28','External tooth lock (shake-proof) washers',#2506,$,$);
+#2511=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_29','Fender washers',#2506,$,$);
+#2512=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_30','Fibre washers',#2506,$,$);
+#2513=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_31','Flat washers',#2506,$,$);
+#2514=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_32','Formwork cover spacers',#2506,$,$);
+#2515=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_34','Grommets',#2506,$,$);
+#2516=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_36','Hardwood packers',#2506,$,$);
+#2517=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_37','Hardwood wedges',#2506,$,$);
+#2518=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_42','Internal tooth lock (shake-proof) washers',#2506,$,$);
+#2519=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_58','Ogee washers',#2506,$,$);
+#2520=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_59','Open push',#2506,$,$);
+#2521=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_60','Packings',#2506,$,$);
+#2522=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_61','Parallel circumferential packings',#2506,$,$);
+#2523=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_62','Penny (dock) washers',#2506,$,$);
+#2524=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_63','Plate (square) washers',#2506,$,$);
+#2525=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_64','Plywood packers',#2506,$,$);
+#2526=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_65','Polyethylene packers',#2506,$,$);
+#2527=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_75','Serrated washers',#2506,$,$);
+#2528=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_76','Sealing washers',#2506,$,$);
+#2529=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_77','Shims and folding wedges',#2506,$,$);
+#2530=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_81','Softwood packs',#2506,$,$);
+#2531=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_82','Softwood wedges',#2506,$,$);
+#2532=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_84','Sprung (split lock) washers',#2506,$,$);
+#2533=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_87','Tapered circumferential packings',#2506,$,$);
+#2534=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_60_96','Washers',#2506,$,$);
+#2535=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_63','Plugs',#2300,$,$);
+#2536=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_63_50','Masonry plugs',#2535,$,$);
+#2537=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_63_63','Plastics plugs',#2535,$,$);
+#2538=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_63_84','Studded cavity drainage membrane plugs',#2535,$,$);
+#2539=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_63_85','Surface plugs and pellets',#2535,$,$);
+#2540=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70','Rail fasteners',#2300,$,$);
+#2541=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_02','Adjustable rail clips',#2540,$,$);
+#2542=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_09','Bull head rail keys',#2540,$,$);
+#2543=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_11','Cast-in rail clip shoulders',#2540,$,$);
+#2544=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_13','Clamp brackets',#2540,$,$);
+#2545=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_22','Distance block bolts',#2540,$,$);
+#2546=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_31','Fishplates',#2540,$,$);
+#2547=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_32','Fishwashers',#2540,$,$);
+#2548=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_36','Heel blocks',#2540,$,$);
+#2549=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_37','Heel block bolts',#2540,$,$);
+#2550=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_41','Insulated fishplates',#2540,$,$);
+#2551=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_46','Long defect fishplates',#2540,$,$);
+#2552=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_68','Rail anchors',#2540,$,$);
+#2553=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_69','Rail clamp assemblies',#2540,$,$);
+#2554=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_70','Rail clips',#2540,$,$);
+#2555=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_72','Rail joint clamps',#2540,$,$);
+#2556=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_73','Rail foot insulators',#2540,$,$);
+#2557=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_85','Stock rail anchor bolts',#2540,$,$);
+#2558=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_87','Switch rail anchor',#2540,$,$);
+#2559=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_70_96','Weldable rail clip shoulders',#2540,$,$);
+#2560=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71','Rivets',#2300,$,$);
+#2561=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_08','Blind (pop) rivets',#2560,$,$);
+#2562=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_24','Drive rivets',#2560,$,$);
+#2563=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_30','Flush rivets',#2560,$,$);
+#2564=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_31','Friction rivets',#2560,$,$);
+#2565=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_59','Oscar rivets',#2560,$,$);
+#2566=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_76','Self-pierce rivets',#2560,$,$);
+#2567=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_77','Semi-tubular rivets',#2560,$,$);
+#2568=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_71_81','Solid rivets',#2560,$,$);
+#2569=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76','Screws',#2300,$,$);
+#2570=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_11','Carbon steel hexagon head screws',#2569,$,$);
+#2571=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_15','Coach screws',#2569,$,$);
+#2572=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_28','Eye lags',#2569,$,$);
+#2573=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_50','Machine screws',#2569,$,$);
+#2574=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_65','Plasterboard screws',#2569,$,$);
+#2575=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_72','Rigging screws',#2569,$,$);
+#2576=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_75','Self-tapping screws',#2569,$,$);
+#2577=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_76','Self-drilling screws',#2569,$,$);
+#2578=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_77','Set screws',#2569,$,$);
+#2579=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_78','Sheet metal screws',#2569,$,$);
+#2580=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_81','Socket screws',#2569,$,$);
+#2581=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_83','Spiral screws',#2569,$,$);
+#2582=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_85','Stainless steel hexagon head screws',#2569,$,$);
+#2583=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_86','Stainless steel screws',#2569,$,$);
+#2584=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_88','Thread-cutting machine screws',#2569,$,$);
+#2585=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_76_98','Wood screws',#2569,$,$);
+#2586=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81','Soil nails',#2300,$,$);
+#2587=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_08','Carbon steel bearing plates',#2586,$,$);
+#2588=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_09','Soil nail anchorage carbon steel nuts',#2586,$,$);
+#2589=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_11','Carbon steel soil nails',#2586,$,$);
+#2590=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_56','Non-metallic bearing plates',#2586,$,$);
+#2591=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_61','Plastics grouting ducts',#2586,$,$);
+#2592=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_63','Plastics soil nails',#2586,$,$);
+#2593=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_72','Soil nail centralizers',#2586,$,$);
+#2594=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_80','Stainless steel bearing plates',#2586,$,$);
+#2595=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_82','Soil nail anchorage stainless steel nuts',#2586,$,$);
+#2596=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_84','Stainless steel soil nails',#2586,$,$);
+#2597=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_81_86','Steel wedges',#2586,$,$);
+#2598=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_85','Straw bale fixings',#2300,$,$);
+#2599=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_85_64','Plastics sleeving',#2598,$,$);
+#2600=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_85_65','Polyester straps',#2598,$,$);
+#2601=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87','Thatch roofing fasteners',#2300,$,$);
+#2602=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87_36','Hazel staples',#2601,$,$);
+#2603=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87_37','Hazel sways',#2601,$,$);
+#2604=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87_52','Metal sways',#2601,$,$);
+#2605=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87_87','Thatching hooks',#2601,$,$);
+#2606=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_87_96','Willow sways',#2601,$,$);
+#2607=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88','Tile and fabric fasteners',#2300,$,$);
+#2608=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_26','Edge beading',#2607,$,$);
+#2609=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_27','Edge beading rails',#2607,$,$);
+#2610=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_31','Forked roofing connectors',#2607,$,$);
+#2611=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_37','Hip irons',#2607,$,$);
+#2612=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_41','Insulation fixing saddle clips',#2607,$,$);
+#2613=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_42','Insulation fixing spikes',#2607,$,$);
+#2614=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_43','Insulation fixing straps',#2607,$,$);
+#2615=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_59','Overlay fasteners',#2607,$,$);
+#2616=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_70','Roofing belts',#2607,$,$);
+#2617=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_71','Roofing clamps',#2607,$,$);
+#2618=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_72','Roofing clamping plates',#2607,$,$);
+#2619=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_73','Roofing corner plates',#2607,$,$);
+#2620=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_74','Roofing straps',#2607,$,$);
+#2621=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_88_75','Roofing swags',#2607,$,$);
+#2622=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_97','Welding joint fillers',#2300,$,$);
+#2623=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_97_09','Brazing joint fillers',#2622,$,$);
+#2624=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_97_26','Electric welding joint fillers',#2622,$,$);
+#2625=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_97_33','Gas welding joint fillers',#2622,$,$);
+#2626=IFCCLASSIFICATIONREFERENCE($,'Pr_20_29_97_81','Soldering joint fillers',#2622,$,$);
+#2627=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31','Formless structure and general products',#2299,$,$);
+#2628=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01','Additives',#2627,$,$);
+#2629=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_11','Carbon steel fibres',#2628,$,$);
+#2630=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_22','Dust suppression additives',#2628,$,$);
+#2631=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_32','Glass fibres',#2628,$,$);
+#2632=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_39','Hydraulic road binders',#2628,$,$);
+#2633=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_75','Polypropylene (PP) fibres',#2628,$,$);
+#2634=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_85','Stainless steel fibres',#2628,$,$);
+#2635=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_86','Synthetic fibres',#2628,$,$);
+#2636=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_96','Waterborne absorption fluids',#2628,$,$);
+#2637=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_01_99','Zinc powders',#2628,$,$);
+#2638=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02','Adhesives and bonding compounds',#2627,$,$);
+#2639=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_02','Acrylic anaerobic adhesives',#2638,$,$);
+#2640=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_03','Acrylic and methacrylate adhesives',#2638,$,$);
+#2641=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_04','All-purpose pastes',#2638,$,$);
+#2642=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_06','Bio-resin adhesives',#2638,$,$);
+#2643=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_07','Bitumen bonding compounds',#2638,$,$);
+#2644=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_08','Bitumen-based bonding compounds',#2638,$,$);
+#2645=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_09','Bitumen rubber emulsion adhesives',#2638,$,$);
+#2646=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_11','Casein adhesives',#2638,$,$);
+#2647=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_12','Cementitious adhesives',#2638,$,$);
+#2648=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_13','Cementitious bonding compounds',#2638,$,$);
+#2649=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_15','Cold-applied bitumen bonding compounds',#2638,$,$);
+#2650=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_18','Cold water pastes',#2638,$,$);
+#2651=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_21','Damp-proof course joint sealer adhesives',#2638,$,$);
+#2652=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_26','Epoxy resin-based adhesives',#2638,$,$);
+#2653=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_28','Epoxy resin-based bonding compounds',#2638,$,$);
+#2654=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_29','Epoxy resin ballast glues',#2638,$,$);
+#2655=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_35','Gypsum-based adhesives',#2638,$,$);
+#2656=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_36','Heavy-duty pastes',#2638,$,$);
+#2657=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_37','Hot-applied bitumen bonding compounds',#2638,$,$);
+#2658=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_38','High-performance ready-mixed adhesives',#2638,$,$);
+#2659=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_50','Masonry injection resins',#2638,$,$);
+#2660=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_52','Modified silane (MS) polymer adhesives',#2638,$,$);
+#2661=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_56','Natural rubber-based and latex adhesives',#2638,$,$);
+#2662=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_57','Non-bitumen-based bonding compounds',#2638,$,$);
+#2663=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_59','Overlap and border adhesives',#2638,$,$);
+#2664=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_60','Parchment size',#2638,$,$);
+#2665=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_61','Phenolic, resorcinol and formaldehyde-based resin (PRF) thermosetting adhesives',#2638,$,$);
+#2666=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_62','Polyurethane (PUR) adhesives',#2638,$,$);
+#2667=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_63','Polyurethane (PUR) ballast reinforcement',#2638,$,$);
+#2668=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_64','Polyurethane (PUR) based resin binders',#2638,$,$);
+#2669=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_65','Polyvinyl acetate (PVAc) adhesives',#2638,$,$);
+#2670=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_66','Polyvinyl acetate (PVAc) bonding compounds',#2638,$,$);
+#2671=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_71','Resin binders',#2638,$,$);
+#2672=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_76','Sodium silicate binders',#2638,$,$);
+#2673=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_80','Solvent-based synthetic rubber resin adhesives',#2638,$,$);
+#2674=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_81','Solvent-free cellulose adhesives',#2638,$,$);
+#2675=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_82','Solvent-free synthetic rubber resin adhesives',#2638,$,$);
+#2676=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_84','Styrene butadiene rubber (SBR) bonding compounds',#2638,$,$);
+#2677=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_85','Synthetic bonding compounds',#2638,$,$);
+#2678=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_89','Tile adhesives',#2638,$,$);
+#2679=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_94','Vermiculite-based adhesives',#2638,$,$);
+#2680=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_95','Vinyl adhesives',#2638,$,$);
+#2681=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_02_97','Welding paste and solvents',#2638,$,$);
+#2682=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03','Admixtures',#2627,$,$);
+#2683=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_01','Adherence proofing concrete admixtures',#2682,$,$);
+#2684=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_02','Air entraining and plasticizing concrete admixtures',#2682,$,$);
+#2685=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_03','Air entraining and plasticizing mortar and screed admixtures',#2682,$,$);
+#2686=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_15','Concrete expanding agents',#2682,$,$);
+#2687=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_16','Concrete foaming agents',#2682,$,$);
+#2688=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_17','Corrosion inhibiting admixtures',#2682,$,$);
+#2689=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_31','Frost-proofing concrete admixtures',#2682,$,$);
+#2690=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_36','Hardening and accelerating concrete admixtures',#2682,$,$);
+#2691=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_38','High-range water-reducing and superplasticizing concrete admixtures',#2682,$,$);
+#2692=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_52','Mid-range water-reducing and superplasticizing concrete admixtures',#2682,$,$);
+#2693=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_58','Oil proofing concrete admixtures',#2682,$,$);
+#2694=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_64','Polymer admixtures',#2682,$,$);
+#2695=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_76','Set-accelerating concrete admixtures',#2682,$,$);
+#2696=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_77','Set-accelerating, water-reducing and plasticizing concrete admixtures',#2682,$,$);
+#2697=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_78','Set-retarding concrete, mortar and plaster admixtures',#2682,$,$);
+#2698=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_79','Set-retarding, high-range water-reducing and superplasticizing concrete admixtures',#2682,$,$);
+#2699=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_80','Set-retarding, water-reducing and plasticizing concrete admixtures',#2682,$,$);
+#2700=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_84','Sprayed concrete admixtures',#2682,$,$);
+#2701=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_94','Viscosity modifying admixtures',#2682,$,$);
+#2702=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_95','Waterproofing concrete admixtures',#2682,$,$);
+#2703=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_96','Waterproofing mortar admixtures',#2682,$,$);
+#2704=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_97','Water-reducing and plasticizing concrete admixtures',#2682,$,$);
+#2705=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_03_98','Water-retaining concrete admixtures',#2682,$,$);
+#2706=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04','Aggregates',#2627,$,$);
+#2707=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_01','Air-cooled steel slag',#2706,$,$);
+#2708=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_02','All-in normal and heavyweight aggregates',#2706,$,$);
+#2709=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_04','Armourstone coarse aggregates',#2706,$,$);
+#2710=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_05','Barytes aggregates',#2706,$,$);
+#2711=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_06','Base, bed and fill all-in aggregates',#2706,$,$);
+#2712=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_07','Base, bed and fill coarse aggregates',#2706,$,$);
+#2713=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_08','Base, bed and fill fine aggregates',#2706,$,$);
+#2714=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_09','Blinding coarse aggregates',#2706,$,$);
+#2715=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_10','Blinding fine aggregates',#2706,$,$);
+#2716=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_11','Bonded surfacing decorative aggregates',#2706,$,$);
+#2717=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_13','Coarse general aggregates',#2706,$,$);
+#2718=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_15','Coarse lightweight aggregates for concrete and mortar',#2706,$,$);
+#2719=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_16','Coarse normal and heavyweight aggregates',#2706,$,$);
+#2720=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_20','Crushed stone aggregates',#2706,$,$);
+#2721=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_25','Expanded clay lightweight aggregates',#2706,$,$);
+#2722=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_26','Expanded glass aggregates',#2706,$,$);
+#2723=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_27','Expanded slag aggregates',#2706,$,$);
+#2724=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_28','Expanded slate aggregates',#2706,$,$);
+#2725=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_29','Fine aggregates',#2706,$,$);
+#2726=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_30','Fine general aggregates',#2706,$,$);
+#2727=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_31','Fine lightweight aggregates for concrete and mortar',#2706,$,$);
+#2728=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_32','Fine normal and heavyweight aggregates',#2706,$,$);
+#2729=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_35','Granular cork aggregates',#2706,$,$);
+#2730=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_42','Iron ore aggregates',#2706,$,$);
+#2731=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_44','Jointing fine aggregates',#2706,$,$);
+#2732=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_46','Laying course fine aggregates',#2706,$,$);
+#2733=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_47','Lightweight aggregates',#2706,$,$);
+#2734=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_48','Loose surfacing decorative aggregates',#2706,$,$);
+#2735=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_51','Mortar all-in aggregates',#2706,$,$);
+#2736=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_52','Mortar coarse aggregates',#2706,$,$);
+#2737=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_53','Mortar fine aggregates',#2706,$,$);
+#2738=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_56','Natural stone aggregates',#2706,$,$);
+#2739=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_57','Natural stone dusts',#2706,$,$);
+#2740=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_59','Oyster shells',#2706,$,$);
+#2741=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_60','Pea gravel',#2706,$,$);
+#2742=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_61','Perlite aggregates',#2706,$,$);
+#2743=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_62','Permeable laying course aggregates',#2706,$,$);
+#2744=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_71','Recycled lightweight aggregates',#2706,$,$);
+#2745=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_72','Recycled rubber granules',#2706,$,$);
+#2746=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_77','Scrap iron aggregates',#2706,$,$);
+#2747=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_79','Single sized aggregates',#2706,$,$);
+#2748=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_80','Soil improvement aggregates',#2706,$,$);
+#2749=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_85','Surface dressing aggregates',#2706,$,$);
+#2750=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_86','Surface treatment fine aggregates',#2706,$,$);
+#2751=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_04_94','Vermiculite aggregates',#2706,$,$);
+#2752=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12','Cements and limes',#2627,$,$);
+#2753=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_11','Calcium aluminate cements',#2752,$,$);
+#2754=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_13','Cement replacement materials',#2752,$,$);
+#2755=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_38','Hydrated limes',#2752,$,$);
+#2756=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_39','Hydraulic limes',#2752,$,$);
+#2757=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_50','Masonry cements',#2752,$,$);
+#2758=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_57','Non-hydraulic lime putties',#2752,$,$);
+#2759=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_58','Non-hydraulic limes',#2752,$,$);
+#2760=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_60','Portland cements',#2752,$,$);
+#2761=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_69','Quicklime',#2752,$,$);
+#2762=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_80','Special purpose cements',#2752,$,$);
+#2763=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_12_86','Sulfate-resisting Portland cements',#2752,$,$);
+#2764=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16','Concretes',#2627,$,$);
+#2765=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_12','Cement-bound granular mixtures',#2764,$,$);
+#2766=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_21','Designated concrete',#2764,$,$);
+#2767=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_22','Designed concrete',#2764,$,$);
+#2768=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_29','Fine bedding concretes',#2764,$,$);
+#2769=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_30','Fly ash bound mixtures',#2764,$,$);
+#2770=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_31','Foamed concrete',#2764,$,$);
+#2771=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_37','High strength concrete',#2764,$,$);
+#2772=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_39','Hydraulic road binder bound mixtures',#2764,$,$);
+#2773=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_56','Normal-class concretes',#2764,$,$);
+#2774=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_66','Pre-blended concretes',#2764,$,$);
+#2775=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_67','Prescribed concrete',#2764,$,$);
+#2776=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_68','Proprietary concretes',#2764,$,$);
+#2777=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_70','Resin concretes',#2764,$,$);
+#2778=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_72','Roman concretes',#2764,$,$);
+#2779=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_76','Self-compacting concretes',#2764,$,$);
+#2780=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_78','Slag-bound mixtures',#2764,$,$);
+#2781=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_80','Small-area repair concretes',#2764,$,$);
+#2782=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_82','Special-class performance concretes',#2764,$,$);
+#2783=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_83','Special-class prescription concretes',#2764,$,$);
+#2784=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_84','Sprayed concretes',#2764,$,$);
+#2785=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_85','Standardized prescribed concrete',#2764,$,$);
+#2786=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_16_92','Ultra-high-performance concrete',#2764,$,$);
+#2787=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35','Granules and powders',#2627,$,$);
+#2788=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_22','Diatomaceous earth',#2787,$,$);
+#2789=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_30','Fly ash',#2787,$,$);
+#2790=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_33','Granulated blast furnace slag',#2787,$,$);
+#2791=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_34','Ground granulated blast furnace slag',#2787,$,$);
+#2792=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_35','Gypsum',#2787,$,$);
+#2793=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_47','Limestone fines',#2787,$,$);
+#2794=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_50','Marble dust',#2787,$,$);
+#2795=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_51','Metakaolin',#2787,$,$);
+#2796=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_52','Microsilica',#2787,$,$);
+#2797=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_53','Mineral pigments',#2787,$,$);
+#2798=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_56','Natural pozzolan',#2787,$,$);
+#2799=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_60','Partially ground granulated blast furnace slag',#2787,$,$);
+#2800=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_62','Plaster of Paris',#2787,$,$);
+#2801=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_75','Sawdust',#2787,$,$);
+#2802=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_78','Silicon carbide powder',#2787,$,$);
+#2803=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_81','Silica fume',#2787,$,$);
+#2804=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_82','Sintered pulverized fuel ash',#2787,$,$);
+#2805=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_35_86','Synthetic foam granules',#2787,$,$);
+#2806=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53','Mortars and grouts',#2627,$,$);
+#2807=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_08','Brick slip adhesive mortars',#2806,$,$);
+#2808=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_10','Cement-gauged designed mortars',#2806,$,$);
+#2809=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_11','Cement-gauged mortars',#2806,$,$);
+#2810=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_12','Cementitious and reaction resin grouts',#2806,$,$);
+#2811=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_13','Cementitious grouts',#2806,$,$);
+#2812=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_14','Cementitious tanking mortars',#2806,$,$);
+#2813=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_15','Concrete repair mortars',#2806,$,$);
+#2814=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_16','Cementitious tiling grouts',#2806,$,$);
+#2815=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_18','Crystallization active slurry mortars',#2806,$,$);
+#2816=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_26','Epoxy mortars',#2806,$,$);
+#2817=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_27','Epoxy resin grouts',#2806,$,$);
+#2818=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_28','Epoxy resin-modified cementitious slurries',#2806,$,$);
+#2819=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_30','Fibre-reinforced polymer-modified cementitious mortars',#2806,$,$);
+#2820=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_31','Fire-resisting mortars',#2806,$,$);
+#2821=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_32','General purpose cement:sand mortars',#2806,$,$);
+#2822=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_33','Glass block jointing mortars',#2806,$,$);
+#2823=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_34','Glass block pointing mortars',#2806,$,$);
+#2824=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_39','Hydraulic lime mortars',#2806,$,$);
+#2825=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_40','Injection grouts',#2806,$,$);
+#2826=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_41','Injection mortar damp-proof courses',#2806,$,$);
+#2827=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_42','Injection mortars',#2806,$,$);
+#2828=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_43','Intumescent mortars',#2806,$,$);
+#2829=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_47','Lightweight masonry mortars',#2806,$,$);
+#2830=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_50','Masonry grout',#2806,$,$);
+#2831=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_52','Metal anchor and fixings grouts',#2806,$,$);
+#2832=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_54','Mortar repair mortar',#2806,$,$);
+#2833=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_60','Paving jointing mortars',#2806,$,$);
+#2834=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_61','Paving laying course mortars',#2806,$,$);
+#2835=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_62','Paving unit priming slurry mortars',#2806,$,$);
+#2836=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_64','Polyester resin grouts',#2806,$,$);
+#2837=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_65','Polymer-modified cementitious mortars',#2806,$,$);
+#2838=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_66','Polymer-modified cementitious slurries',#2806,$,$);
+#2839=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_71','Resin grouts',#2806,$,$);
+#2840=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_76','Self-hardening slurry mixes',#2806,$,$);
+#2841=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_79','Silica grouts',#2806,$,$);
+#2842=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_86','Terrazzo mix\X2\00A0\X0\',#2806,$,$);
+#2843=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_88','Thin-layer mortars',#2806,$,$);
+#2844=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_90','Thixotropic resin grouts',#2806,$,$);
+#2845=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_53_96','Waterproof mortars',#2806,$,$);
+#2846=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56','Natural resins',#2627,$,$);
+#2847=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_11','Balsam resins',#2846,$,$);
+#2848=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_13','Benzoin resins',#2846,$,$);
+#2849=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_16','Copal resins',#2846,$,$);
+#2850=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_21','Damar resins',#2846,$,$);
+#2851=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_46','Lacquer resins',#2846,$,$);
+#2852=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_50','Mastic resins',#2846,$,$);
+#2853=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_77','Shellac resins',#2846,$,$);
+#2854=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_56_91','Turpentine resins',#2846,$,$);
+#2855=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86','Synthetic resins',#2627,$,$);
+#2856=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_01','Acetal resins',#2855,$,$);
+#2857=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_02','Acrylic resins',#2855,$,$);
+#2858=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_03','Acrylonitrile butadiene styrene (ABS) resins',#2855,$,$);
+#2859=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_04','Alkyd resins',#2855,$,$);
+#2860=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_27','Epoxy resins',#2855,$,$);
+#2861=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_28','Ethylene vinyl acetate (EVA) resins',#2855,$,$);
+#2862=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_46','Liquid crystal polymer resins',#2855,$,$);
+#2863=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_48','Long-fibre-reinforced plastics resins',#2855,$,$);
+#2864=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_51','Melamine formaldehyde (MF) resins',#2855,$,$);
+#2865=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_58','Phenol formaldehyde (PF) resins',#2855,$,$);
+#2866=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_59','Polyamide (PA) resins',#2855,$,$);
+#2867=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_60','Polycarbonate resins',#2855,$,$);
+#2868=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_61','Polyester resins',#2855,$,$);
+#2869=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_62','Polyethylene (PE) resins',#2855,$,$);
+#2870=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_63','Polyethylene terephthalate (PET) resins',#2855,$,$);
+#2871=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_64','Polyphenylene sulfide resins',#2855,$,$);
+#2872=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_65','Polypropylene resins',#2855,$,$);
+#2873=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_66','Polystyrene (PS) resins',#2855,$,$);
+#2874=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_67','Polyurethane (PU) resins',#2855,$,$);
+#2875=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_68','Polyvinyl chloride (PVC) resins',#2855,$,$);
+#2876=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_77','Silicone resins',#2855,$,$);
+#2877=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_88','Thermoplastic elastomer (TPE) resins',#2855,$,$);
+#2878=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_92','Unsaturated polyester (UP) resins',#2855,$,$);
+#2879=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_93','Urea formaldehyde (UF) resins',#2855,$,$);
+#2880=IFCCLASSIFICATIONREFERENCE($,'Pr_20_31_86_94','Vinyl ester resins',#2855,$,$);
+#2881=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65','Prefabricated buildings and structures',#2299,$,$);
+#2882=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_34','Glazed structures',#2881,$,$);
+#2883=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_34_34','Glazed enclosures',#2882,$,$);
+#2884=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_34_51','Metal-framed structures',#2882,$,$);
+#2885=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_34_72','Roof lanterns',#2882,$,$);
+#2886=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50','Modular products',#2881,$,$);
+#2887=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_10','Bathroom pods',#2886,$,$);
+#2888=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_45','Kitchen pods',#2886,$,$);
+#2889=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_46','Kitchenette units',#2886,$,$);
+#2890=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_53','Modular mezzanines',#2886,$,$);
+#2891=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_63','Plant room pods',#2886,$,$);
+#2892=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_65','Prefabricated balconies',#2886,$,$);
+#2893=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_50_77','Serviced pods',#2886,$,$);
+#2894=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60','Panelled and framed structure products',#2881,$,$);
+#2895=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_15','Concrete panelled modules',#2894,$,$);
+#2896=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_17','Cross-laminated timber (CLT) panelled modules',#2894,$,$);
+#2897=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_47','Light-gauge steel floors and roofs',#2894,$,$);
+#2898=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_48','Light-gauge steel frame panels',#2894,$,$);
+#2899=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_60','Packaged components',#2894,$,$);
+#2900=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_84','Structural insulated panel (SIP) modules',#2894,$,$);
+#2901=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_88','Timber-frame floors and roofs',#2894,$,$);
+#2902=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_60_89','Timber-frame panels',#2894,$,$);
+#2903=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78','Shelter structures',#2881,$,$);
+#2904=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78_15','Composite panelled shelters',#2903,$,$);
+#2905=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78_34','Glazed shelters',#2903,$,$);
+#2906=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78_58','Open-sided shelters',#2903,$,$);
+#2907=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78_77','Semi-closed shelters',#2903,$,$);
+#2908=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_78_88','Timber-framed and panelled shelters',#2903,$,$);
+#2909=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_95','Volumetric modules',#2881,$,$);
+#2910=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_95_15','Composite modules',#2909,$,$);
+#2911=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_95_17','Concrete-framed modules',#2909,$,$);
+#2912=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_95_85','Steel-framed modules',#2909,$,$);
+#2913=IFCCLASSIFICATIONREFERENCE($,'Pr_20_65_95_90','Timber-framed modules',#2909,$,$);
+#2914=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76','Sectional products',#2299,$,$);
+#2915=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06','Balusters and newel posts',#2914,$,$);
+#2916=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_03','Aluminium balusters and newel posts',#2915,$,$);
+#2917=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_11','Carbon steel balusters and newel posts',#2915,$,$);
+#2918=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_12','Cast iron balusters and newel posts',#2915,$,$);
+#2919=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_16','Concrete balusters and newel posts',#2915,$,$);
+#2920=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_36','Hardwood balusters and newel posts',#2915,$,$);
+#2921=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_50','Metal intermediate posts',#2915,$,$);
+#2922=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_52','Metal newel posts',#2915,$,$);
+#2923=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_63','Plastics balusters and newel posts',#2915,$,$);
+#2924=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_80','Softwood balusters and newel posts',#2915,$,$);
+#2925=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_83','Stainless steel balusters and newel posts',#2915,$,$);
+#2926=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_86','Stone balusters and newel posts',#2915,$,$);
+#2927=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_87','Timber newel posts',#2915,$,$);
+#2928=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_06_88','Timber spindles',#2915,$,$);
+#2929=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08','Bollards and impact protectors',#2914,$,$);
+#2930=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_02','Aluminium alloy bollards',#2929,$,$);
+#2931=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_03','Aluminium alloy hinged bollards',#2929,$,$);
+#2932=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_04','Aluminium alloy telescopic bollards',#2929,$,$);
+#2933=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_09','Carbon steel removable bollards',#2929,$,$);
+#2934=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_10','Carbon steel bollards',#2929,$,$);
+#2935=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_11','Carbon steel hinged bollards',#2929,$,$);
+#2936=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_12','Carbon steel rising bollards',#2929,$,$);
+#2937=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_13','Carbon steel telescopic bollards',#2929,$,$);
+#2938=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_14','Cast iron bollards',#2929,$,$);
+#2939=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_15','Collapsible metal bollards',#2929,$,$);
+#2940=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_16','Collapsible polymer bollards',#2929,$,$);
+#2941=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_17','Collapsible timber bollards',#2929,$,$);
+#2942=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_18','Composite bollards',#2929,$,$);
+#2943=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_19','Concrete bollards',#2929,$,$);
+#2944=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_36','Hardwood bollards',#2929,$,$);
+#2945=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_51','Metal bollards',#2929,$,$);
+#2946=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_52','Metal impact protectors',#2929,$,$);
+#2947=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_53','Metal impact protectors with infill',#2929,$,$);
+#2948=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_60','Panel fenders',#2929,$,$);
+#2949=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_62','Plastics bollards',#2929,$,$);
+#2950=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_63','Plastics hinged car bollards',#2929,$,$);
+#2951=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_64','Plastics rising bollards',#2929,$,$);
+#2952=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_65','Plastics telescopic bollards',#2929,$,$);
+#2953=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_66','Polymer bollards',#2929,$,$);
+#2954=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_67','Precast concrete bollards',#2929,$,$);
+#2955=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_71','Retracting metal bollards',#2929,$,$);
+#2956=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_74','Rubber impact protectors',#2929,$,$);
+#2957=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_81','Stainless steel removable bollards',#2929,$,$);
+#2958=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_82','Stainless steel bollards',#2929,$,$);
+#2959=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_83','Stainless steel hinged bollards',#2929,$,$);
+#2960=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_84','Stainless steel rising bollards',#2929,$,$);
+#2961=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_85','Stainless steel telescopic bollards',#2929,$,$);
+#2962=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_86','Stone bollards',#2929,$,$);
+#2963=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_08_88','Timber bollards',#2929,$,$);
+#2964=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51','Metal sections',#2914,$,$);
+#2965=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_01','Aluminium cold drawn bars and rods',#2964,$,$);
+#2966=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_02','Aluminium curtain wall frame sections',#2964,$,$);
+#2967=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_03','Aluminium extruded bars and rods',#2964,$,$);
+#2968=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_04','Aluminium extruded precision profiles',#2964,$,$);
+#2969=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_05','Aluminium patent glazing bars',#2964,$,$);
+#2970=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_07','Aluminium structural sections',#2964,$,$);
+#2971=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_08','Box sections',#2964,$,$);
+#2972=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_09','Brass sections',#2964,$,$);
+#2973=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_10','Bronze sections',#2964,$,$);
+#2974=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_11','Carbon steel bars',#2964,$,$);
+#2975=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_12','Carbon steel beams, columns, channels and tees',#2964,$,$);
+#2976=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_13','Carbon steel channels',#2964,$,$);
+#2977=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_14','Carbon steel curtain wall frame sections',#2964,$,$);
+#2978=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_15','Carbon steel curved sections',#2964,$,$);
+#2979=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_17','Carbon steel pales',#2964,$,$);
+#2980=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_18','Carbon steel patent glazing bars',#2964,$,$);
+#2981=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_19','Carbon steel tees',#2964,$,$);
+#2982=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_20','Cast iron products',#2964,$,$);
+#2983=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_21','Cold-formed galvanized steel sections',#2964,$,$);
+#2984=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_22','Cold-formed steel strip studs',#2964,$,$);
+#2985=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_23','Copper alloy sections',#2964,$,$);
+#2986=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_25','Curtain wall blast-resistant frame sections',#2964,$,$);
+#2987=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_33','Galvanized steel channels',#2964,$,$);
+#2988=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_51','Metal mullions and transoms',#2964,$,$);
+#2989=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_73','Resilient bars',#2964,$,$);
+#2990=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_77','Sheathed carbon steel patent glazing bars',#2964,$,$);
+#2991=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_80','Stainless steel channels',#2964,$,$);
+#2992=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_81','Stainless steel bars and rods for construction',#2964,$,$);
+#2993=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_82','Stainless steel bars and rods for general purposes',#2964,$,$);
+#2994=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_83','Stainless steel sheet, strip and plate for construction',#2964,$,$);
+#2995=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_84','Stainless steel sheet, strip and plate for general purposes',#2964,$,$);
+#2996=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_85','Stainless steel pales',#2964,$,$);
+#2997=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_90','Universal beam sections',#2964,$,$);
+#2998=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_92','Universal column sections',#2964,$,$);
+#2999=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_51_98','Wrought iron sections',#2964,$,$);
+#3000=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52','Metal tubes and hollow sections',#2914,$,$);
+#3001=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_01','Aluminium cold drawn tubes',#3000,$,$);
+#3002=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_03','Aluminium extruded tubes',#3000,$,$);
+#3003=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_16','Carbon steel hot-finished hollow sections',#3000,$,$);
+#3004=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_19','Carbon steel seamless tubes',#3000,$,$);
+#3005=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_20','Carbon steel welded tubes',#3000,$,$);
+#3006=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_85','Stainless steel seamless circular tubes',#3000,$,$);
+#3007=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_52_86','Stainless steel welded circular tubes',#3000,$,$);
+#3008=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63','Plastics sections',#2914,$,$);
+#3009=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_30','Flexible foam rods',#3008,$,$);
+#3010=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_33','Glass fibre-reinforced plastics (GRP) angle sections',#3008,$,$);
+#3011=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_35','Glass fibre-reinforced plastics (GRP) box sections',#3008,$,$);
+#3012=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_37','Glass fibre-reinforced plastics (GRP) channel sections',#3008,$,$);
+#3013=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_63','Plastics mullions and transoms',#3008,$,$);
+#3014=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_65','Plastics palisades',#3008,$,$);
+#3015=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_85','Structural plastics sections',#3008,$,$);
+#3016=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_63_92','Unplasticized polyvinyl chloride (PVC-U) curtain wall frame sections',#3008,$,$);
+#3017=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64','Posts and post accessories',#2914,$,$);
+#3018=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_01','Adjustable post bases',#3017,$,$);
+#3019=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_03','Aluminium alloy posts',#3017,$,$);
+#3020=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_04','Aluminium post tops',#3017,$,$);
+#3021=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_10','Carbon steel electric security fencing posts',#3017,$,$);
+#3022=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_11','Carbon steel extension arms',#3017,$,$);
+#3023=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_12','Carbon steel posts',#3017,$,$);
+#3024=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_13','Carbon steel post tops',#3017,$,$);
+#3025=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_14','Carbon steel wind posts',#3017,$,$);
+#3026=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_15','Cast iron posts',#3017,$,$);
+#3027=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_16','Cast iron post tops',#3017,$,$);
+#3028=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_17','Cast stone or concrete posts',#3017,$,$);
+#3029=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_18','Cast stone or concrete post tops',#3017,$,$);
+#3030=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_19','Concrete extension arms',#3017,$,$);
+#3031=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_20','Concrete posts',#3017,$,$);
+#3032=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_21','Concrete post tops',#3017,$,$);
+#3033=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_36','Hardwood posts',#3017,$,$);
+#3034=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_37','Hardwood post tops',#3017,$,$);
+#3035=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_51','Metal electric security fencing posts',#3017,$,$);
+#3036=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_52','Metal extension arms',#3017,$,$);
+#3037=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_53','Metal posts',#3017,$,$);
+#3038=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_54','Metal post bases',#3017,$,$);
+#3039=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_55','Metal post tops',#3017,$,$);
+#3040=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_62','Plastics posts',#3017,$,$);
+#3041=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_63','Plastics post tops',#3017,$,$);
+#3042=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_65','Polymer posts',#3017,$,$);
+#3043=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_66','Polymer post tops',#3017,$,$);
+#3044=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_72','Retention sockets',#3017,$,$);
+#3045=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_77','Softwood posts',#3017,$,$);
+#3046=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_78','Softwood post tops',#3017,$,$);
+#3047=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_80','Stainless steel posts',#3017,$,$);
+#3048=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_81','Stainless steel post tops',#3017,$,$);
+#3049=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_82','Stainless steel wind posts',#3017,$,$);
+#3050=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_83','Stand-off post bases',#3017,$,$);
+#3051=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_87','Timber hand posts',#3017,$,$);
+#3052=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_88','Timber posts',#3017,$,$);
+#3053=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_89','Timber post tops',#3017,$,$);
+#3054=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_95','Wood hand posts',#3017,$,$);
+#3055=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_64_96','Wood panel supports',#3017,$,$);
+#3056=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70','Rail track and ancillaries',#2914,$,$);
+#3057=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_09','Bullhead rails',#3056,$,$);
+#3058=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_12','Check rails',#3056,$,$);
+#3059=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_15','Conductor rails',#3056,$,$);
+#3060=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_22','Derailment containment',#3056,$,$);
+#3061=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_27','Equipment protection ramps',#3056,$,$);
+#3062=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_28','Expansion switches and adjustment switches',#3056,$,$);
+#3063=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_30','Flat bottom rails',#3056,$,$);
+#3064=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_34','Grooved rails',#3056,$,$);
+#3065=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_60','Particle magnets',#3056,$,$);
+#3066=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_67','Rail dampers',#3056,$,$);
+#3067=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_69','Rail groove drains',#3056,$,$);
+#3068=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_70','Rail track tie bars',#3056,$,$);
+#3069=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_71','Rail section convertors',#3056,$,$);
+#3070=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_80','Slipper runs',#3056,$,$);
+#3071=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_70_90','Transition rails',#3056,$,$);
+#3072=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71','Railway junction works',#2914,$,$);
+#3073=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_15','Common crossings',#3072,$,$);
+#3074=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_17','Crossovers',#3072,$,$);
+#3075=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_21','Derailers',#3072,$,$);
+#3076=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_23','Diamond crossings',#3072,$,$);
+#3077=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_24','Double slips',#3072,$,$);
+#3078=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_50','Moveable rail crossings',#3072,$,$);
+#3079=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_58','Obtuse crossings',#3072,$,$);
+#3080=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_76','Scissor crossovers',#3072,$,$);
+#3081=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_78','Single slips',#3072,$,$);
+#3082=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_79','Switch rollers',#3072,$,$);
+#3083=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_80','Stretcher bars',#3072,$,$);
+#3084=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_81','Stretcher bar brackets',#3072,$,$);
+#3085=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_82','Stretcher drive brackets',#3072,$,$);
+#3086=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_83','Swing nose crossings',#3072,$,$);
+#3087=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_84','Switch and stock rails',#3072,$,$);
+#3088=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_85','Switch diamonds',#3072,$,$);
+#3089=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_86','Switch supplementary drives',#3072,$,$);
+#3090=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_87','Tandem turnouts',#3072,$,$);
+#3091=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_90','Trap switches',#3072,$,$);
+#3092=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_71_91','Turnouts',#3072,$,$);
+#3093=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_78','Shaft structure products',#2914,$,$);
+#3094=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_78_12','Concrete caisson rings',#3093,$,$);
+#3095=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_78_14','Concrete shaft cover slabs',#3093,$,$);
+#3096=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_78_16','Concrete shaft landing slabs',#3093,$,$);
+#3097=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_78_65','Precast concrete shaft units',#3093,$,$);
+#3098=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88','Timber sections',#2914,$,$);
+#3099=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_14','Cleft chestnut pales',#3098,$,$);
+#3100=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_32','Hardwood capping and counter fencing rails',#3098,$,$);
+#3101=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_33','Hardwood components for fencing and barriers',#3098,$,$);
+#3102=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_34','Hardwood fencing rails',#3098,$,$);
+#3103=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_36','Hardwood gravity battens',#3098,$,$);
+#3104=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_37','Hardwood log poles',#3098,$,$);
+#3105=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_40','Hardwood pales',#3098,$,$);
+#3106=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_41','Hardwood partition studs',#3098,$,$);
+#3107=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_42','Hardwood rafters',#3098,$,$);
+#3108=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_43','Hardwood roofing battens',#3098,$,$);
+#3109=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_44','Hardwood sections',#3098,$,$);
+#3110=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_46','Hardwood weatherboarding battens',#3098,$,$);
+#3111=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_47','Insulating timber floor battens',#3098,$,$);
+#3112=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_48','Laminated strand lumber (LSL) sections',#3098,$,$);
+#3113=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_49','Laminated veneer lumber (LVL) sections',#3098,$,$);
+#3114=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_60','Parallel strand lumber (PSL) sections',#3098,$,$);
+#3115=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_72','Softwood capping and counter fencing rails',#3098,$,$);
+#3116=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_73','Softwood components for fencing and barriers',#3098,$,$);
+#3117=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_74','Softwood fencing rails',#3098,$,$);
+#3118=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_76','Softwood gravity battens',#3098,$,$);
+#3119=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_79','Softwood pales',#3098,$,$);
+#3120=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_80','Softwood partition studs',#3098,$,$);
+#3121=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_81','Softwood rafters',#3098,$,$);
+#3122=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_82','Softwood roofing battens',#3098,$,$);
+#3123=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_83','Softwood sections',#3098,$,$);
+#3124=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_84','Softwood weatherboarding battens',#3098,$,$);
+#3125=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_85','Timber packing and spreading products',#3098,$,$);
+#3126=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_86','Timber fencing battens',#3098,$,$);
+#3127=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_87','Timber partition battens',#3098,$,$);
+#3128=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_88','Timber pales',#3098,$,$);
+#3129=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_88_89','Timber mullions and transoms',#3098,$,$);
+#3130=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_92','Tunnel structure products',#2914,$,$);
+#3131=IFCCLASSIFICATIONREFERENCE($,'Pr_20_76_92_65','Precast concrete tunnel units',#3130,$,$);
+#3132=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85','Support and restraint products',#2299,$,$);
+#3133=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03','Angles',#3132,$,$);
+#3134=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_02','Aluminium angles',#3133,$,$);
+#3135=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_11','Carbon steel angle sections',#3133,$,$);
+#3136=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_33','Galvanized steel angle sections',#3133,$,$);
+#3137=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_50','Masonry angle supports',#3133,$,$);
+#3138=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_63','Plain angle supports',#3133,$,$);
+#3139=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_03_84','Stainless steel angles',#3133,$,$);
+#3140=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_06','Bands and hoops',#3132,$,$);
+#3141=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_06_06','Bandings',#3140,$,$);
+#3142=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_06_11','Carbon steel hoops',#3140,$,$);
+#3143=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_06_85','Stainless steel hoops',#3140,$,$);
+#3144=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07','Barrier rails',#3132,$,$);
+#3145=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_02','Aluminium alloy rails',#3144,$,$);
+#3146=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_03','Aluminium support rails',#3144,$,$);
+#3147=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_11','Carbon steel fencing and barrier rails',#3144,$,$);
+#3148=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_12','Carbon steel fencing and barrier top rails',#3144,$,$);
+#3149=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_13','Carbon steel safety barrier open box beams',#3144,$,$);
+#3150=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_14','Carbon steel safety barrier rectangular hollow sections',#3144,$,$);
+#3151=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_15','Carbon steel safety barrier tensioned corrugated beams',#3144,$,$);
+#3152=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_16','Carbon steel safety barrier transitions and connections',#3144,$,$);
+#3153=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_17','Carbon steel safety barrier un-tensioned corrugated beams',#3144,$,$);
+#3154=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_18','Carbon steel support rails',#3144,$,$);
+#3155=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_19','Cast iron rails',#3144,$,$);
+#3156=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_20','Concrete rails',#3144,$,$);
+#3157=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_63','Plastics rails',#3144,$,$);
+#3158=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_65','Protective frames',#3144,$,$);
+#3159=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_75','Safety barrier terminals',#3144,$,$);
+#3160=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_84','Stainless steel rails',#3144,$,$);
+#3161=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_85','Stainless steel support rails',#3144,$,$);
+#3162=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_92','Unplasticized polyvinyl chloride (PVC-U) support rails',#3144,$,$);
+#3163=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_07_97','Wall-mounted furniture support rails',#3144,$,$);
+#3164=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08','Beams and joists',#3132,$,$);
+#3165=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_02','Aluminium structural beams',#3164,$,$);
+#3166=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_11','Carbon steel beams',#3164,$,$);
+#3167=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_12','Castellated carbon steel beams',#3164,$,$);
+#3168=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_15','Concrete beams',#3164,$,$);
+#3169=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_16','Concrete pier caps',#3164,$,$);
+#3170=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_17','Cross-laminated timber beams',#3164,$,$);
+#3171=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_33','Glued laminated timber beams',#3164,$,$);
+#3172=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_36','Hardwood beams',#3164,$,$);
+#3173=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_50','Metal web joists',#3164,$,$);
+#3174=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_63','Plastics beams',#3164,$,$);
+#3175=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_65','Post-tensioned concrete beams',#3164,$,$);
+#3176=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_66','Prestressed concrete T-beams',#3164,$,$);
+#3177=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_81','Softwood beams',#3164,$,$);
+#3178=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_82','Steel pier caps',#3164,$,$);
+#3179=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_83','Stainless steel structural beams',#3164,$,$);
+#3180=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_84','Structural wood-composite box beams',#3164,$,$);
+#3181=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_85','Structural wood-composite I-beams',#3164,$,$);
+#3182=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_86','Structural wood-composite I-joists',#3164,$,$);
+#3183=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_08_87','Structural wood composites',#3164,$,$);
+#3184=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09','Brackets',#3132,$,$);
+#3185=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_01','Above-ground drainage pipe brackets',#3184,$,$);
+#3186=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_02','Aluminium brackets',#3184,$,$);
+#3187=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_03','Aluminium bronze brackets',#3184,$,$);
+#3188=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_05','Aluminium downpipe brackets',#3184,$,$);
+#3189=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_07','Aluminium rainwater gutter brackets',#3184,$,$);
+#3190=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_09','Bracketed angle supports',#3184,$,$);
+#3191=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_11','Carbon steel brackets',#3184,$,$);
+#3192=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_12','Carbon steel cavity barrier brackets',#3184,$,$);
+#3193=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_14','Carbon steel fencing brackets',#3184,$,$);
+#3194=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_16','Carbon steel masonry brackets',#3184,$,$);
+#3195=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_17','Cast and wrought iron brackets',#3184,$,$);
+#3196=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_18','Cast iron downpipe brackets',#3184,$,$);
+#3197=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_19','Cast iron rainwater gutter brackets',#3184,$,$);
+#3198=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_20','Copper brackets',#3184,$,$);
+#3199=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_21','Copper downpipe brackets',#3184,$,$);
+#3200=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_22','Copper rainwater gutter brackets',#3184,$,$);
+#3201=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_23','Curtain wall adjustable support brackets',#3184,$,$);
+#3202=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_24','Downpipe brackets',#3184,$,$);
+#3203=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_26','Eaves gutter brackets',#3184,$,$);
+#3204=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_28','Extinguisher mounting brackets',#3184,$,$);
+#3205=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_30','Fire bucket wall brackets',#3184,$,$);
+#3206=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_31','Galvanized steel downpipe brackets',#3184,$,$);
+#3207=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_32','Galvanized steel rainwater gutter brackets',#3184,$,$);
+#3208=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_33','Galvanized steel brackets',#3184,$,$);
+#3209=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_37','Hollow box galvanized steel brackets',#3184,$,$);
+#3210=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_38','Hot-dip pre-coated carbon steel downpipe brackets',#3184,$,$);
+#3211=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_39','Hot-dip pre-coated carbon steel rainwater gutter brackets',#3184,$,$);
+#3212=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_42','Individual masonry brackets',#3184,$,$);
+#3213=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_46','Ladder gutter brackets',#3184,$,$);
+#3214=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_47','Ladder wall brackets',#3184,$,$);
+#3215=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_48','Louvre and shading mounting brackets',#3184,$,$);
+#3216=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_52','Metal timber member fixing brackets',#3184,$,$);
+#3217=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_54','Mounting brackets',#3184,$,$);
+#3218=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_62','Phosphor bronze brackets',#3184,$,$);
+#3219=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_63','Plastics brackets',#3184,$,$);
+#3220=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_72','Roof gutter brackets',#3184,$,$);
+#3221=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_81','Stainless steel brackets',#3184,$,$);
+#3222=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_82','Stainless steel cavity barrier brackets',#3184,$,$);
+#3223=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_84','Stainless steel handrail brackets',#3184,$,$);
+#3224=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_87','Stainless steel masonry brackets',#3184,$,$);
+#3225=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_88','Sink supports',#3184,$,$);
+#3226=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_92','Unplasticized polyvinyl chloride (PVC-U) downpipe brackets',#3184,$,$);
+#3227=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_93','Unplasticized polyvinyl chloride (PVC-U) rainwater gutter brackets',#3184,$,$);
+#3228=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_96','Wall-hung WC support brackets',#3184,$,$);
+#3229=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_09_98','Washbasin support brackets',#3184,$,$);
+#3230=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10','Bridge bearings',#3132,$,$);
+#3231=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_20','Cylindrical PTFE bearings',#3230,$,$);
+#3232=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_27','Elastomeric bearings',#3230,$,$);
+#3233=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_35','Guide bearings',#3230,$,$);
+#3234=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_65','Pot bearings',#3230,$,$);
+#3235=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_70','Restraint bearings',#3230,$,$);
+#3236=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_72','Rocker bearings',#3230,$,$);
+#3237=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_73','Roller bearings',#3230,$,$);
+#3238=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_79','Sliding element',#3230,$,$);
+#3239=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_10_81','Spherical PTFE bearings',#3230,$,$);
+#3240=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_11','Bridge suspension cables',#3132,$,$);
+#3241=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_11_48','Locked coil strand cables',#3240,$,$);
+#3242=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_11_60','Parallel wire strand cables',#3240,$,$);
+#3243=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_11_80','Spiral strand cables',#3240,$,$);
+#3244=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_12','Bunds and ducts',#3132,$,$);
+#3245=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_12_14','Concrete bund units',#3244,$,$);
+#3246=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_12_24','Concrete duct units',#3244,$,$);
+#3247=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13','Concrete base and foundation products',#3132,$,$);
+#3248=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_29','Concrete bases for fence posts',#3247,$,$);
+#3249=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_30','Concrete floating slab foundations',#3247,$,$);
+#3250=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_32','Concrete foundation pads',#3247,$,$);
+#3251=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_35','Concrete ground beams',#3247,$,$);
+#3252=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_63','Concrete plinth units',#3247,$,$);
+#3253=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_13_65','Concrete pocket foundations',#3247,$,$);
+#3254=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_14','Concrete flooring and decking products',#3132,$,$);
+#3255=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_14_14','Concrete hollow core slabs',#3254,$,$);
+#3256=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_14_15','Concrete kentledge blocks',#3254,$,$);
+#3257=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_14_16','Concrete solid slabs',#3254,$,$);
+#3258=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16','Columns and column accessories',#3132,$,$);
+#3259=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_02','Aluminium structural columns',#3258,$,$);
+#3260=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_03','Aluminium column shoes',#3258,$,$);
+#3261=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_11','Carbon steel columns',#3258,$,$);
+#3262=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_12','Carbon steel column shoes',#3258,$,$);
+#3263=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_14','Cast iron columns',#3258,$,$);
+#3264=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_15','Concrete columns',#3258,$,$);
+#3265=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_16','Composite steel and concrete columns',#3258,$,$);
+#3266=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_17','Cross-laminated timber columns',#3258,$,$);
+#3267=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_33','Glued laminated timber columns',#3258,$,$);
+#3268=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_36','Hardwood structural columns',#3258,$,$);
+#3269=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_62','Plastics columns',#3258,$,$);
+#3270=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_81','Softwood structural columns',#3258,$,$);
+#3271=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_84','Stainless steel structural columns',#3258,$,$);
+#3272=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_85','Stainless steel column shoes',#3258,$,$);
+#3273=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_86','Stone columns',#3258,$,$);
+#3274=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_16_96','Wind posts',#3258,$,$);
+#3275=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_18','Bridge deck products',#3132,$,$);
+#3276=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_18_10','Bridge diaphragms',#3275,$,$);
+#3277=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_18_12','Cast iron bridge pedestals',#3275,$,$);
+#3278=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_18_14','Concrete bridge pedestals',#3275,$,$);
+#3279=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_18_85','Steel bridge pedestals',#3275,$,$);
+#3280=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20','Cladding support products',#3132,$,$);
+#3281=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_04','Aluminium carrier rails',#3280,$,$);
+#3282=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_10','Carbon steel carrier rails',#3280,$,$);
+#3283=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_43','Hardwood cladding battens',#3280,$,$);
+#3284=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_60','Panel connectors',#3280,$,$);
+#3285=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_82','Softwood cladding battens',#3280,$,$);
+#3286=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_83','Stainless steel carrier rails',#3280,$,$);
+#3287=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_84','Stainless steel cladding angles',#3280,$,$);
+#3288=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_85','Stainless steel cladding channels',#3280,$,$);
+#3289=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_20_86','Stainless steel cladding ties',#3280,$,$);
+#3290=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28','Erosion control and breakwater products',#3132,$,$);
+#3291=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_09','Brushwood fascines',#3290,$,$);
+#3292=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_15','Coir erosion mats',#3290,$,$);
+#3293=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_16','Concrete tetrapods',#3290,$,$);
+#3294=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_27','Erosion control logs',#3290,$,$);
+#3295=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_28','Erosion control pallets',#3290,$,$);
+#3296=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_29','Fabric bags',#3290,$,$);
+#3297=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_30','Flood barriers',#3290,$,$);
+#3298=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_31','Flood barrier fixings',#3290,$,$);
+#3299=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_33','Galvanized wire bastion cages',#3290,$,$);
+#3300=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_34','Galvanized wire mattress cages',#3290,$,$);
+#3301=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_35','Galvanized wire trapion cages',#3290,$,$);
+#3302=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_36','Galvanized wire gabion cages',#3290,$,$);
+#3303=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_38','Hessian bags',#3290,$,$);
+#3304=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_45','Liquid-absorbing barriers',#3290,$,$);
+#3305=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_46','Liquid-absorbing sacks',#3290,$,$);
+#3306=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_62','Plastics mattress cages',#3290,$,$);
+#3307=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_63','Polypropylene bags',#3290,$,$);
+#3308=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_64','Polypropylene (PP) rock rolls',#3290,$,$);
+#3309=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_28_75','Sand bags',#3290,$,$);
+#3310=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32','Frames and grids',#3132,$,$);
+#3311=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_01','Aluminium-zinc coated retention grids',#3310,$,$);
+#3312=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_02','Aluminium frames',#3310,$,$);
+#3313=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_04','Aluminium structural sealant glazing subframes',#3310,$,$);
+#3314=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_06','Aluminium subframes',#3310,$,$);
+#3315=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_11','Carbon steel frames',#3310,$,$);
+#3316=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_12','Carbon steel frame fasteners',#3310,$,$);
+#3317=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_13','Carbon steel structural sealant glazing subframes',#3310,$,$);
+#3318=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_14','Carbon steel dry lining frames',#3310,$,$);
+#3319=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_16','Carbon steel subframes',#3310,$,$);
+#3320=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_22','Demountable suspended ceiling grids',#3310,$,$);
+#3321=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_30','Floor level chute support frames',#3310,$,$);
+#3322=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_80','Solar module ballasted mounting frames',#3310,$,$);
+#3323=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_81','Solar module free-standing mounting frames',#3310,$,$);
+#3324=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_82','Space frames',#3310,$,$);
+#3325=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_84','Stainless steel frames',#3310,$,$);
+#3326=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_85','Stainless steel frame fasteners',#3310,$,$);
+#3327=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_88','Timber dry lining frames',#3310,$,$);
+#3328=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_92','Unplasticized polyvinyl chloride (PVC-U) frames',#3310,$,$);
+#3329=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_93','Unplasticized polyvinyl chloride (PVC-U) subframes',#3310,$,$);
+#3330=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_94','Unplasticized polyvinyl chloride (PVC-U) window subframes',#3310,$,$);
+#3331=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_96','Wood frames',#3310,$,$);
+#3332=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_97','Wood subframes',#3310,$,$);
+#3333=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_32_98','Wood window subframes',#3310,$,$);
+#3334=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_34','Ground support products',#3132,$,$);
+#3335=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_34_34','Grouted pipe spiles',#3334,$,$);
+#3336=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_34_84','Steel spiles',#3334,$,$);
+#3337=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46','Lathings and furrings',#3132,$,$);
+#3338=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_21','Damp-proof lathings',#3337,$,$);
+#3339=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_28','Expanded metal lathings',#3337,$,$);
+#3340=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_36','Hardwood furrings',#3337,$,$);
+#3341=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_52','Metal arch form lathings',#3337,$,$);
+#3342=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_53','Metal furring channels',#3337,$,$);
+#3343=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_96','Wood lathings',#3337,$,$);
+#3344=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_46_97','Wood tapered furring pieces',#3337,$,$);
+#3345=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47','Legs, pedestals, hangers and stringers',#3132,$,$);
+#3346=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_01','Access floor bridging sections',#3345,$,$);
+#3347=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_02','Access floor pedestals',#3345,$,$);
+#3348=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_03','Access floor stringers',#3345,$,$);
+#3349=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_04','Acoustic batten cradles',#3345,$,$);
+#3350=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_20','Cubicle and partition legs',#3345,$,$);
+#3351=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_22','Decking and paving pedestals',#3345,$,$);
+#3352=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_47','Leg supports',#3345,$,$);
+#3353=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_49','Metal J hangers',#3345,$,$);
+#3354=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_50','Metal hanging rails',#3345,$,$);
+#3355=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_51','Metal suspended ceiling hangers',#3345,$,$);
+#3356=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_53','Metal stair stringers',#3345,$,$);
+#3357=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_84','Stair stringers',#3345,$,$);
+#3358=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_88','Timber dowel hanging rails',#3345,$,$);
+#3359=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_47_90','Timber stair stringers',#3345,$,$);
+#3360=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48','Lintels',#3132,$,$);
+#3361=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_02','Aggregate concrete trough lintels',#3360,$,$);
+#3362=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_11','Carbon steel lintels',#3360,$,$);
+#3363=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_13','Clay block trough lintels',#3360,$,$);
+#3364=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_15','Concrete lintels',#3360,$,$);
+#3365=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_33','Glass fibre-reinforced concrete (GRC) built-in lintel heads',#3360,$,$);
+#3366=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_34','Glass fibre-reinforced concrete (GRC) dressing lintel heads',#3360,$,$);
+#3367=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_43','Inset open fireplace throat-forming lintels and corbel units',#3360,$,$);
+#3368=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_50','Manufactured stone lintels',#3360,$,$);
+#3369=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_56','Natural stone lintels',#3360,$,$);
+#3370=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_67','Prestressed concrete lintels',#3360,$,$);
+#3371=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_84','Stainless steel lintels',#3360,$,$);
+#3372=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_48_88','Timber lintels',#3360,$,$);
+#3373=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50','Masts and poles',#3132,$,$);
+#3374=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_01','Aeronautical ground lighting masts',#3373,$,$);
+#3375=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_04','Antenna poles',#3373,$,$);
+#3376=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_15','Communications masts',#3373,$,$);
+#3377=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_35','Guyed utility poles',#3373,$,$);
+#3378=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_50','Metal windsock masts',#3373,$,$);
+#3379=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_59','Overhead line masts',#3373,$,$);
+#3380=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_64','Plastics windsock masts',#3373,$,$);
+#3381=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_85','Surveillance camera masts',#3373,$,$);
+#3382=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_90','Traffic signal poles',#3373,$,$);
+#3383=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_50_93','Un-guyed utility poles',#3373,$,$);
+#3384=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62','Piles and ancillary products',#3132,$,$);
+#3385=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_10','Carbon steel displacement piles',#3384,$,$);
+#3386=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_11','Carbon steel pile casings',#3384,$,$);
+#3387=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_12','Carbon steel pile shoes',#3384,$,$);
+#3388=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_13','Carbon steel screw piles',#3384,$,$);
+#3389=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_14','Carbon steel sheet piles',#3384,$,$);
+#3390=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_15','Cast steel pile shoes',#3384,$,$);
+#3391=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_16','Composite steel sheet piles',#3384,$,$);
+#3392=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_17','Concrete cantilevered knuckle piles',#3384,$,$);
+#3393=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_18','Concrete piles',#3384,$,$);
+#3394=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_19','Concrete pile caps',#3384,$,$);
+#3395=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_23','Concrete sheet piles',#3384,$,$);
+#3396=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_36','Hardwood piles',#3384,$,$);
+#3397=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_64','Plastics drainage weep holes',#3384,$,$);
+#3398=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_65','Plastics screw piles',#3384,$,$);
+#3399=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_66','Plastics sheet piles',#3384,$,$);
+#3400=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_77','Sheet pile connectors',#3384,$,$);
+#3401=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_80','Softwood piles',#3384,$,$);
+#3402=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_88','Timber pile brooming rings',#3384,$,$);
+#3403=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_62_96','Walings',#3384,$,$);
+#3404=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65','Platform products',#3132,$,$);
+#3405=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_11','Concrete platform copings',#3404,$,$);
+#3406=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_13','Concrete platform sections',#3404,$,$);
+#3407=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_15','Concrete platform slabs',#3404,$,$);
+#3408=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_17','Concrete platform units',#3404,$,$);
+#3409=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_34','Glass fibre-reinforced plastics (GRP) modular platform panels',#3404,$,$);
+#3410=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_65_65','Platform gap fillers',#3404,$,$);
+#3411=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70','Rail supports and fixings',#3132,$,$);
+#3412=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_08','Bullhead rail chairs',#3411,$,$);
+#3413=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_10','Cast blocks and spacer assemblies',#3411,$,$);
+#3414=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_12','Check rail baseplates',#3411,$,$);
+#3415=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_13','Check rail resilient baseplates',#3411,$,$);
+#3416=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_24','Driven spikes',#3411,$,$);
+#3417=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_30','Ferrules and bushes',#3411,$,$);
+#3418=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_44','Junction work baseplates',#3411,$,$);
+#3419=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_45','Junction work crossing plates',#3411,$,$);
+#3420=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_46','Junction work heel baseplates',#3411,$,$);
+#3421=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_47','Junction work resilient baseplates',#3411,$,$);
+#3422=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_48','Junction work resilient slide plates',#3411,$,$);
+#3423=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_49','Junction work slide plates',#3411,$,$);
+#3424=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_50','Junction work roller plates',#3411,$,$);
+#3425=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_54','Metal spacers assemblies',#3411,$,$);
+#3426=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_63','Plain line resilient baseplates',#3411,$,$);
+#3427=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_64','Plain line baseplates',#3411,$,$);
+#3428=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_65','Plastics rail embedments',#3411,$,$);
+#3429=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_67','Point clips',#3411,$,$);
+#3430=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_70','Rail boots',#3411,$,$);
+#3431=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_71','Rail clip and shoulder assemblies',#3411,$,$);
+#3432=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_74','Rubber chamber filling elements',#3411,$,$);
+#3433=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_76','Screw spikes',#3411,$,$);
+#3434=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_80','Soleplates',#3411,$,$);
+#3435=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_70_82','Spring spikes',#3411,$,$);
+#3436=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71','Rail rings',#3132,$,$);
+#3437=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_11','Carbon steel rings',#3436,$,$);
+#3438=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_12','Cast iron bolted rings',#3436,$,$);
+#3439=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_13','Cast iron expanded rings',#3436,$,$);
+#3440=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_15','Concrete bolted rings',#3436,$,$);
+#3441=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_16','Concrete expanded rings',#3436,$,$);
+#3442=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_71_57','Nodular iron rings',#3436,$,$);
+#3443=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72','Rail sleepers and bearers',#3132,$,$);
+#3444=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_17','Composite bearers',#3443,$,$);
+#3445=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_18','Composite sleepers',#3443,$,$);
+#3446=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_20','Concrete bearers',#3443,$,$);
+#3447=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_21','Concrete monoblock sleepers',#3443,$,$);
+#3448=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_22','Concrete twinblock sleepers',#3443,$,$);
+#3449=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_47','Longitudinal bearers',#3443,$,$);
+#3450=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_50','Modular bearer tie plates',#3443,$,$);
+#3451=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_77','Single block rail support',#3443,$,$);
+#3452=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_80','Sleeper anchors',#3443,$,$);
+#3453=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_83','Steel bearers',#3443,$,$);
+#3454=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_85','Steel sleepers',#3443,$,$);
+#3455=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_88','Timber bearers',#3443,$,$);
+#3456=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_72_89','Timber sleepers',#3443,$,$);
+#3457=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74','Rail pads and shims',#3132,$,$);
+#3458=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_06','Baseplate shims',#3457,$,$);
+#3459=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_27','Ethyl vinyl acetate rail pads',#3457,$,$);
+#3460=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_70','Rail packing shims',#3457,$,$);
+#3461=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_71','Rail pads',#3457,$,$);
+#3462=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_73','Resilient baseplate pads',#3457,$,$);
+#3463=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_74','Resilient bearer pads',#3457,$,$);
+#3464=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_76','Resilient sleeper pads',#3457,$,$);
+#3465=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_78','Rubber bonded cork rail pads',#3457,$,$);
+#3466=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_74_79','Rubber rail pads',#3457,$,$);
+#3467=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_76','Shock absorbers',#3132,$,$);
+#3468=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_76_09','Bridge shock absorbers',#3467,$,$);
+#3469=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_76_76','Seismic dampers',#3467,$,$);
+#3470=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84','Straps, ties, channels and inserts',#3132,$,$);
+#3471=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_02','Aluminium bronze slot ties',#3470,$,$);
+#3472=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_04','Aluminium bronze wall head restraint slip ties',#3470,$,$);
+#3473=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_11','Carbon steel cast-in channels',#3470,$,$);
+#3474=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_12','Carbon steel movement joint lateral restraint slip ties',#3470,$,$);
+#3475=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_13','Carbon steel lateral restraint straps',#3470,$,$);
+#3476=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_14','Carbon steel slot ties',#3470,$,$);
+#3477=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_15','Carbon steel threaded studding ties',#3470,$,$);
+#3478=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_16','Carbon steel tie bars',#3470,$,$);
+#3479=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_17','Carbon steel vertical restraint straps',#3470,$,$);
+#3480=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_18','Carbon steel wall head restraint slip ties',#3470,$,$);
+#3481=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_19','Cavity wall ties',#3470,$,$);
+#3482=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_20','Channel slot ties',#3470,$,$);
+#3483=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_21','Copper slot ties',#3470,$,$);
+#3484=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_22','Copper wall head restraint slip ties',#3470,$,$);
+#3485=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_28','Existing wall tie isolating sleeves',#3470,$,$);
+#3486=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_32','Galvanized steel slot ties',#3470,$,$);
+#3487=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_33','General-purpose slip ties',#3470,$,$);
+#3488=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_36','Head restraint slip ties',#3470,$,$);
+#3489=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_46','Lateral restraint ties',#3470,$,$);
+#3490=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_50','Masonry repair ties',#3470,$,$);
+#3491=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_57','Non-loadbearing wall head restraints',#3470,$,$);
+#3492=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_61','Permanent insulation formwork (PIF) connectors',#3470,$,$);
+#3493=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_62','Phosphor bronze slot ties',#3470,$,$);
+#3494=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_63','Phosphor bronze wall head restraint slip ties',#3470,$,$);
+#3495=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_64','Polyester (PET) straps',#3470,$,$);
+#3496=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_68','Retaining wall tie rods',#3470,$,$);
+#3497=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_69','Restraint belts',#3470,$,$);
+#3498=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_70','Roof gutter straps',#3470,$,$);
+#3499=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_73','Shear wall ties',#3470,$,$);
+#3500=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_74','Slotted wall channels',#3470,$,$);
+#3501=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_75','Stainless steel lateral restraint straps',#3470,$,$);
+#3502=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_76','Stainless steel slot ties',#3470,$,$);
+#3503=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_77','Stainless steel threaded studding ties',#3470,$,$);
+#3504=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_78','Stainless steel tie bars',#3470,$,$);
+#3505=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_79','Stainless steel vertical restraint straps',#3470,$,$);
+#3506=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_80','Stainless steel wall head restraint slip ties',#3470,$,$);
+#3507=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_81','Stainless steel drive ties',#3470,$,$);
+#3508=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_82','Stainless steel resin-bonded ties',#3470,$,$);
+#3509=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_83','Stainless steel expansion ties',#3470,$,$);
+#3510=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_84','Stainless steel cast-in channels',#3470,$,$);
+#3511=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_87','Surface-mounted channels',#3470,$,$);
+#3512=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_88','Tension or compression bracing products',#3470,$,$);
+#3513=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_89','Tension straps',#3470,$,$);
+#3514=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_95','Wall starters and connectors',#3470,$,$);
+#3515=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_84_97','Water-resistant concrete formwork ties',#3470,$,$);
+#3516=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85','Structural bearings',#3132,$,$);
+#3517=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_02','Acoustic and vibration resistant bearings',#3516,$,$);
+#3518=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_06','Bearing strips and mats',#3516,$,$);
+#3519=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_11','Carbon steel stools',#3516,$,$);
+#3520=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_30','Flat jacks',#3516,$,$);
+#3521=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_36','Hard packing',#3516,$,$);
+#3522=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_60','Padstones',#3516,$,$);
+#3523=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_74','Rubber bearings',#3516,$,$);
+#3524=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_80','Sliding surface bearings',#3516,$,$);
+#3525=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_85_84','Stainless steel stools',#3516,$,$);
+#3526=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86','Struts and props',#3132,$,$);
+#3527=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_11','Carbon steel struts',#3526,$,$);
+#3528=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_30','Formwork props',#3526,$,$);
+#3529=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_31','Formwork shores',#3526,$,$);
+#3530=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_33','Galvanized steel struts',#3526,$,$);
+#3531=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_76','Screw jacks',#3526,$,$);
+#3532=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_84','Stainless steel struts',#3526,$,$);
+#3533=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_89','Trench boxes or shields',#3526,$,$);
+#3534=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_90','Trench shores',#3526,$,$);
+#3535=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_86_91','Trench struts',#3526,$,$);
+#3536=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_88','Track beds',#3132,$,$);
+#3537=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_88_06','Ballast mats',#3536,$,$);
+#3538=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_88_07','Ballast track beds',#3536,$,$);
+#3539=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_88_17','Concrete track beds',#3536,$,$);
+#3540=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_89','Train arrestors',#3132,$,$);
+#3541=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_89_30','Fixed train arrestors',#3540,$,$);
+#3542=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_89_31','Friction train arrestors',#3540,$,$);
+#3543=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_89_39','Hydraulic train arrestors',#3540,$,$);
+#3544=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90','Trusses and lattice frames',#3132,$,$);
+#3545=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_02','Aluminium lattice trusses and frames',#3544,$,$);
+#3546=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_03','Aluminium trusses',#3544,$,$);
+#3547=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_10','Carbon steel lattice joists',#3544,$,$);
+#3548=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_11','Carbon steel lattice purlins',#3544,$,$);
+#3549=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_12','Carbon steel pitched roof trusses',#3544,$,$);
+#3550=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_13','Carbon steel trusses',#3544,$,$);
+#3551=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_36','Hardwood lattice joists',#3544,$,$);
+#3552=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_37','Hardwood trussed rafters',#3544,$,$);
+#3553=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_38','Hardwood trusses',#3544,$,$);
+#3554=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_81','Softwood trusses',#3544,$,$);
+#3555=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_82','Softwood trussed rafters',#3544,$,$);
+#3556=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_83','Stainless steel cable stays',#3544,$,$);
+#3557=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_84','Steel lattice frames',#3544,$,$);
+#3558=IFCCLASSIFICATIONREFERENCE($,'Pr_20_85_90_85','Stainless steel trusses',#3544,$,$);
+#3559=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93','Unit structure and general products',#2299,$,$);
+#3560=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33','Glass blocks and panels',#3559,$,$);
+#3561=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_12','Cellular glass thermal blocks',#3560,$,$);
+#3562=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_30','Fire-rated glass block wall panels',#3560,$,$);
+#3563=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_31','Glass block dry joint spacers',#3560,$,$);
+#3564=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_32','Glass block mortar joint spacers',#3560,$,$);
+#3565=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_33','Glass block wall panels',#3560,$,$);
+#3566=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_34','Glass blocks',#3560,$,$);
+#3567=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_52','Mortar jointed glass block wall panels',#3560,$,$);
+#3568=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_53','Mortar jointed and sealant pointed glass block wall panels',#3560,$,$);
+#3569=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_33_76','Sealant jointed glass block wall panels',#3560,$,$);
+#3570=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_37','Headwall and swale inlet products',#3559,$,$);
+#3571=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_37_62','Plastics headwall units',#3570,$,$);
+#3572=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_37_63','Plastics swale inlets',#3570,$,$);
+#3573=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_37_65','Precast concrete headwall units',#3570,$,$);
+#3574=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_37_66','Precast concrete swale inlets',#3570,$,$);
+#3575=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_51','Masonry flooring units',#3559,$,$);
+#3576=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_51_02','Aggregate concrete infill blocks',#3575,$,$);
+#3577=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_51_05','Autoclaved aerated concrete (AAC) infill blocks',#3575,$,$);
+#3578=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_51_28','Expanded polystyrene (EPS) infill blocks',#3575,$,$);
+#3579=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52','Masonry walling units',#3559,$,$);
+#3580=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_01','Aggregate concrete blocks',#3579,$,$);
+#3581=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_02','Aggregate concrete bricks',#3579,$,$);
+#3582=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_05','Autoclaved aerated concrete (AAC) blocks',#3579,$,$);
+#3583=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_08','Aerated lightweight concrete (ALC) blocks',#3579,$,$);
+#3584=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_09','Baryte blocks',#3579,$,$);
+#3585=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_10','Baryte bricks',#3579,$,$);
+#3586=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_11','Calcium silicate blocks',#3579,$,$);
+#3587=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_12','Calcium silicate bricks',#3579,$,$);
+#3588=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_13','Cast stone masonry units',#3579,$,$);
+#3589=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_14','Clay blocks',#3579,$,$);
+#3590=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_15','Clay bricks',#3579,$,$);
+#3591=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_16','Clay brick slips',#3579,$,$);
+#3592=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_23','Dimensioned stones',#3579,$,$);
+#3593=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_27','Engineering bricks',#3579,$,$);
+#3594=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_32','Glazed clay brick slips',#3579,$,$);
+#3595=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_33','Glass fibre-reinforced concrete (GRC) blocks',#3579,$,$);
+#3596=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_34','Glazed clay bricks',#3579,$,$);
+#3597=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_35','Glazed concrete blocks',#3579,$,$);
+#3598=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_36','Gypsum blocks',#3579,$,$);
+#3599=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_42','Insulated concrete blocks',#3579,$,$);
+#3600=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_48','Loadbearing thermal break units',#3579,$,$);
+#3601=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_50','Manufactured stone blocks',#3579,$,$);
+#3602=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_56','Natural dimensioned stones',#3579,$,$);
+#3603=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_57','Natural rubble stones',#3579,$,$);
+#3604=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_58','Natural stone plugs',#3579,$,$);
+#3605=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_71','Reclaimed clay bricks',#3579,$,$);
+#3606=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_73','Refractory bricks',#3579,$,$);
+#3607=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_75','Salvaged natural stones',#3579,$,$);
+#3608=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_87','Terracotta units',#3579,$,$);
+#3609=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_52_89','Thin joint autoclaved aerated concrete (AAC) blocks',#3579,$,$);
+#3610=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71','Retaining wall units',#3559,$,$);
+#3611=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_11','Carbon steel spreader plates',#3610,$,$);
+#3612=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_15','Concrete interlocking blocks',#3610,$,$);
+#3613=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_16','Concrete crib wall units',#3610,$,$);
+#3614=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_17','Concrete panels',#3610,$,$);
+#3615=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_18','Concrete diaphragm wall units',#3610,$,$);
+#3616=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_53','Modular reinforced concrete stem wall units',#3610,$,$);
+#3617=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_63','Pre-filled caged containers',#3610,$,$);
+#3618=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_65','Preformed stop ends',#3610,$,$);
+#3619=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_75','Sawn hardwood crib wall units',#3610,$,$);
+#3620=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_71_91','Tyre bales',#3610,$,$);
+#3621=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_76','Shaft-lining products',#3559,$,$);
+#3622=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_76_11','Carbon steel shaft-lining segments',#3621,$,$);
+#3623=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_76_12','Cast iron shaft-lining segments',#3621,$,$);
+#3624=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_76_15','Concrete shaft-lining segments',#3621,$,$);
+#3625=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_76_80','Spheroidal graphite iron (SGI) shaft-lining segments',#3621,$,$);
+#3626=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_84','Structural roofing units',#3559,$,$);
+#3627=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_84_15','Concrete arch units',#3626,$,$);
+#3628=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_84_16','Concrete dome units',#3626,$,$);
+#3629=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85','Structural units',#3559,$,$);
+#3630=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85_14','Concrete solid wall and composite wall units',#3629,$,$);
+#3631=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85_16','Concrete structural insulated panels (SIPs)',#3629,$,$);
+#3632=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85_52','Metal structural insulated panels (SIPs)',#3629,$,$);
+#3633=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85_88','Timber-framed straw-filled panels',#3629,$,$);
+#3634=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_85_90','Timber structural insulated panels (SIPs)',#3629,$,$);
+#3635=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90','Tunnel-lining products',#3559,$,$);
+#3636=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_11','Carbon steel tunnel-lining segments',#3635,$,$);
+#3637=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_12','Cast iron tunnel-lining segments',#3635,$,$);
+#3638=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_15','Concrete tunnel-lining segments',#3635,$,$);
+#3639=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_50','Masonry tunnel-lining units',#3635,$,$);
+#3640=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_80','Spheroidal graphite iron (SGI) tunnel-lining segments',#3635,$,$);
+#3641=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_90_90','Tunnel segment connectors',#3635,$,$);
+#3642=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_92','Tunnel structure ancillary products',#3559,$,$);
+#3643=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_92_10','Canopy tubes',#3642,$,$);
+#3644=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_92_62','Polyvinyl chloride (PVC) waterproofing pipes',#3642,$,$);
+#3645=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_92_88','Tunnel regrouting hoses',#3642,$,$);
+#3646=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_92_90','Tunnel regrouting junction boxes',#3642,$,$);
+#3647=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_95','Tunnel opening products',#3559,$,$);
+#3648=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_95_15','Tunnel frame sills',#3647,$,$);
+#3649=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_95_44','Tunnel frame jambs',#3647,$,$);
+#3650=IFCCLASSIFICATIONREFERENCE($,'Pr_20_93_95_47','Tunnel frame lintels',#3647,$,$);
+#3651=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96','Wire structure and general products',#2299,$,$);
+#3652=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71','Reinforcement and ancillaries',#3651,$,$);
+#3653=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_10','Carbon steel bed joint reinforcement',#3652,$,$);
+#3654=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_11','Carbon steel cage reinforcement',#3652,$,$);
+#3655=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_12','Carbon steel fabric reinforcement',#3652,$,$);
+#3656=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_13','Carbon steel plain bar reinforcement',#3652,$,$);
+#3657=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_14','Carbon steel ribbed bar reinforcement',#3652,$,$);
+#3658=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_15','Carbon steel post-installed starter bars',#3652,$,$);
+#3659=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_16','Carbon steel tendons',#3652,$,$);
+#3660=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_17','Copper rod reinforcement',#3652,$,$);
+#3661=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_26','Fibre-reinforced polymer plates',#3652,$,$);
+#3662=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_27','Fibre-reinforced polymer tendons',#3652,$,$);
+#3663=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_28','Fibre-reinforced plastics bar reinforcement',#3652,$,$);
+#3664=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_30','Fibrous reinforcement',#3652,$,$);
+#3665=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_33','Glass fibre fleece reinforcement',#3652,$,$);
+#3666=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_34','Glass fibre mesh reinforcement',#3652,$,$);
+#3667=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_35','Glass fibre reinforcement mats',#3652,$,$);
+#3668=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_36','Glass fibre reinforcement tendons',#3652,$,$);
+#3669=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_51','Mechanical reinforcement couplers',#3652,$,$);
+#3670=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_52','Meshwork joint reinforcement',#3652,$,$);
+#3671=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_62','Phosphor bronze rod reinforcement',#3652,$,$);
+#3672=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_64','Polyester (PES) fibre fleece reinforcement',#3652,$,$);
+#3673=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_66','Prefabricated continuity reinforcement strips',#3652,$,$);
+#3674=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_67','Prefabricated reinforcement',#3652,$,$);
+#3675=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_71','Reinforcement bolsters',#3652,$,$);
+#3676=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_73','Reinforcement chairs',#3652,$,$);
+#3677=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_83','Stainless steel bed joint reinforcement',#3652,$,$);
+#3678=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_84','Stainless steel fabric reinforcement',#3652,$,$);
+#3679=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_85','Stainless steel plain bar reinforcement',#3652,$,$);
+#3680=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_86','Stainless steel ribbed bar reinforcement',#3652,$,$);
+#3681=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_87','Stainless steel post-installed starter bars',#3652,$,$);
+#3682=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_71_97','Welded wire mesh reinforcement',#3652,$,$);
+#3683=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96','Wire fencing ancillary products',#3651,$,$);
+#3684=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_11','Carbon steel fencing cleats',#3683,$,$);
+#3685=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_12','Carbon steel fencing droppers',#3683,$,$);
+#3686=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_13','Carbon steel fencing rings',#3683,$,$);
+#3687=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_14','Carbon steel fencing strainers',#3683,$,$);
+#3688=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_15','Carbon steel fencing stretcher bars',#3683,$,$);
+#3689=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_16','Carbon steel fencing wedges',#3683,$,$);
+#3690=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_17','Carbon steel preformed fencing lashing rods',#3683,$,$);
+#3691=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_96_72','Rotating vane fence toppings',#3683,$,$);
+#3692=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97','Wires, ropes, twines and chains',#3651,$,$);
+#3693=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_02','Aluminium wires',#3692,$,$);
+#3694=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_11','Carbon steel barbed tapes',#3692,$,$);
+#3695=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_12','Carbon steel barbed wires',#3692,$,$);
+#3696=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_13','Carbon steel chains',#3692,$,$);
+#3697=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_14','Carbon steel high tensile barbed wires',#3692,$,$);
+#3698=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_15','Carbon steel high tensile line wires',#3692,$,$);
+#3699=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_16','Carbon steel razor wires',#3692,$,$);
+#3700=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_17','Carbon steel spring wires',#3692,$,$);
+#3701=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_18','Carbon steel wire ropes',#3692,$,$);
+#3702=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_19','Carbon steel wires',#3692,$,$);
+#3703=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_21','Copper alloy wires',#3692,$,$);
+#3704=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_27','Electric fence ropes',#3692,$,$);
+#3705=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_30','Fibre-reinforced polymer ropes',#3692,$,$);
+#3706=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_51','Mixed fibre ropes',#3692,$,$);
+#3707=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_56','Natural ropes',#3692,$,$);
+#3708=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_57','Natural threads',#3692,$,$);
+#3709=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_58','Natural twines',#3692,$,$);
+#3710=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_60','Phosphor bronze wires',#3692,$,$);
+#3711=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_62','Plastics chains',#3692,$,$);
+#3712=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_63','Plastics wires or lines',#3692,$,$);
+#3713=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_73','Shock-absorbing lanyards',#3692,$,$);
+#3714=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_74','Stainless steel barbed tapes',#3692,$,$);
+#3715=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_75','Stainless steel barbed wires',#3692,$,$);
+#3716=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_76','Stainless steel chains',#3692,$,$);
+#3717=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_77','Stainless steel high tensile barbed wires',#3692,$,$);
+#3718=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_78','Stainless steel high tensile line wires',#3692,$,$);
+#3719=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_79','Stainless steel razor wires',#3692,$,$);
+#3720=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_80','Stainless steel spring wires',#3692,$,$);
+#3721=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_81','Stainless steel wire ropes',#3692,$,$);
+#3722=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_82','Stainless steel wires',#3692,$,$);
+#3723=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_83','Swimming pool flagged ropes',#3692,$,$);
+#3724=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_84','Swimming pool false start ropes',#3692,$,$);
+#3725=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_85','Swimming pool lane ropes',#3692,$,$);
+#3726=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_86','Synthetic chains',#3692,$,$);
+#3727=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_87','Synthetic ropes',#3692,$,$);
+#3728=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_88','Synthetic threads',#3692,$,$);
+#3729=IFCCLASSIFICATIONREFERENCE($,'Pr_20_96_97_89','Synthetic twines',#3692,$,$);
+#3730=IFCCLASSIFICATIONREFERENCE($,'Pr_25','Skin products',#8,$,$);
+#3731=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30','Fixed access products',#3730,$,$);
+#3732=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30','Floor plates, gratings and edgings',#3731,$,$);
+#3733=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_01','Aluminium cold-formed planks',#3732,$,$);
+#3734=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_02','Aluminium duckboards',#3732,$,$);
+#3735=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_03','Aluminium edging sections',#3732,$,$);
+#3736=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_04','Aluminium expanded gratings',#3732,$,$);
+#3737=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_05','Aluminium open bar metal gratings',#3732,$,$);
+#3738=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_06','Aluminium solid metal plates',#3732,$,$);
+#3739=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_10','Cast iron floor gratings',#3732,$,$);
+#3740=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_12','Carbon steel cold-formed planks',#3732,$,$);
+#3741=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_14','Carbon steel edging sections',#3732,$,$);
+#3742=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_16','Carbon steel expanded gratings',#3732,$,$);
+#3743=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_18','Carbon steel open bar metal gratings',#3732,$,$);
+#3744=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_20','Carbon steel solid metal plates',#3732,$,$);
+#3745=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_21','Chequer plates',#3732,$,$);
+#3746=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_22','Concrete planks',#3732,$,$);
+#3747=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_34','Glass fibre-reinforced plastics (GRP) moulded open mesh gratings',#3732,$,$);
+#3748=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_36','Hardwood duckboards',#3732,$,$);
+#3749=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_58','Open bar glass fibre-reinforced plastics (GRP) gratings',#3732,$,$);
+#3750=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_63','Plastics perforated gratings',#3732,$,$);
+#3751=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_80','Softwood duckboards',#3732,$,$);
+#3752=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_81','Solid glass fibre-reinforced plastics (GRP) plates',#3732,$,$);
+#3753=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_82','Stainless steel cold-formed planks',#3732,$,$);
+#3754=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_83','Stainless steel edging sections',#3732,$,$);
+#3755=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_84','Stainless steel expanded gratings',#3732,$,$);
+#3756=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_85','Stainless steel open bar metal gratings',#3732,$,$);
+#3757=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_30_86','Stainless steel solid metal plates',#3732,$,$);
+#3758=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36','Handrails',#3731,$,$);
+#3759=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_03','Aluminium handrails',#3758,$,$);
+#3760=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_08','Brass handrails',#3758,$,$);
+#3761=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_11','Carbon steel handrails',#3758,$,$);
+#3762=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_30','Fibre-reinforced polymer handrails',#3758,$,$);
+#3763=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_34','Grab rails',#3758,$,$);
+#3764=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_50','Manufactured stone handrails',#3758,$,$);
+#3765=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_63','Plastics handrails',#3758,$,$);
+#3766=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_84','Stainless steel handrails',#3758,$,$);
+#3767=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_36_96','Wood handrails',#3758,$,$);
+#3768=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_75','Safety cages',#3731,$,$);
+#3769=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_75_02','Aluminium ladder safety cages',#3768,$,$);
+#3770=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_75_15','Carbon steel ladder safety cages',#3768,$,$);
+#3771=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_75_80','Stainless steel ladder safety cages',#3768,$,$);
+#3772=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85','Stair and ladder units',#3731,$,$);
+#3773=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_02','Access ladders',#3772,$,$);
+#3774=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_03','Aluminium loft ladders',#3772,$,$);
+#3775=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_11','Cat ladders',#3772,$,$);
+#3776=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_16','Curved internal staircases',#3772,$,$);
+#3777=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_22','Drainage access chamber ladders',#3772,$,$);
+#3778=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_23','Drainage access chamber steps',#3772,$,$);
+#3779=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_36','Hardwood loft ladders',#3772,$,$);
+#3780=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_48','Lift pit ladders',#3772,$,$);
+#3781=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_64','Pool ladders',#3772,$,$);
+#3782=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_65','Pool stepladders',#3772,$,$);
+#3783=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_73','Roll-up ladders',#3772,$,$);
+#3784=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_79','Sliding ladders',#3772,$,$);
+#3785=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_83','Steel loft ladders',#3772,$,$);
+#3786=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_84','Spiral internal staircases',#3772,$,$);
+#3787=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_85','Step-over ladders',#3772,$,$);
+#3788=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_86','Straight internal staircases',#3772,$,$);
+#3789=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_85_90','Travelling ladders',#3772,$,$);
+#3790=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86','Surface-level traffic control products',#3731,$,$);
+#3791=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_03','Aluminium alloy vehicle flow plates',#3790,$,$);
+#3792=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_04','Aluminium alloy vehicle stops',#3790,$,$);
+#3793=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_11','Carbon steel vehicle flow plates',#3790,$,$);
+#3794=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_12','Carbon steel vehicle stops',#3790,$,$);
+#3795=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_15','Concrete demarcation units',#3790,$,$);
+#3796=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_16','Concrete vehicle stops',#3790,$,$);
+#3797=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_60','Pavement extenders',#3790,$,$);
+#3798=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_72','Rising kerbs',#3790,$,$);
+#3799=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_73','Rising ramp vehicle barriers',#3790,$,$);
+#3800=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_74','Rising spike vehicle stops',#3790,$,$);
+#3801=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_75','Rubber vehicle stops',#3790,$,$);
+#3802=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_83','Speed restriction ramps',#3790,$,$);
+#3803=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_88','Timber vehicle stops',#3790,$,$);
+#3804=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_90','Traffic-calming speed cushions',#3790,$,$);
+#3805=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_86_91','Traffic islands',#3790,$,$);
+#3806=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90','Treads and landing units',#3731,$,$);
+#3807=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_02','Aluminium stair landing units',#3806,$,$);
+#3808=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_04','Aluminium stair treads',#3806,$,$);
+#3809=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_09','Carbon steel stair landing units',#3806,$,$);
+#3810=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_10','Carbon steel stair treads',#3806,$,$);
+#3811=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_11','Concrete glazed stair treads',#3806,$,$);
+#3812=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_12','Concrete glazed stair landing panels',#3806,$,$);
+#3813=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_13','Concrete helical stair flight units',#3806,$,$);
+#3814=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_14','Concrete spiral stair flight units',#3806,$,$);
+#3815=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_15','Concrete stair flight and landing units',#3806,$,$);
+#3816=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_16','Concrete stair flight units',#3806,$,$);
+#3817=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_17','Concrete stair landing units',#3806,$,$);
+#3818=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_18','Concrete step units',#3806,$,$);
+#3819=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_19','Concrete stair treads',#3806,$,$);
+#3820=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_20','Concrete stair risers',#3806,$,$);
+#3821=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_32','Glass stair landing units',#3806,$,$);
+#3822=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_33','Glass stair treads',#3806,$,$);
+#3823=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_34','Glued laminated timber stair landing units',#3806,$,$);
+#3824=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_35','Glued laminated timber stair treads',#3806,$,$);
+#3825=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_36','Hardwood stair treads',#3806,$,$);
+#3826=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_37','Hardwood stair landing units',#3806,$,$);
+#3827=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_50','Metal stair spines',#3806,$,$);
+#3828=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_52','Metal stair treads',#3806,$,$);
+#3829=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_62','Plastics stair landing units',#3806,$,$);
+#3830=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_63','Plastics stair treads',#3806,$,$);
+#3831=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_70','Reconstituted stone stair treads',#3806,$,$);
+#3832=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_80','Softwood stair landing units',#3806,$,$);
+#3833=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_81','Softwood stair treads',#3806,$,$);
+#3834=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_82','Stainless steel stair landing units',#3806,$,$);
+#3835=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_83','Stainless steel stair treads',#3806,$,$);
+#3836=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_84','Stone stair treads',#3806,$,$);
+#3837=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_85','Stone step units',#3806,$,$);
+#3838=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_86','Stone stair landing units',#3806,$,$);
+#3839=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_88','Timber risers',#3806,$,$);
+#3840=IFCCLASSIFICATIONREFERENCE($,'Pr_25_30_90_89','Timber stair treads',#3806,$,$);
+#3841=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31','Formless skin products',#3730,$,$);
+#3842=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28','Expanding foams',#3841,$,$);
+#3843=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_52','Mineral-based injected foam insulation',#3842,$,$);
+#3844=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_65','Polyisocyanurate (PIR) foam insulation',#3842,$,$);
+#3845=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_66','Polyurethane (PUR) injected foam insulation',#3842,$,$);
+#3846=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_67','Polyurethane (PUR) foam insulation',#3842,$,$);
+#3847=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_93','Urea-formaldehyde foam (UFF) insulation',#3842,$,$);
+#3848=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_28_94','Vermin and insect-proof expanding foams',#3842,$,$);
+#3849=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48','Loose insulation',#3841,$,$);
+#3850=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_12','Cellulose fibre loose insulation',#3849,$,$);
+#3851=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_27','Expanded cork loose insulation',#3849,$,$);
+#3852=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_28','Expanded polystyrene (EPS) bead insulation',#3849,$,$);
+#3853=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_34','Granular mineral wool insulation',#3849,$,$);
+#3854=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_48','Loose-fill mineral wool fibre insulation',#3849,$,$);
+#3855=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_61','Perlite loose insulation',#3849,$,$);
+#3856=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_66','Polyurethane (PUR) foam chip insulation',#3849,$,$);
+#3857=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_71','Recycled paper loose insulation',#3849,$,$);
+#3858=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_76','Sea grass loose insulation',#3849,$,$);
+#3859=IFCCLASSIFICATIONREFERENCE($,'Pr_25_31_48_94','Vermiculite loose insulation',#3849,$,$);
+#3860=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57','Non-rigid sheet, mat and strip skin products',#3730,$,$);
+#3861=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06','Batt and quilt products',#3860,$,$);
+#3862=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_02','Aerogel blanket insulation',#3861,$,$);
+#3863=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_15','Cotton fibre batt insulation',#3861,$,$);
+#3864=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_28','Felt backing insulation',#3861,$,$);
+#3865=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_30','Flexible glass wool mat insulation',#3861,$,$);
+#3866=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_31','Flexible stone wool mat insulation',#3861,$,$);
+#3867=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_32','Formed recycled paper insulation',#3861,$,$);
+#3868=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_34','Glass fibre insulation',#3861,$,$);
+#3869=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_37','Hemp fibre insulation',#3861,$,$);
+#3870=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_47','Lift car protective quilts',#3861,$,$);
+#3871=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_50','Mineral fibre slab insulation',#3861,$,$);
+#3872=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_52','Mineral wool flexible insulation',#3861,$,$);
+#3873=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_53','Mineral wool insulation',#3861,$,$);
+#3874=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_54','Mineral wool resilient layer sound insulation',#3861,$,$);
+#3875=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_55','Mineral wool resilient strip sound insulation',#3861,$,$);
+#3876=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_56','Mineral wool slab insulation',#3861,$,$);
+#3877=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_57','Multifoil blanket insulation',#3861,$,$);
+#3878=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_70','Reflective foil insulation',#3861,$,$);
+#3879=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_71','Resilient layer insulation',#3861,$,$);
+#3880=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_76','Sheep wool insulation',#3861,$,$);
+#3881=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_94','Vacuum insulated panels',#3861,$,$);
+#3882=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_06_97','Wood fibre batt insulation',#3861,$,$);
+#3883=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_08','Bitumen-based membranes, sheets and fabrics',#3860,$,$);
+#3884=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_08_08','Bitumen sheets',#3883,$,$);
+#3885=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_08_58','Pitch polymer membranes',#3883,$,$);
+#3886=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_08_71','Reinforced bitumen membrane perforated underlays',#3883,$,$);
+#3887=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_08_75','Reinforced bitumen roofing sheets',#3883,$,$);
+#3888=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10','Building papers and vapour-permeable sheets',#3860,$,$);
+#3889=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_04','Aluminium foil/ kraft paper laminates',#3888,$,$);
+#3890=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_08','Bitumen bonded kraft papers',#3888,$,$);
+#3891=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_09','Building papers',#3888,$,$);
+#3892=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_12','Cellulose based building papers',#3888,$,$);
+#3893=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_37','High-density polyethylene (PE-HD) vapour-permeable sheets',#3888,$,$);
+#3894=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_45','Kraft papers',#3888,$,$);
+#3895=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_47','Low-density polyethylene (PE-LD) vapour-permeable sheets',#3888,$,$);
+#3896=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_62','Polyethylene coated kraft papers',#3888,$,$);
+#3897=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_64','Polyolefin vapour-permeable sheets',#3888,$,$);
+#3898=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_66','Polypropylene vapour-permeable sheets',#3888,$,$);
+#3899=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_68','Polypropylene and polyethylene laminate vapour-permeable sheets',#3888,$,$);
+#3900=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_10_94','Vapour-permeable sheets',#3888,$,$);
+#3901=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21','Damp-proof courses and cavity trays',#3860,$,$);
+#3902=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_02','Aluminium damp-proof courses and cavity trays',#3901,$,$);
+#3903=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_06','Bitumen-based damp-proof courses and cavity trays',#3901,$,$);
+#3904=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_08','Bitumen polymer damp-proof courses and cavity trays',#3901,$,$);
+#3905=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_11','Carbon steel damp-proof courses and cavity trays',#3901,$,$);
+#3906=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_12','Cavity closer and damp-proof course supports',#3901,$,$);
+#3907=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_13','Clay brick damp-proof courses',#3901,$,$);
+#3908=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_14','Cold-applied roofing membrane adhesive damp-proof course joint sealers',#3901,$,$);
+#3909=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_16','Coping or capping damp-proof courses',#3901,$,$);
+#3910=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_18','Copper damp-proof courses and cavity trays',#3901,$,$);
+#3911=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_27','Ethylene propylene (EP) damp-proof courses and cavity trays',#3901,$,$);
+#3912=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_33','Gas-resistant preformed cavity trays',#3901,$,$);
+#3913=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_34','Gas-resistant preformed cavity trays and cloaks',#3901,$,$);
+#3914=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_35','Gas-resistant damp-proof courses',#3901,$,$);
+#3915=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_36','Granite damp-proof courses',#3901,$,$);
+#3916=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_42','Insertion cavity trays',#3901,$,$);
+#3917=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_43','Insulated damp-proof courses',#3901,$,$);
+#3918=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_44','Joist seals',#3901,$,$);
+#3919=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_48','Lead damp-proof courses and cavity trays',#3901,$,$);
+#3920=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_50','Mastic asphalt (MA) damp-proof courses',#3901,$,$);
+#3921=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_61','Pitch polymer damp-proof courses and cavity trays',#3901,$,$);
+#3922=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_63','Polyethylene (PE) damp-proof courses and cavity trays',#3901,$,$);
+#3923=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_64','Polypropylene (PP) damp-proof courses and cavity trays',#3901,$,$);
+#3924=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_65','Polymeric damp-proof courses',#3901,$,$);
+#3925=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_66','Preformed cavity trays',#3901,$,$);
+#3926=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_67','Preformed cavity trays and cloaks',#3901,$,$);
+#3927=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_68','Preformed damp-proof courses',#3901,$,$);
+#3928=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_72','Rising damp remedial units',#3901,$,$);
+#3929=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_80','Slate damp-proof courses',#3901,$,$);
+#3930=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_21_99','Zinc damp-proof courses',#3901,$,$);
+#3931=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51','Membranes, liners, flexible sheets and fabrics',#3860,$,$);
+#3932=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_02','Acrylonitrile butadiene styrene (ABS) studded membranes',#3931,$,$);
+#3933=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_04','Aluminium-based membranes',#3931,$,$);
+#3934=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_10','Butyl rubber (polyisobutylene isoprene (IIR)) geomembranes',#3931,$,$);
+#3935=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_13','Chlorinated polyethylene (PE-C) geomembranes',#3931,$,$);
+#3936=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_14','Chlorosulfonated polyethylene (PE-CS) geomembranes',#3931,$,$);
+#3937=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_16','Coated polyester fabrics',#3931,$,$);
+#3938=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_27','Ethylene propylene diene monomer (EPDM) geomembranes',#3931,$,$);
+#3939=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_28','Fibre-reinforced polymer fabrics',#3931,$,$);
+#3940=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_29','Expanded polystyrene (EPS) studded sheets',#3931,$,$);
+#3941=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_30','Flexible pond liners',#3931,$,$);
+#3942=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_31','Flexible polyolefin (FPO) polymeric membranes',#3931,$,$);
+#3943=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_32','Glass fibre membranes',#3931,$,$);
+#3944=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_33','Glass fibre fleeces',#3931,$,$);
+#3945=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_35','Glass fibre-reinforced plastics (GRP) sheet liners',#3931,$,$);
+#3946=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_36','High-density polyethylene (PE-HD) studded sheets',#3931,$,$);
+#3947=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_38','High-impact polystyrene (HIPS) studded sheets',#3931,$,$);
+#3948=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_42','Integrated flexible photovoltaic (PV) module membranes',#3931,$,$);
+#3949=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_51','Membrane walkways',#3931,$,$);
+#3950=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_52','Metallized plastics window films',#3931,$,$);
+#3951=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_54','Modified acrylic fabric',#3931,$,$);
+#3952=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_60','Plastics window films',#3931,$,$);
+#3953=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_61','Plastics preformed liners',#3931,$,$);
+#3954=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_66','Polymeric membranes',#3931,$,$);
+#3955=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_67','Polymeric membrane collars',#3931,$,$);
+#3956=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_68','Polypropylene (PP) studded sheets',#3931,$,$);
+#3957=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_70','Polyvinyl chloride geomembranes',#3931,$,$);
+#3958=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_74','Rubber studded sheets',#3931,$,$);
+#3959=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_77','Silicon carbide slip-resistant paper',#3931,$,$);
+#3960=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_79','Slip-resistant sheets and strips',#3931,$,$);
+#3961=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_88','Thermoplastic polyolefin elastomer (TPE) polymeric membranes',#3931,$,$);
+#3962=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_51_95','Vinyl ethylene terpolymer (VET) polymeric membranes',#3931,$,$);
+#3963=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53','Moisture retention sheets',#3860,$,$);
+#3964=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53_30','Foamed aminoplastic resin moisture retention mats',#3963,$,$);
+#3965=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53_50','Mineral wool water retention geotextiles',#3963,$,$);
+#3966=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53_62','Polyacrylonitrile (PAN) water retention geotextiles',#3963,$,$);
+#3967=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53_63','Polyamide water retention geotextiles',#3963,$,$);
+#3968=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_53_65','Polypropylene water retention geotextiles',#3963,$,$);
+#3969=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56','Netting and non-reinforcement mesh',#3860,$,$);
+#3970=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_07','Bird deterrent nets',#3969,$,$);
+#3971=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_14','Cleft chestnut palisade rolls',#3969,$,$);
+#3972=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_15','Continuous chain link metal mesh',#3969,$,$);
+#3973=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_16','Coarse woven plastics mesh',#3969,$,$);
+#3974=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_27','Expanded metal mesh',#3969,$,$);
+#3975=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_28','Extruded plastics mesh',#3969,$,$);
+#3976=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_29','Fine woven plastics mesh',#3969,$,$);
+#3977=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_34','Glass fibre mesh',#3969,$,$);
+#3978=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_37','Hexagon mesh',#3969,$,$);
+#3979=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_52','Metallic nets',#3969,$,$);
+#3980=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_56','Natural nets',#3969,$,$);
+#3981=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_61','Perforated metal mesh',#3969,$,$);
+#3982=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_64','Plastics nets',#3969,$,$);
+#3983=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_85','Spun-bonded plastics mesh',#3969,$,$);
+#3984=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_95','Welded metal mesh',#3969,$,$);
+#3985=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_56_97','Woven metal mesh',#3969,$,$);
+#3986=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61','Plant fibre-based membranes, liners, flexible sheet and fabrics',#3860,$,$);
+#3987=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_15','Coir geotextiles',#3986,$,$);
+#3988=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_29','Flax geotextiles',#3986,$,$);
+#3989=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_37','Hemp geotextiles',#3986,$,$);
+#3990=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_44','Jute geotextiles',#3986,$,$);
+#3991=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_59','Plant and natural fibre linings',#3986,$,$);
+#3992=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_60','Paper pulp linings',#3986,$,$);
+#3993=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_79','Sisal membranes',#3986,$,$);
+#3994=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_80','Sisal jute mix membranes',#3986,$,$);
+#3995=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_95','Wood fibre membranes',#3986,$,$);
+#3996=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_97','Wool membranes',#3986,$,$);
+#3997=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_61_98','Wool felt membranes',#3986,$,$);
+#3998=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65','Plastics membranes',#3860,$,$);
+#3999=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_15','Chemically treated termite barrier sheets',#3998,$,$);
+#4000=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_28','Ethylene tetraflouroethylene (ETFE) sheets',#3998,$,$);
+#4001=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_37','High-density polyethylene (PE-HD) sheets',#3998,$,$);
+#4002=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_42','Ionomer sheets',#3998,$,$);
+#4003=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_47','Low-density polyethylene (PE-LD) sheets',#3998,$,$);
+#4004=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_60','Plastics sheets',#3998,$,$);
+#4005=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_62','Polyester sheets',#3998,$,$);
+#4006=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_63','Polyethylene sheets',#3998,$,$);
+#4007=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_65','Polypropylene sheets',#3998,$,$);
+#4008=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_66','Polypropylene and polyethylene laminate sheets',#3998,$,$);
+#4009=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_67','Polytetrafluorethylene (PTFE) sheets',#3998,$,$);
+#4010=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_70','Polyvinylidene fluoride (PVDF) sheets',#3998,$,$);
+#4011=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_72','Polyvinyl butyral (PVB) sheets',#3998,$,$);
+#4012=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_65_92','Unplasticized polyvinyl chloride (PVC-U) sheets',#3998,$,$);
+#4013=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85','Synthetic filter fabrics',#3860,$,$);
+#4014=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_10','Capillary fleece',#4013,$,$);
+#4015=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_62','Polyester fibre fleece',#4013,$,$);
+#4016=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_64','Polyester filter geotextiles',#4013,$,$);
+#4017=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_66','Polyethylene filter geotextiles',#4013,$,$);
+#4018=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_68','Polypropylene filter geotextiles',#4013,$,$);
+#4019=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_85_70','Polyvinylidene fluoride (PVDF) hydrophobic geotextiles',#4013,$,$);
+#4020=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90','Tensile, stretch and suspended fabrics',#3860,$,$);
+#4021=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_03','Aramid tensile fabrics',#4020,$,$);
+#4022=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_15','Cotton canvas tensile fabrics',#4020,$,$);
+#4023=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_29','Fabrics for tensile applications',#4020,$,$);
+#4024=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_34','Glass fibre tensile fabrics',#4020,$,$);
+#4025=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_63','Polyester tensile fabrics',#4020,$,$);
+#4026=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_67','Polytetrafluoroethylene (PTFE) tensile fabrics',#4020,$,$);
+#4027=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_69','Polyurethane coated polyester stretch fabric membranes',#4020,$,$);
+#4028=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_71','Polyvinyl chloride (PVC) stretch fabric membranes',#4020,$,$);
+#4029=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_75','Sailcloth',#4020,$,$);
+#4030=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_81','Solar glass weave tensile fabrics',#4020,$,$);
+#4031=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_84','Stretch fabric membranes',#4020,$,$);
+#4032=IFCCLASSIFICATIONREFERENCE($,'Pr_25_57_90_85','Suspended fabric panels',#4020,$,$);
+#4033=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71','Rigid board, panel, sheet and sectional products',#3730,$,$);
+#4034=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11','Cement boards and sheets',#4033,$,$);
+#4035=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_20','Fibre-reinforced cement deck boards',#4034,$,$);
+#4036=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_25','Fibre-reinforced cement boards',#4034,$,$);
+#4037=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_27','Fibre-reinforced cement profiled sheets',#4034,$,$);
+#4038=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_29','Fibre-reinforced cement sheets',#4034,$,$);
+#4039=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_31','Fibre-reinforced cement weatherboards',#4034,$,$);
+#4040=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_11_33','Fibre-reinforced cement insulation boards',#4034,$,$);
+#4041=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14','Cladding and lining panels',#4033,$,$);
+#4042=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_01','Aggregate-faced glass fibre-reinforced plastics (GRP) panels',#4041,$,$);
+#4043=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_02','Aluminium cassette panels',#4041,$,$);
+#4044=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_03','Applied facing precast concrete panels',#4041,$,$);
+#4045=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_04','Aluminium insulating sandwich panels',#4041,$,$);
+#4046=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_05','Aluminium composite material (ACM) panels',#4041,$,$);
+#4047=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_07','Aluminium external panels',#4041,$,$);
+#4048=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_09','Aluminium internal panels',#4041,$,$);
+#4049=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_10','Aluminium-faced aluminium core panels',#4041,$,$);
+#4050=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_11','Autoclaved aerated concrete (AAC) cladding units',#4041,$,$);
+#4051=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_12','Carbon steel external panels',#4041,$,$);
+#4052=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_14','Carbon steel internal panels',#4041,$,$);
+#4053=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_15','Ceramic panels',#4041,$,$);
+#4054=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_16','Column casings',#4041,$,$);
+#4055=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_17','Ceramic-faced aluminium core panels',#4041,$,$);
+#4056=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_18','Composite precast concrete cladding panels',#4041,$,$);
+#4057=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_19','Composite stone panels',#4041,$,$);
+#4058=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_20','Compressed rock fibre panels',#4041,$,$);
+#4059=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_21','Copper alloy-faced aluminium core panels',#4041,$,$);
+#4060=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_22','Carbon steel insulating sandwich panels',#4041,$,$);
+#4061=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_29','Faced insulating wall panels',#4041,$,$);
+#4062=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_31','Fireproof casings',#4041,$,$);
+#4063=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_33','Glass-faced aluminium core panels',#4041,$,$);
+#4064=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_35','Glass fibre-reinforced concrete (GRC) cladding panels',#4041,$,$);
+#4065=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_36','Glass fibre-reinforced plastics (GRP) cladding panels',#4041,$,$);
+#4066=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_52','Monolithic precast concrete cladding panels',#4041,$,$);
+#4067=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_56','Natural stone panels',#4041,$,$);
+#4068=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_57','Natural stone-faced aluminium core panels',#4041,$,$);
+#4069=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_62','Plastics sheet wall claddings',#4041,$,$);
+#4070=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_63','Platinum-faced aluminium core panels',#4041,$,$);
+#4071=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_65','Pre-weathered zinc cassette panels',#4041,$,$);
+#4072=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_71','Reconstituted stone panels',#4041,$,$);
+#4073=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_74','Sandwich autoclaved aerated concrete (AAC) panels',#4041,$,$);
+#4074=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_75','Sandwich precast concrete cladding panels',#4041,$,$);
+#4075=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_77','Self-finished precast concrete cladding panels',#4041,$,$);
+#4076=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_81','Stainless steel-faced aluminium core panels',#4041,$,$);
+#4077=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_82','Stainless steel cassette panels',#4041,$,$);
+#4078=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_84','Stainless steel external panels',#4041,$,$);
+#4079=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_86','Stainless steel internal panels',#4041,$,$);
+#4080=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_87','Stainless steel insulating sandwich panels',#4041,$,$);
+#4081=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_88','Terracotta panels',#4041,$,$);
+#4082=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_90','Titanium-faced aluminium core panels',#4041,$,$);
+#4083=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_96','Weathering steel cassette panels',#4041,$,$);
+#4084=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_97','Zinc cassette panels',#4041,$,$);
+#4085=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_98','Wood fibre-reinforced thermosetting resin external panels',#4041,$,$);
+#4086=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_14_99','Zinc-faced aluminium core panels',#4041,$,$);
+#4087=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18','Composite sound-insulating panels',#4033,$,$);
+#4088=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18_15','Composite plastics sound-insulating sheets',#4087,$,$);
+#4089=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18_29','Fabric-covered sound-insulating mineral wool panels',#4087,$,$);
+#4090=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18_45','Impact-resistant sound-insulating panels',#4087,$,$);
+#4091=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18_52','Mineral board-lined composite sound-insulating boards',#4087,$,$);
+#4092=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_18_90','Timber-lined composite sound-insulating boards',#4087,$,$);
+#4093=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22','Decorative sectional finishing products',#4033,$,$);
+#4094=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_15','Composite finishing battens',#4093,$,$);
+#4095=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_52','Metal finishing battens',#4093,$,$);
+#4096=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_64','Plastics finishing battens',#4093,$,$);
+#4097=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_84','Decorative stone finishing battens',#4093,$,$);
+#4098=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_90','Timber finishing battens',#4093,$,$);
+#4099=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_22_96','Wood-based finishing battens',#4093,$,$);
+#4100=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29','Falsework and formwork',#4033,$,$);
+#4101=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_04','Architectural finish permanent formwork linings',#4100,$,$);
+#4102=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_11','Carbon steel permanent joint formers',#4100,$,$);
+#4103=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_14','Collapsible (wet) board substructure formwork',#4100,$,$);
+#4104=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_15','Collapsible board substructure formwork',#4100,$,$);
+#4105=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_16','Compressible board substructure formwork',#4100,$,$);
+#4106=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_17','Concrete permanent side forms',#4100,$,$);
+#4107=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_19','Controlled permeability formwork',#4100,$,$);
+#4108=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_24','Duct formers',#4100,$,$);
+#4109=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_28','Expanded carbon steel mesh formwork',#4100,$,$);
+#4110=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_34','Glass fibre-reinforced concrete permanent formwork panels',#4100,$,$);
+#4111=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_37','High-density expanded polystyrene (HDPS) substructure formwork',#4100,$,$);
+#4112=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_52','Modular riser flooring units',#4100,$,$);
+#4113=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_56','Non-critical permanent formwork',#4100,$,$);
+#4114=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_60','Permanent concrete composite wall panels',#4100,$,$);
+#4115=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_62','Permanent insulation formwork (PIF)',#4100,$,$);
+#4116=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_64','Permanent timber formwork',#4100,$,$);
+#4117=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_72','Ribbed carbon steel mesh formwork',#4100,$,$);
+#4118=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_76','Scaffolding and accessories',#4100,$,$);
+#4119=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_84','Stone finishing battens',#4100,$,$);
+#4120=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_86','Suspended in situ concrete construction permanent insulation formwork (PIF)',#4100,$,$);
+#4121=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_29_88','Timber scaffold boards',#4100,$,$);
+#4122=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33','Glass and glazing sheets and profiles',#4033,$,$);
+#4123=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_02','Annealed glass sheets',#4122,$,$);
+#4124=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_03','Antique glass',#4122,$,$);
+#4125=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_14','Composite glass sheets',#4122,$,$);
+#4126=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_16','Corrugated wired glass sheets',#4122,$,$);
+#4127=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_20','Cylinder blown glass sheets',#4122,$,$);
+#4128=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_27','Electrochromic glass',#4122,$,$);
+#4129=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_28','Electrochromic insulating glass units (IGUs)',#4122,$,$);
+#4130=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_33','Glass beams',#4122,$,$);
+#4131=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_34','Glass fins',#4122,$,$);
+#4132=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_35','Glass panels',#4122,$,$);
+#4133=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_36','Handblown crown glass',#4122,$,$);
+#4134=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_37','Heat-strengthened glass sheets',#4122,$,$);
+#4135=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_38','Handblown broad sheet glass',#4122,$,$);
+#4136=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_39','Handblown plate glass',#4122,$,$);
+#4137=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_40','Handblown polished plate glass',#4122,$,$);
+#4138=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_42','Insulated glass units (IGUs)',#4122,$,$);
+#4139=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_46','Laminated glass sheets',#4122,$,$);
+#4140=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_47','Lead and X-ray glass sheets',#4122,$,$);
+#4141=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_65','Plastics glazing sheets',#4122,$,$);
+#4142=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_67','Plastics laminated glazing sheets',#4122,$,$);
+#4143=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_84','Stained glass sheets',#4122,$,$);
+#4144=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_88','Thermally toughened glass sheets',#4122,$,$);
+#4145=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_90','Thermochromic glass',#4122,$,$);
+#4146=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_92','U-profiled glass channels',#4122,$,$);
+#4147=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_33_97','Wired glass sheets',#4122,$,$);
+#4148=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35','Gypsum boards and sheets',#4033,$,$);
+#4149=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_06','Gypsum baseboards',#4148,$,$);
+#4150=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_11','Carbon-neutral gypsum plasterboards',#4148,$,$);
+#4151=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_12','Carbon steel-faced plasterboard panels',#4148,$,$);
+#4152=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_13','Controlled density gypsum plasterboards',#4148,$,$);
+#4153=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_15','Gypsum core boards',#4148,$,$);
+#4154=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_21','Enhanced strength gypsum plasterboards',#4148,$,$);
+#4155=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_29','Fibre-reinforced gypsum boards',#4148,$,$);
+#4156=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_30','Fibre-reinforced gypsum floor boards',#4148,$,$);
+#4157=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_32','Flexible plasterboards',#4148,$,$);
+#4158=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_33','Fire-resistant gypsum plasterboards',#4148,$,$);
+#4159=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_37','High-density gypsum plasterboards',#4148,$,$);
+#4160=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_42','Impact-resistant gypsum plasterboards',#4148,$,$);
+#4161=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_47','Lead-lined gypsum boards',#4148,$,$);
+#4162=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_52','Moisture-resistant gypsum plasterboards',#4148,$,$);
+#4163=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_61','Gypsum planks',#4148,$,$);
+#4164=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_63','Plasterboard panels',#4148,$,$);
+#4165=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_65','Gypsum plasterboards',#4148,$,$);
+#4166=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_67','Gypsum plasterboard with combined properties',#4148,$,$);
+#4167=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_77','Gypsum sheathing plasterboards',#4148,$,$);
+#4168=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_80','Sound insulation gypsum plasterboards',#4148,$,$);
+#4169=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_81','Sound-insulating laminate gypsum plasterboards',#4148,$,$);
+#4170=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_84','Standard gypsum plasterboards',#4148,$,$);
+#4171=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_88','Thermal laminate gypsum plasterboards',#4148,$,$);
+#4172=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_94','Vapour check gypsum plasterboards',#4148,$,$);
+#4173=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_35_99','X-ray-resistant gypsum plasterboards',#4148,$,$);
+#4174=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42','Infill panels',#4033,$,$);
+#4175=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_08','Aluminium infill panels',#4174,$,$);
+#4176=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_10','Carbon steel infill panels',#4174,$,$);
+#4177=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_12','Cement-bonded wood-wool infill panels',#4174,$,$);
+#4178=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_52','Metal tray infill panels',#4174,$,$);
+#4179=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_54','Mineral fibre infill panels',#4174,$,$);
+#4180=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_59','Open-cell infill panels',#4174,$,$);
+#4181=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_63','Plastics-faced gypsum plasterboard infill panels',#4174,$,$);
+#4182=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_70','Raised access floor panels',#4174,$,$);
+#4183=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_71','Raised access floor panels with finish',#4174,$,$);
+#4184=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_72','Resin-bonded mineral wool infill panels',#4174,$,$);
+#4185=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_73','Rigid urethane foam infill panels',#4174,$,$);
+#4186=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_85','Stainless steel infill panels',#4174,$,$);
+#4187=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_42_94','Veneered wood-composite infill panels',#4174,$,$);
+#4188=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_43','Interior linings',#4033,$,$);
+#4189=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_43_33','Glass fibre-reinforced plastics (GRP) ceilings',#4188,$,$);
+#4190=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_43_34','Glass fibre-reinforced plastics (GRP) linings',#4188,$,$);
+#4191=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_43_62','Plastics linings',#4188,$,$);
+#4192=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44','Joint fillers',#4033,$,$);
+#4193=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_06','Bitumen-impregnated softboard joint fillers',#4192,$,$);
+#4194=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_08','Bitumen rubber expansion joint fillers',#4192,$,$);
+#4195=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_15','Cork board joint fillers',#4192,$,$);
+#4196=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_28','Extruded polyethylene (PE) foam joint fillers',#4192,$,$);
+#4197=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_53','Mineral fibre joint fillers',#4192,$,$);
+#4198=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_64','Plastics compressible joint fillers',#4192,$,$);
+#4199=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_44_77','Sealant backer rods',#4192,$,$);
+#4200=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50','Metal panels',#4033,$,$);
+#4201=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_02','Aluminium expanded mesh panels',#4200,$,$);
+#4202=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_03','Aluminium vertical bar panels',#4200,$,$);
+#4203=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_04','Aluminium sheet panels',#4200,$,$);
+#4204=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_11','Carbon steel grille panels',#4200,$,$);
+#4205=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_12','Carbon steel expanded mesh panels',#4200,$,$);
+#4206=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_13','Carbon steel framed vertical bar and rail panels',#4200,$,$);
+#4207=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_14','Carbon steel framed vertical bar panels',#4200,$,$);
+#4208=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_15','Carbon steel framed vertical section panels',#4200,$,$);
+#4209=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_16','Carbon steel palisade fence panels',#4200,$,$);
+#4210=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_17','Carbon steel panels',#4200,$,$);
+#4211=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_18','Carbon steel vertical section and rail panels',#4200,$,$);
+#4212=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_19','Carbon steel welded mesh panels',#4200,$,$);
+#4213=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_20','Cast iron vertical bar and rail panels',#4200,$,$);
+#4214=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_21','Composite fence panels',#4200,$,$);
+#4215=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_22','Composite panels',#4200,$,$);
+#4216=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_23','Composite wildlife panels',#4200,$,$);
+#4217=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_24','Decorative metal panels',#4200,$,$);
+#4218=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_39','Hurdles',#4200,$,$);
+#4219=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_51','Mesh panels',#4200,$,$);
+#4220=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_52','Metal baseboards',#4200,$,$);
+#4221=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_60','Palisade panels',#4200,$,$);
+#4222=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_61','Panels with vertical infill',#4200,$,$);
+#4223=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_79','Sheet panels',#4200,$,$);
+#4224=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_80','Stainless steel expanded mesh panels',#4200,$,$);
+#4225=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_81','Stainless steel vertical bar panels',#4200,$,$);
+#4226=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_82','Stainless steel vertical bar and rail panels',#4200,$,$);
+#4227=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_83','Stainless steel sheet panels',#4200,$,$);
+#4228=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_84','Stainless steel welded mesh panels',#4200,$,$);
+#4229=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_85','Stainless steel woven mesh panels',#4200,$,$);
+#4230=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_87','Steel noise barrier panels',#4200,$,$);
+#4231=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_93','Vitreous enamel steel composite panels',#4200,$,$);
+#4232=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_94','Vitreous enamel steel panels',#4200,$,$);
+#4233=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_95','Welded steel hurdles',#4200,$,$);
+#4234=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_96','Wrought iron decorative panels',#4200,$,$);
+#4235=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_97','Wrought iron vertical bar panels',#4200,$,$);
+#4236=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_50_98','Wrought iron vertical bar and rail panels',#4200,$,$);
+#4237=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51','Metal sheets and strips',#4033,$,$);
+#4238=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_01','Aluminium sheets, strips and plates',#4237,$,$);
+#4239=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_02','Aluminium long strips',#4237,$,$);
+#4240=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_03','Aluminium profiled sheets',#4237,$,$);
+#4241=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_04','Aluminium profiled sheet decking',#4237,$,$);
+#4242=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_05','Aluminium sheets',#4237,$,$);
+#4243=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_06','Aluminium traditional sheets',#4237,$,$);
+#4244=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_10','Carbon steel long strips',#4237,$,$);
+#4245=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_11','Carbon steel linings',#4237,$,$);
+#4246=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_12','Carbon steel pressed panels',#4237,$,$);
+#4247=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_14','Carbon steel sheet walkway reinforcement',#4237,$,$);
+#4248=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_15','Carbon steel sheets',#4237,$,$);
+#4249=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_16','Copper long strips',#4237,$,$);
+#4250=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_17','Copper traditional sheets',#4237,$,$);
+#4251=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_33','Galvanized carbon steel profiled sheets',#4237,$,$);
+#4252=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_34','Galvanized carbon steel sheets',#4237,$,$);
+#4253=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_38','Hollow-core metal sheets',#4237,$,$);
+#4254=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_46','Lead machine cast sheets',#4237,$,$);
+#4255=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_47','Lead rolled sheets',#4237,$,$);
+#4256=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_52','Metal profiled sheets',#4237,$,$);
+#4257=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_84','Stainless steel long strips and sheets',#4237,$,$);
+#4258=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_85','Stainless steel profiled sheets',#4237,$,$);
+#4259=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_86','Stainless steel sheets',#4237,$,$);
+#4260=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_87','Stainless steel traditional sheets',#4237,$,$);
+#4261=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_88','Steel plate, sheet and strip',#4237,$,$);
+#4262=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_89','Steel profiled sheet',#4237,$,$);
+#4263=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_94','Weathering steel sheets',#4237,$,$);
+#4264=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_96','Zinc profiled sheets',#4237,$,$);
+#4265=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_97','Zinc traditional sheets',#4237,$,$);
+#4266=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_98','Zinc soft temper alloy strips',#4237,$,$);
+#4267=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_51_99','Zinc standard temper alloy strips',#4237,$,$);
+#4268=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52','Mineral-based boards and sheets',#4033,$,$);
+#4269=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_13','Cellular glass insulation boards',#4268,$,$);
+#4270=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_15','Compressed mineral wool fire protection boards',#4268,$,$);
+#4271=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_17','Compressed vermiculite fire protection boards',#4268,$,$);
+#4272=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_22','Expanded perlite boards',#4268,$,$);
+#4273=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_32','Fibre-reinforced resin composite mineral boards',#4268,$,$);
+#4274=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_52_50','Magnesium oxide boards',#4268,$,$);
+#4275=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_53','Mirrored sheets',#4033,$,$);
+#4276=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_53_91','Unframed glass mirrors',#4275,$,$);
+#4277=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_53_92','Unframed metal mirrors',#4275,$,$);
+#4278=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_53_93','Unframed plastics mirrors',#4275,$,$);
+#4279=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57','Non-metal barrier panels',#4033,$,$);
+#4280=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_06','Ballistic protection panels',#4279,$,$);
+#4281=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_11','Cement-bonded particleboard framed panels',#4279,$,$);
+#4282=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_12','Concrete baseboards',#4279,$,$);
+#4283=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_13','Concrete parapet base panels',#4279,$,$);
+#4284=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_14','Concrete base panels',#4279,$,$);
+#4285=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_15','Concrete fence panel tops',#4279,$,$);
+#4286=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_16','Concrete fence panels',#4279,$,$);
+#4287=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_17','Concrete containment parapet units',#4279,$,$);
+#4288=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_18','Concrete safety barrier panels',#4279,$,$);
+#4289=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_19','Concrete noise barrier panels',#4279,$,$);
+#4290=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_22','Decorative concrete fence panels',#4279,$,$);
+#4291=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_24','Decorative timber panels',#4279,$,$);
+#4292=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_30','Fabric partition panels',#4279,$,$);
+#4293=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_33','Glass noise barrier panels',#4279,$,$);
+#4294=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_34','Glass barrier panels',#4279,$,$);
+#4295=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_35','Glazing plastics framed panels',#4279,$,$);
+#4296=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_37','Hardwood baseboards',#4279,$,$);
+#4297=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_38','Hardwood framed panels',#4279,$,$);
+#4298=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_39','Hardwood palisade fence panels',#4279,$,$);
+#4299=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_40','Hazel wattle hurdles',#4279,$,$);
+#4300=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_44','Jet blast deflectors',#4279,$,$);
+#4301=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_60','Partition panels',#4279,$,$);
+#4302=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_61','Partition screens',#4279,$,$);
+#4303=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_62','Plastics framed panels',#4279,$,$);
+#4304=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_63','Plastics panels',#4279,$,$);
+#4305=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_64','Plastics panel fence tops',#4279,$,$);
+#4306=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_65','Plywood framed panels',#4279,$,$);
+#4307=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_73','Room divider panels',#4279,$,$);
+#4308=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_80','Sliding stacking panel partitions',#4279,$,$);
+#4309=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_81','Softwood baseboards',#4279,$,$);
+#4310=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_82','Softwood framed panels',#4279,$,$);
+#4311=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_83','Softwood palisade fence panels',#4279,$,$);
+#4312=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_87','Timber baseboards',#4279,$,$);
+#4313=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_88','Timber board panels',#4279,$,$);
+#4314=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_90','Timber sheet panels',#4279,$,$);
+#4315=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_97','Wattle hurdles',#4279,$,$);
+#4316=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_57_98','Willow wattle hurdles',#4279,$,$);
+#4317=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63','Plastics-based boards and sheets',#4033,$,$);
+#4318=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_15','Compact or solid grade high-pressure laminate (HPL) boards',#4317,$,$);
+#4319=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_18','Composite and recycled plastics sheets',#4317,$,$);
+#4320=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_24','Drainage layer corrugated boards',#4317,$,$);
+#4321=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_26','Expanded polystyrene (EPS) boards',#4317,$,$);
+#4322=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_27','Extruded polyethylene (PE) foam boards',#4317,$,$);
+#4323=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_29','Extruded polystyrene (XPS) boards',#4317,$,$);
+#4324=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_32','Glass fibre-reinforced plastics (GRP) panels',#4317,$,$);
+#4325=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_33','Glass fibre-reinforced plastics (GRP) profiled panels',#4317,$,$);
+#4326=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_34','Glass fibre-reinforced plastics (GRP) profiled sheets',#4317,$,$);
+#4327=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_35','Glass fibre-reinforced plastics (GRP) sheets',#4317,$,$);
+#4328=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_38','Hollow-core plastics sheets',#4317,$,$);
+#4329=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_52','Melamine resin foam boards',#4317,$,$);
+#4330=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_59','Phenolic foam boards',#4317,$,$);
+#4331=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_60','Plastics and composite material boards',#4317,$,$);
+#4332=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_61','Plastics baseboards',#4317,$,$);
+#4333=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_63','Plastics composite laminate strips and boards',#4317,$,$);
+#4334=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_64','Plastics weatherboards',#4317,$,$);
+#4335=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_65','Polycarbonate profiled sheets',#4317,$,$);
+#4336=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_66','Polyisocyanurate (PIR) foam boards',#4317,$,$);
+#4337=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_67','Polyurethane (PUR) foam boards',#4317,$,$);
+#4338=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_68','Polycarbonate sheets',#4317,$,$);
+#4339=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_69','Polyester foam boards',#4317,$,$);
+#4340=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_72','Recycled plastics deck boards',#4317,$,$);
+#4341=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_81','Solid surface resin-based sheets',#4317,$,$);
+#4342=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_92','Unplasticized polyvinyl chloride (PVC-U) deck boards',#4317,$,$);
+#4343=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_63_93','Unplasticized polyvinyl chloride (PVC-U) profiled sheets',#4317,$,$);
+#4344=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_70','Rigid insulation boards and panels',#4033,$,$);
+#4345=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_70_78','Silica-based insulation boards',#4344,$,$);
+#4346=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_80','Silicate boards and sheets',#4033,$,$);
+#4347=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_80_23','Fibre-reinforced calcium silicate boards',#4346,$,$);
+#4348=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_80_24','Fibre-reinforced calcium silicate fire protection boards',#4346,$,$);
+#4349=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_80_31','Fibre-reinforced magnesium silicate boards',#4346,$,$);
+#4350=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_80_95','Vermiculite-silicate fire protection boards',#4346,$,$);
+#4351=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94','Veneers and facings',#4033,$,$);
+#4352=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_06','Balancing veneers',#4351,$,$);
+#4353=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_22','Decorative continuous laminates (DCL or CPL)',#4351,$,$);
+#4354=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_23','Decorative facings',#4351,$,$);
+#4355=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_27','Edgings and lippings',#4351,$,$);
+#4356=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_29','Fabric facings',#4351,$,$);
+#4357=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_37','High-pressure decorative laminates (HPL or HPDL)',#4351,$,$);
+#4358=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_46','Leather facings',#4351,$,$);
+#4359=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_51','Melamine veneer facings',#4351,$,$);
+#4360=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_52','Metal sheet facings',#4351,$,$);
+#4361=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_94','Veneer edgings and lippings',#4351,$,$);
+#4362=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_95','Vinyl sheet facings',#4351,$,$);
+#4363=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_94_98','Wood veneers',#4351,$,$);
+#4364=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97','Wood-based boards',#4033,$,$);
+#4365=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_05','Bitumen-impregnated fibreboards',#4364,$,$);
+#4366=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_07','Bitumen-impregnated softboards',#4364,$,$);
+#4367=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_08','Blockboard core plywoods',#4364,$,$);
+#4368=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_12','Cement-bonded particleboards',#4364,$,$);
+#4369=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_16','Corkboards',#4364,$,$);
+#4370=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_17','Cork composite laminate strips and boards',#4364,$,$);
+#4371=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_22','Decorative laminated plastics sheet veneered panels',#4364,$,$);
+#4372=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_23','Decorative veneered medium-density fibreboards (MDF)',#4364,$,$);
+#4373=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_30','Fire-retardant plywoods',#4364,$,$);
+#4374=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_33','General and utility veneer plywoods',#4364,$,$);
+#4375=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_34','Gypsum-bonded fire protection boards',#4364,$,$);
+#4376=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_35','Gypsum-bonded wood particle boards',#4364,$,$);
+#4377=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_36','Hardboards',#4364,$,$);
+#4378=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_37','Hardwood deck boards',#4364,$,$);
+#4379=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_38','Hardwood fence boards',#4364,$,$);
+#4380=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_42','Hardwood strips',#4364,$,$);
+#4381=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_43','Hardwood weatherboards',#4364,$,$);
+#4382=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_44','Hollow-core particleboards',#4364,$,$);
+#4383=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_46','Laminboard core plywoods',#4364,$,$);
+#4384=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_47','Lead-lined plywood boards',#4364,$,$);
+#4385=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_50','Marine plywoods',#4364,$,$);
+#4386=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_52','Medium boards',#4364,$,$);
+#4387=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_53','Medium-density fibreboards (MDF)',#4364,$,$);
+#4388=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_54','Modified wood boards',#4364,$,$);
+#4389=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_55','Modified wood weatherboards',#4364,$,$);
+#4390=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_56','Modified wood deck boards',#4364,$,$);
+#4391=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_58','Oriented strand boards',#4364,$,$);
+#4392=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_60','Particleboards',#4364,$,$);
+#4393=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_65','Polymer-coated plywoods',#4364,$,$);
+#4394=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_77','Softboards',#4364,$,$);
+#4395=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_78','Softwood deck boards',#4364,$,$);
+#4396=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_79','Softwood fence boards',#4364,$,$);
+#4397=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_83','Softwood strips',#4364,$,$);
+#4398=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_84','Softwood weatherboards',#4364,$,$);
+#4399=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_85','Specialist veneer plywoods',#4364,$,$);
+#4400=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_86','Structural veneer plywoods',#4364,$,$);
+#4401=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_87','Timber floorboards',#4364,$,$);
+#4402=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_88','Timber lining boards',#4364,$,$);
+#4403=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_89','Timber sarking boards',#4364,$,$);
+#4404=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_90','Timber strips',#4364,$,$);
+#4405=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_91','Visual grade general veneer plywoods',#4364,$,$);
+#4406=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_92','Wood fibre boards',#4364,$,$);
+#4407=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_93','Wood laminate strips and boards',#4364,$,$);
+#4408=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_94','Wood-plastics composite deck boards',#4364,$,$);
+#4409=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_95','Wood-plastics composite weatherboards',#4364,$,$);
+#4410=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_96','Wood veneered boards',#4364,$,$);
+#4411=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_97','Wood-wool boards',#4364,$,$);
+#4412=IFCCLASSIFICATIONREFERENCE($,'Pr_25_71_97_98','Wood-resin composite weatherboards',#4364,$,$);
+#4413=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80','Smoke and fire control products',#3730,$,$);
+#4414=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79','Smoke and fire barriers',#4413,$,$);
+#4415=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_01','Active smoke barriers',#4414,$,$);
+#4416=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_03','Angled active fire curtain barriers',#4414,$,$);
+#4417=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_14','Concertina fire curtains',#4414,$,$);
+#4418=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_15','Concertina smoke curtains',#4414,$,$);
+#4419=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_37','High-temperature active smoke barriers',#4414,$,$);
+#4420=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_38','Horizontal active fire curtain barriers',#4414,$,$);
+#4421=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_39','Horizontal smoke curtains',#4414,$,$);
+#4422=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_86','Static smoke barriers',#4414,$,$);
+#4423=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_94','Vertical active fire curtain barriers',#4414,$,$);
+#4424=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_95','Vertical smoke curtains',#4414,$,$);
+#4425=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_79_96','Vertical smoke strip curtains',#4414,$,$);
+#4426=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80','Smoke and fire cavity barriers',#4413,$,$);
+#4427=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_14','Coated woven glass fibre cloth flexible cavity barriers',#4426,$,$);
+#4428=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_30','Fire insulating caps',#4426,$,$);
+#4429=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_42','Intumescent coated foil mesh flexible cavity barriers',#4426,$,$);
+#4430=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_43','Intumescent sheet cavity barriers',#4426,$,$);
+#4431=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_44','Intumescent sleeved mineral wool cavity fire barriers',#4426,$,$);
+#4432=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_51','Mineral wool wire-reinforced mattress cavity barriers',#4426,$,$);
+#4433=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_79','Sleeved mineral wool cavity barriers',#4426,$,$);
+#4434=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_82','Sprayed mineral coated wire mesh flexible cavity barriers',#4426,$,$);
+#4435=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_80_96','Wired mineral wool batt flexible cavity barriers',#4426,$,$);
+#4436=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81','Smoke and fire-stopping',#4413,$,$);
+#4437=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_12','Ceramic fibre fire-stopping',#4436,$,$);
+#4438=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_29','Flexible intumescent gap seals',#4436,$,$);
+#4439=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_34','Glass oxide fire-stopping',#4436,$,$);
+#4440=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_42','Intumescent linear gap seals',#4436,$,$);
+#4441=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_43','Intumescent pillows',#4436,$,$);
+#4442=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_44','Intumescent trunking pillows',#4436,$,$);
+#4443=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_45','Intumescent trunking pads',#4436,$,$);
+#4444=IFCCLASSIFICATIONREFERENCE($,'Pr_25_80_81_51','Mineral wool fire-stopping',#4436,$,$);
+#4445=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93','Unit skin products',#3730,$,$);
+#4446=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45','Kerb units',#4445,$,$);
+#4447=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_05','Asphalt kerbs',#4446,$,$);
+#4448=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_18','Concrete kerbs',#4446,$,$);
+#4449=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_21','Concrete safety kerbs',#4446,$,$);
+#4450=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_24','Concrete transition and dropper kerbs',#4446,$,$);
+#4451=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_26','Conservation kerbs',#4446,$,$);
+#4452=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_56','Natural stone kerbs',#4446,$,$);
+#4453=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_60','Pin kerbs',#4446,$,$);
+#4454=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_62','Plastics kerbs',#4446,$,$);
+#4455=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_45_90','Transition kerbs',#4446,$,$);
+#4456=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_47','Level crossing surfacing products',#4445,$,$);
+#4457=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_47_27','Embedded rail modular concrete level crossing units',#4456,$,$);
+#4458=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_47_52','Modular panel level crossings',#4456,$,$);
+#4459=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50','Masonry capping and coping units',#4445,$,$);
+#4460=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_10','Calcium silicate capping units',#4459,$,$);
+#4461=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_11','Calcium silicate coping units',#4459,$,$);
+#4462=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_13','Cast stone capping units',#4459,$,$);
+#4463=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_14','Cast stone coping units',#4459,$,$);
+#4464=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_16','Clay brick capping units',#4459,$,$);
+#4465=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_17','Clay brick coping units',#4459,$,$);
+#4466=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_19','Clayware capping units',#4459,$,$);
+#4467=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_20','Clayware coping units',#4459,$,$);
+#4468=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_22','Concrete capping units',#4459,$,$);
+#4469=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_23','Concrete coping units',#4459,$,$);
+#4470=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_34','Glass fibre-reinforced concrete (GRC) coping units',#4459,$,$);
+#4471=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_55','Natural stone capping units',#4459,$,$);
+#4472=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_56','Natural stone coping units',#4459,$,$);
+#4473=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_76','Slate capping units',#4459,$,$);
+#4474=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_50_77','Slate coping units',#4459,$,$);
+#4475=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51','Masonry dressing units',#4445,$,$);
+#4476=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_35','Glass fibre-reinforced concrete (GRC) built-in gable vents',#4475,$,$);
+#4477=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_36','Glass fibre-reinforced concrete (GRC) built-in keystones',#4475,$,$);
+#4478=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_37','Glass fibre-reinforced concrete (GRC) built-in plinths and string courses',#4475,$,$);
+#4479=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_38','Glass fibre-reinforced concrete (GRC) built-in quoins',#4475,$,$);
+#4480=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_39','Glass fibre-reinforced concrete (GRC) dressing gable vents',#4475,$,$);
+#4481=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_40','Glass fibre-reinforced concrete (GRC) dressing keystones',#4475,$,$);
+#4482=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_41','Glass fibre-reinforced concrete (GRC) dressing plinths and string courses',#4475,$,$);
+#4483=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_42','Glass fibre-reinforced concrete (GRC) dressing quoins',#4475,$,$);
+#4484=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_56','Natural stone cornices',#4475,$,$);
+#4485=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_57','Natural stone dentils',#4475,$,$);
+#4486=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_51_58','Natural stone quoins',#4475,$,$);
+#4487=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52','Masonry openings units',#4445,$,$);
+#4488=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_11','Calcium silicate sills',#4487,$,$);
+#4489=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_12','Cast stone sills',#4487,$,$);
+#4490=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_13','Clay brick sills',#4487,$,$);
+#4491=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_14','Clayware sills',#4487,$,$);
+#4492=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_15','Concrete sills',#4487,$,$);
+#4493=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_28','External extension sills',#4487,$,$);
+#4494=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_33','Glass fibre-reinforced concrete (GRC) bay window sills',#4487,$,$);
+#4495=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_34','Glass fibre-reinforced concrete (GRC) door canopies',#4487,$,$);
+#4496=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_35','Glass fibre-reinforced concrete (GRC) door surrounds',#4487,$,$);
+#4497=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_36','Glass fibre-reinforced concrete (GRC) sills',#4487,$,$);
+#4498=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_37','Glass fibre-reinforced concrete (GRC) fireplace and hearth surrounds',#4487,$,$);
+#4499=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_56','Natural stone sills',#4487,$,$);
+#4500=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_52_76','Slate sills',#4487,$,$);
+#4501=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54','Metal capping and coping units',#4445,$,$);
+#4502=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_02','Aluminium capping units',#4501,$,$);
+#4503=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_03','Aluminium coping units',#4501,$,$);
+#4504=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_11','Carbon steel capping units',#4501,$,$);
+#4505=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_12','Carbon steel coping units',#4501,$,$);
+#4506=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_15','Copper capping units',#4501,$,$);
+#4507=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_16','Copper coping units',#4501,$,$);
+#4508=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_46','Lead capping units',#4501,$,$);
+#4509=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_47','Lead coping units',#4501,$,$);
+#4510=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_84','Stainless steel capping units',#4501,$,$);
+#4511=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_85','Stainless steel coping units',#4501,$,$);
+#4512=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_98','Zinc capping units',#4501,$,$);
+#4513=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_54_99','Zinc coping units',#4501,$,$);
+#4514=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_55','Metal sills',#4445,$,$);
+#4515=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_55_03','Aluminium sills',#4514,$,$);
+#4516=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_55_84','Steel sills',#4514,$,$);
+#4517=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60','Paving units',#4445,$,$);
+#4518=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_02','Aluminium edges',#4517,$,$);
+#4519=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_08','Blister tactile pavers',#4517,$,$);
+#4520=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_09','Clay pavers',#4517,$,$);
+#4521=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_10','Clay paving tiles',#4517,$,$);
+#4522=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_11','Clay surface channels',#4517,$,$);
+#4523=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_12','Combined drainage and kerb units',#4517,$,$);
+#4524=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_13','Concrete cellular pavers',#4517,$,$);
+#4525=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_14','Concrete surface channels',#4517,$,$);
+#4526=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_15','Concrete edging units',#4517,$,$);
+#4527=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_16','Concrete flags',#4517,$,$);
+#4528=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_17','Concrete paving blocks',#4517,$,$);
+#4529=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_19','Concrete pavers',#4517,$,$);
+#4530=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_20','Concrete quadrant and angle kerbs',#4517,$,$);
+#4531=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_22','Concrete setts',#4517,$,$);
+#4532=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_23','Concrete tactile flags',#4517,$,$);
+#4533=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_26','Corduroy tactile pavers',#4517,$,$);
+#4534=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_27','Concrete porous flags',#4517,$,$);
+#4535=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_28','Concrete porous paving blocks',#4517,$,$);
+#4536=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_33','Glass fibre-reinforced concrete (GRC) paving tiles',#4517,$,$);
+#4537=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_52','Natural stone blocks',#4517,$,$);
+#4538=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_53','Natural stone flags',#4517,$,$);
+#4539=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_54','Natural stone cobbles',#4517,$,$);
+#4540=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_55','Natural stone surface channels',#4517,$,$);
+#4541=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_57','Natural stone setts',#4517,$,$);
+#4542=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_58','Natural stone paving slabs',#4517,$,$);
+#4543=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_59','Natural stone tactile pavers',#4517,$,$);
+#4544=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_61','Plastics cellular pavers',#4517,$,$);
+#4545=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_63','Plastics pavers',#4517,$,$);
+#4546=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_65','Plastics surface channels',#4517,$,$);
+#4547=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_78','Special composite paving units',#4517,$,$);
+#4548=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_60_80','Stainless steel edges',#4517,$,$);
+#4549=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_70','Rail track paving',#4445,$,$);
+#4550=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_70_11','Cattle-cum-trespass guards',#4549,$,$);
+#4551=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_70_70','Rail infill panels',#4549,$,$);
+#4552=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72','Roofing and cladding units',#4445,$,$);
+#4553=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_08','Bitumen membrane shingles',#4552,$,$);
+#4554=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_11','Ceramic slates',#4552,$,$);
+#4555=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_12','Clay interlocking tiles',#4552,$,$);
+#4556=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_13','Clay plain tiles',#4552,$,$);
+#4557=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_14','Clay tile coursing fittings',#4552,$,$);
+#4558=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_15','Clay tile ornamental fittings',#4552,$,$);
+#4559=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_16','Clay tile vertical tiling angle fittings',#4552,$,$);
+#4560=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_17','Concrete interlocking tiles',#4552,$,$);
+#4561=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_18','Concrete plain tiles',#4552,$,$);
+#4562=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_19','Concrete tile coursing fittings',#4552,$,$);
+#4563=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_20','Concrete tile ornamental fittings',#4552,$,$);
+#4564=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_21','Concrete tile vertical tiling angle fittings',#4552,$,$);
+#4565=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_24','Decorative metal tiles',#4552,$,$);
+#4566=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_30','Fibre-cement slates',#4552,$,$);
+#4567=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_31','Fibre-cement slate coursing fittings',#4552,$,$);
+#4568=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_36','Hardwood shakes',#4552,$,$);
+#4569=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_37','Hardwood shingles',#4552,$,$);
+#4570=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_52','Metal tiles',#4552,$,$);
+#4571=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_56','Natural slates',#4552,$,$);
+#4572=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_57','Natural stone slates',#4552,$,$);
+#4573=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_72','Reconstituted interlocking slates',#4552,$,$);
+#4574=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_73','Reconstituted slate coursing fittings',#4552,$,$);
+#4575=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_79','Slate coursing fittings',#4552,$,$);
+#4576=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_96','Wood shakes',#4552,$,$);
+#4577=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_97','Wood shingles',#4552,$,$);
+#4578=IFCCLASSIFICATIONREFERENCE($,'Pr_25_93_72_98','Wood shingle pattern fittings',#4552,$,$);
+#4579=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96','Grid and grating skin products',#3730,$,$);
+#4580=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_30','Gratings',#4579,$,$);
+#4581=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_30_03','Anti-slip gratings',#4580,$,$);
+#4582=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_30_31','Footway gratings',#4580,$,$);
+#4583=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35','Grids and grilles',#4579,$,$);
+#4584=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_03','Aluminium cattle grids',#4583,$,$);
+#4585=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_11','Carbon steel cattle grids',#4583,$,$);
+#4586=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_37','Headwall and outfall grilles',#4583,$,$);
+#4587=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_53','Metal armouring grilles',#4583,$,$);
+#4588=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_71','Recycled plastics cattle grids',#4583,$,$);
+#4589=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_76','Sewage screens',#4583,$,$);
+#4590=IFCCLASSIFICATIONREFERENCE($,'Pr_25_96_35_96','Water grilles',#4583,$,$);
+#4591=IFCCLASSIFICATIONREFERENCE($,'Pr_30','Opening products',#8,$,$);
+#4592=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31','Formless openings products',#4591,$,$);
+#4593=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68','Putties and glazing compounds',#4592,$,$);
+#4594=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68_42','Intumescent putties',#4593,$,$);
+#4595=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68_47','Linseed oil putties',#4593,$,$);
+#4596=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68_51','Metal casement putties',#4593,$,$);
+#4597=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68_56','Non-setting glazing compounds',#4593,$,$);
+#4598=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_68_74','Rubberizing glazing compounds',#4593,$,$);
+#4599=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76','Sealants',#4592,$,$);
+#4600=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_02','Acrylic construction joint sealants',#4599,$,$);
+#4601=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_09','Butyl rubber construction joint sealants',#4599,$,$);
+#4602=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_14','Cold-applied bituminous joint sealants',#4599,$,$);
+#4603=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_15','Cold-applied concrete pavement bituminous joint sealants',#4599,$,$);
+#4604=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_16','Construction joint sealants',#4599,$,$);
+#4605=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_26','Edge sealants',#4599,$,$);
+#4606=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_27','Electrical insulating compounds',#4599,$,$);
+#4607=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_33','Glazing compounds and sealants',#4599,$,$);
+#4608=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_34','Glazing joint sealants',#4599,$,$);
+#4609=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_38','Hot-applied bituminous joint sealants',#4599,$,$);
+#4610=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_39','Hydrophilic sealants',#4599,$,$);
+#4611=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_40','Intumescent firestop sealants',#4599,$,$);
+#4612=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_41','Intumescent foam fillers',#4599,$,$);
+#4613=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_52','Modified silane (MS) polymer sealants',#4599,$,$);
+#4614=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_58','Oil-based mastic joint sealants',#4599,$,$);
+#4615=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_62','Polysulfide construction joint sealants',#4599,$,$);
+#4616=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_63','Polysulfide glazing compounds and sealants',#4599,$,$);
+#4617=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_65','Polyurethane (PUR) construction joint sealants',#4599,$,$);
+#4618=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_66','Polyurethane (PUR) expanding foam fillers',#4599,$,$);
+#4619=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_77','Silicone construction joint sealants',#4599,$,$);
+#4620=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_78','Silicone glazing compounds and sealants',#4599,$,$);
+#4621=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_79','Silyl-terminated polyurethane (STP) construction joint sealants',#4599,$,$);
+#4622=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_84','Structural sealant glazing bonding sealants',#4599,$,$);
+#4623=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_85','Structural sealant glazing weather sealants',#4599,$,$);
+#4624=IFCCLASSIFICATIONREFERENCE($,'Pr_30_31_76_96','Waterproof gap filling sealants',#4599,$,$);
+#4625=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36','Hardware products',#4591,$,$);
+#4626=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08','Bolting, latching and locking hardware',#4625,$,$);
+#4627=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_06','Barrel bolts',#4626,$,$);
+#4628=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_11','Cabinet locks',#4626,$,$);
+#4629=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_12','Cam locks',#4626,$,$);
+#4630=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_13','Cavity sliding door locks',#4626,$,$);
+#4631=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_15','Coin-operated locks',#4626,$,$);
+#4632=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_16','Combination padlocks',#4626,$,$);
+#4633=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_18','Cremorne bolts',#4626,$,$);
+#4634=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_19','Cylinder locks',#4626,$,$);
+#4635=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_20','Deadbolts',#4626,$,$);
+#4636=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_21','Digital door locks',#4626,$,$);
+#4637=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_22','Door bolts',#4626,$,$);
+#4638=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_23','Door catches',#4626,$,$);
+#4639=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_24','Door latches',#4626,$,$);
+#4640=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_25','Door chains and locks',#4626,$,$);
+#4641=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_26','Door privacy indicator bolts',#4626,$,$);
+#4642=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_27','Electric locks',#4626,$,$);
+#4643=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_28','Emergency exit devices',#4626,$,$);
+#4644=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_29','Espagnolette bolts',#4626,$,$);
+#4645=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_30','Fanlight catches',#4626,$,$);
+#4646=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_31','Field gate spring catch sets',#4626,$,$);
+#4647=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_32','Flush bolts',#4626,$,$);
+#4648=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_33','Furniture locks',#4626,$,$);
+#4649=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_34','Gate latches and catches',#4626,$,$);
+#4650=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_35','Gate throw-over loops',#4626,$,$);
+#4651=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_36','Door locks',#4626,$,$);
+#4652=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_42','Indicator locks',#4626,$,$);
+#4653=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_43','Key card locks',#4626,$,$);
+#4654=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_44','Key deposit locks',#4626,$,$);
+#4655=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_45','Knob locks',#4626,$,$);
+#4656=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_46','Lever handle locks',#4626,$,$);
+#4657=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_48','Locker hasps',#4626,$,$);
+#4658=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_51','Microswitch locks',#4626,$,$);
+#4659=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_52','Mortice bolts',#4626,$,$);
+#4660=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_53','Mortice locks',#4626,$,$);
+#4661=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_54','Multipoint door locks',#4626,$,$);
+#4662=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_56','Night latches',#4626,$,$);
+#4663=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_60','Pad bolts',#4626,$,$);
+#4664=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_61','Padlock hasps and staples',#4626,$,$);
+#4665=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_62','Padlocks and keys',#4626,$,$);
+#4666=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_63','Panic exit devices',#4626,$,$);
+#4667=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_68','Push-button locks',#4626,$,$);
+#4668=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_71','Rim locks',#4626,$,$);
+#4669=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_73','Roller catches',#4626,$,$);
+#4670=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_75','Safety deposit locks',#4626,$,$);
+#4671=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_76','Sash locks',#4626,$,$);
+#4672=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_77','Single point bolts',#4626,$,$);
+#4673=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_80','Sliding security screen door locks',#4626,$,$);
+#4674=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_84','Special function door locks',#4626,$,$);
+#4675=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_87','Thief-resistant door locks',#4626,$,$);
+#4676=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_88','Time delay locks',#4626,$,$);
+#4677=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_91','Tubular mortice latches',#4626,$,$);
+#4678=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_94','Vending machine locks',#4626,$,$);
+#4679=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_95','Window casement fasteners',#4626,$,$);
+#4680=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_96','Window latches',#4626,$,$);
+#4681=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_97','Window locks',#4626,$,$);
+#4682=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_08_98','Window sash fasteners',#4626,$,$);
+#4683=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33','General hardware',#4625,$,$);
+#4684=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_20','Door edge protectors',#4683,$,$);
+#4685=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_21','Door frame protectors',#4683,$,$);
+#4686=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_22','Door knockers',#4683,$,$);
+#4687=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_24','Door stops',#4683,$,$);
+#4688=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_27','Escutcheons',#4683,$,$);
+#4689=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_29','Finger plates',#4683,$,$);
+#4690=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_31','Fixed boot scrapers',#4683,$,$);
+#4691=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_45','Kick plates',#4683,$,$);
+#4692=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_52','Midrail protection plates',#4683,$,$);
+#4693=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_68','Push plates',#4683,$,$);
+#4694=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_72','Roses',#4683,$,$);
+#4695=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_33_76','Security viewers',#4683,$,$);
+#4696=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36','Hinges and hanging hardware',#4625,$,$);
+#4697=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_04','Anti-finger trap stiles',#4696,$,$);
+#4698=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_06','Ball bearing hinges',#4696,$,$);
+#4699=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_07','Barrel hinges',#4696,$,$);
+#4700=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_08','Boxed sash window hanging fittings',#4696,$,$);
+#4701=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_09','Butt door hinges',#4696,$,$);
+#4702=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_10','Butt window hinges',#4696,$,$);
+#4703=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_11','Cabinet and countertop hinges',#4696,$,$);
+#4704=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_14','Conductor hinges',#4696,$,$);
+#4705=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_15','Concealed hinges',#4696,$,$);
+#4706=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_16','Continuous hinges',#4696,$,$);
+#4707=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_17','Cranked hinges',#4696,$,$);
+#4708=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_21','Door hinges',#4696,$,$);
+#4709=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_22','Door pivots',#4696,$,$);
+#4710=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_23','Door track and running gear',#4696,$,$);
+#4711=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_24','Drawer runners',#4696,$,$);
+#4712=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_28','Field gate hinges',#4696,$,$);
+#4713=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_29','Floor springs',#4696,$,$);
+#4714=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_30','Flush hinges',#4696,$,$);
+#4715=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_31','Friction hinges',#4696,$,$);
+#4716=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_32','Friction pivot hinges',#4696,$,$);
+#4717=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_34','Gate hinges',#4696,$,$);
+#4718=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_37','Hook and band hinges',#4696,$,$);
+#4719=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_46','Lift-off hinges',#4696,$,$);
+#4720=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_60','Parliament hinges',#4696,$,$);
+#4721=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_63','Pillar hinges',#4696,$,$);
+#4722=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_66','Projection door hinges',#4696,$,$);
+#4723=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_67','Projection window hinges',#4696,$,$);
+#4724=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_71','Rising butt door hinges',#4696,$,$);
+#4725=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_75','Sash window spiral balances',#4696,$,$);
+#4726=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_79','Single axis door hinges',#4696,$,$);
+#4727=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_80','Single axis window hinges',#4696,$,$);
+#4728=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_84','Spring hinges',#4696,$,$);
+#4729=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_86','Swing-clear hinges',#4696,$,$);
+#4730=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_88','Tee hinges',#4696,$,$);
+#4731=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_36_96','Window hinges',#4696,$,$);
+#4732=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59','Opening hardware',#4625,$,$);
+#4733=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_15','Controlled door closers',#4732,$,$);
+#4734=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_22','Door coordinators',#4732,$,$);
+#4735=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_23','Door dampers',#4732,$,$);
+#4736=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_24','Door limiting stays',#4732,$,$);
+#4737=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_25','Door lever handle sets',#4732,$,$);
+#4738=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_27','Electric sliding door mechanisms',#4732,$,$);
+#4739=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_29','Flush pull handles',#4732,$,$);
+#4740=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_31','Furniture stays',#4732,$,$);
+#4741=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_32','Garage door holders',#4732,$,$);
+#4742=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_33','Gate closers',#4732,$,$);
+#4743=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_34','Gate handles',#4732,$,$);
+#4744=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_35','Gate springs',#4732,$,$);
+#4745=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_36','Gate wheels',#4732,$,$);
+#4746=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_38','Holders and hooks',#4732,$,$);
+#4747=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_45','Knobs',#4732,$,$);
+#4748=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_50','Magnetic hold',#4732,$,$);
+#4749=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_53','Motorized curtain mechanisms',#4732,$,$);
+#4750=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_62','Pneumatic sliding door mechanisms',#4732,$,$);
+#4751=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_64','Pull handles',#4732,$,$);
+#4752=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_76','Sash window pulls',#4732,$,$);
+#4753=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_78','Screen door closers',#4732,$,$);
+#4754=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_92','Uncontrolled door closers',#4732,$,$);
+#4755=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_94','Window casement stays',#4732,$,$);
+#4756=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_95','Window latch and lock operating handles',#4732,$,$);
+#4757=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_96','Window over centre casement stays',#4732,$,$);
+#4758=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_97','Window remote manual openers',#4732,$,$);
+#4759=IFCCLASSIFICATIONREFERENCE($,'Pr_30_36_59_98','Window restrictor stays',#4732,$,$);
+#4760=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59','Openings and opening component products',#4591,$,$);
+#4761=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01','Access ramps',#4760,$,$);
+#4762=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01_11','Vehicle ramps',#4761,$,$);
+#4763=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01_23','Dog ramps',#4761,$,$);
+#4764=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01_27','Equipment loading ramps',#4761,$,$);
+#4765=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01_90','Train boarding ramps',#4761,$,$);
+#4766=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_01_96','Wheelchair ramps',#4761,$,$);
+#4767=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07','Blinds and shading devices',#4760,$,$);
+#4768=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_02','Aluminium shutters',#4767,$,$);
+#4769=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_03','Anti-glare screens',#4767,$,$);
+#4770=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_05','Awnings',#4767,$,$);
+#4771=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_07','Blackout blinds',#4767,$,$);
+#4772=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_09','Blind concealment casings',#4767,$,$);
+#4773=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_26','External roller blinds',#4767,$,$);
+#4774=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_27','External venetian blinds',#4767,$,$);
+#4775=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_31','Freezer blinds',#4767,$,$);
+#4776=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_60','Panel blinds',#4767,$,$);
+#4777=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_64','Pinoleum blinds',#4767,$,$);
+#4778=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_66','Pleated blinds',#4767,$,$);
+#4779=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_68','Polyvinyl chloride (PVC) shutters',#4767,$,$);
+#4780=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_70','Refrigerated display cabinet blinds',#4767,$,$);
+#4781=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_72','Roller blinds',#4767,$,$);
+#4782=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_73','Roman blinds',#4767,$,$);
+#4783=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_86','Sunscreens',#4767,$,$);
+#4784=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_94','Venetian blinds',#4767,$,$);
+#4785=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_95','Vertical blinds',#4767,$,$);
+#4786=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_07_96','Wood shutters',#4767,$,$);
+#4787=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09','Brise-soleils and components',#4760,$,$);
+#4788=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_01','Aluminium brise-soleil struts',#4787,$,$);
+#4789=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_02','Aluminium brise-soleil carrier members',#4787,$,$);
+#4790=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_03','Aluminium brise-soleil louvre blades',#4787,$,$);
+#4791=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_04','Aluminium brise-soleil support arms',#4787,$,$);
+#4792=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_05','Aluminium brise-soleil units',#4787,$,$);
+#4793=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_11','Carbon steel brise-soleil struts',#4787,$,$);
+#4794=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_12','Carbon steel brise-soleil carrier members',#4787,$,$);
+#4795=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_13','Carbon steel brise-soleil louvre blades',#4787,$,$);
+#4796=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_14','Carbon steel brise-soleil support arms',#4787,$,$);
+#4797=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_15','Carbon steel brise-soleil units',#4787,$,$);
+#4798=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_18','Composite brise-soleil units',#4787,$,$);
+#4799=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_33','Glass brise-soleil louvre blades',#4787,$,$);
+#4800=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_62','Plastics brise-soleil louvre blades',#4787,$,$);
+#4801=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_63','Plastics brise-soleil units',#4787,$,$);
+#4802=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_82','Stainless steel brise-soleil struts',#4787,$,$);
+#4803=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_83','Stainless steel brise-soleil carrier members',#4787,$,$);
+#4804=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_84','Stainless steel brise-soleil louvre blades',#4787,$,$);
+#4805=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_85','Stainless steel brise-soleil support arms',#4787,$,$);
+#4806=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_86','Stainless steel brise-soleil units',#4787,$,$);
+#4807=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_90','Wood brise-soleil carrier members',#4787,$,$);
+#4808=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_91','Wood brise-soleil louvre blades',#4787,$,$);
+#4809=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_92','Wood brise-soleil support arms',#4787,$,$);
+#4810=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_09_93','Wood brise-soleil units',#4787,$,$);
+#4811=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12','Canal lock gate components',#4760,$,$);
+#4812=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_06','Balance beams',#4811,$,$);
+#4813=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_07','Balance weights',#4811,$,$);
+#4814=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_10','Canal lock gates',#4811,$,$);
+#4815=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_22','Displacer pivots',#4811,$,$);
+#4816=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_23','Displacer tanks',#4811,$,$);
+#4817=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_33','Gate face-plates',#4811,$,$);
+#4818=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_47','Lock gate paddles',#4811,$,$);
+#4819=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_12_48','Lock push devices',#4811,$,$);
+#4820=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_15','Controlled pedestrian access gates',#4760,$,$);
+#4821=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_15_32','Full-height access control gates',#4820,$,$);
+#4822=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_15_36','Half-height access control gates',#4820,$,$);
+#4823=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_15_62','Pedestrian security portals',#4820,$,$);
+#4824=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23','Door frames and leaves',#4760,$,$);
+#4825=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_02','Aluminium door frames',#4824,$,$);
+#4826=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_03','Aluminium door leaves',#4824,$,$);
+#4827=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_11','Carbon steel door frames',#4824,$,$);
+#4828=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_15','Composite door frames',#4824,$,$);
+#4829=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_16','Composite door leaves',#4824,$,$);
+#4830=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_32','Frameless glass door leaves',#4824,$,$);
+#4831=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_34','Glass fibre-reinforced plastics (GRP) door leaves',#4824,$,$);
+#4832=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_47','Louvre door leaves',#4824,$,$);
+#4833=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_50','Matchboarded door leaves',#4824,$,$);
+#4834=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_53','Carbon steel door leaves',#4824,$,$);
+#4835=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_84','Stainless steel door frames',#4824,$,$);
+#4836=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_85','Stainless steel door leaves',#4824,$,$);
+#4837=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_91','Unplasticized polyvinyl chloride (PVC-U) door frames',#4824,$,$);
+#4838=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_92','Unplasticized polyvinyl chloride (PVC-U) door leaves',#4824,$,$);
+#4839=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_96','Wood door frames',#4824,$,$);
+#4840=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_97','Wood flush door leaves',#4824,$,$);
+#4841=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_23_98','Wood panelled door leaves',#4824,$,$);
+#4842=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24','Doorsets',#4760,$,$);
+#4843=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_02','Aluminium doorsets',#4842,$,$);
+#4844=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_04','Automatic revolving doorsets',#4842,$,$);
+#4845=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_05','Automatic swing doorsets',#4842,$,$);
+#4846=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_11','Cavity sliding doorsets',#4842,$,$);
+#4847=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_14','Collapsible gate and grille sets',#4842,$,$);
+#4848=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_15','Combination doorsets',#4842,$,$);
+#4849=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_16','Composite doorsets',#4842,$,$);
+#4850=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_30','Flexible doorsets',#4842,$,$);
+#4851=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_34','Glass fibre-reinforced plastics (GRP) doorsets',#4842,$,$);
+#4852=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_37','High-security doorsets',#4842,$,$);
+#4853=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_38','High-speed doorsets',#4842,$,$);
+#4854=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_48','Loading bay doorsets',#4842,$,$);
+#4855=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_49','Louvre doorsets',#4842,$,$);
+#4856=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_50','Manual revolving doorsets',#4842,$,$);
+#4857=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_52','Carbon steel doorsets',#4842,$,$);
+#4858=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_64','Polyvinyl chloride (PVC) strip curtain sets',#4842,$,$);
+#4859=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_70','Refrigerated display cabinet doors',#4842,$,$);
+#4860=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_75','Sectional overhead doorsets',#4842,$,$);
+#4861=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_80','Sliding door and partition sets',#4842,$,$);
+#4862=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_81','Sliding folding doorsets',#4842,$,$);
+#4863=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_83','Sliding folding shutter doorsets',#4842,$,$);
+#4864=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_84','Sliding shutter doorsets',#4842,$,$);
+#4865=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_85','Stainless steel doorsets',#4842,$,$);
+#4866=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_86','Swing doorsets',#4842,$,$);
+#4867=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_92','Unplasticized polyvinyl chloride (PVC-U) doorsets',#4842,$,$);
+#4868=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_93','Up-and-over doorsets',#4842,$,$);
+#4869=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_95','Vertical lifting fabric doors',#4842,$,$);
+#4870=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_24_97','Wood doorsets',#4842,$,$);
+#4871=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_28','Escape products',#4760,$,$);
+#4872=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_28_26','Escape chairs',#4871,$,$);
+#4873=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_28_27','Escape chutes',#4871,$,$);
+#4874=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_28_28','Escape slides',#4871,$,$);
+#4875=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_28_78','Slings',#4871,$,$);
+#4876=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29','Fixed roof ventilators, terminals and accessories',#4760,$,$);
+#4877=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_02','Abutment ventilators',#4876,$,$);
+#4878=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_15','Combined eaves fascia grilles and ventilator trays',#4876,$,$);
+#4879=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_30','Flat roof ventilators',#4876,$,$);
+#4880=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_62','Plastics eaves underlay support',#4876,$,$);
+#4881=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_64','Plastics rafter ventilator trays',#4876,$,$);
+#4882=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_71','Roof ridge ventilator tiles',#4876,$,$);
+#4883=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_72','Roof slope terminals',#4876,$,$);
+#4884=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_73','Roof slope ventilator tiles',#4876,$,$);
+#4885=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_74','Roof terminals',#4876,$,$);
+#4886=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_75','Roof ventilator unit',#4876,$,$);
+#4887=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_77','Rotary roof ventilators',#4876,$,$);
+#4888=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_29_82','Strip ventilators',#4876,$,$);
+#4889=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33','Gate surrounds and leaves',#4760,$,$);
+#4890=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_02','Aluminium sheet gate leaves',#4889,$,$);
+#4891=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_03','Aluminium vertical rail gate leaves',#4889,$,$);
+#4892=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_11','Carbon steel expanded mesh gate leaves',#4889,$,$);
+#4893=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_12','Carbon steel field gate leaves',#4889,$,$);
+#4894=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_13','Carbon steel palisade gate leaves',#4889,$,$);
+#4895=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_14','Carbon steel sheet gate leaves',#4889,$,$);
+#4896=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_15','Carbon steel vertical section gate leaves',#4889,$,$);
+#4897=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_16','Carbon steel welded mesh gate leaves',#4889,$,$);
+#4898=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_33','Gate arches',#4889,$,$);
+#4899=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_34','Glass infill gate leaves',#4889,$,$);
+#4900=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_35','Glazing plastics gate leaves',#4889,$,$);
+#4901=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_36','Wood field gate leaves',#4889,$,$);
+#4902=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_37','Hardwood gate leaves',#4889,$,$);
+#4903=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_38','Wood gate surrounds',#4889,$,$);
+#4904=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_39','Wood palisade gate leaves',#4889,$,$);
+#4905=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_52','Metal gate surrounds',#4889,$,$);
+#4906=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_62','Plastics gate leaves',#4889,$,$);
+#4907=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_63','Plywood sheet gate leaves',#4889,$,$);
+#4908=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_78','Stainless steel expanded mesh gate leaves',#4889,$,$);
+#4909=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_82','Stainless steel sheet gate leaves',#4889,$,$);
+#4910=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_84','Stainless steel vertical rail gate leaves',#4889,$,$);
+#4911=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_95','Wood gate leaves',#4889,$,$);
+#4912=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_98','Wrought iron decorative gate leaves',#4889,$,$);
+#4913=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_33_99','Wrought iron vertical rail gate leaves',#4889,$,$);
+#4914=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34','Gates and turnstiles',#4760,$,$);
+#4915=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_01','Aluminium full-height turnstiles',#4914,$,$);
+#4916=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_02','Aluminium gates',#4914,$,$);
+#4917=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_03','Aluminium safety gates',#4914,$,$);
+#4918=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_11','Carbon steel bridle gates',#4914,$,$);
+#4919=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_12','Carbon steel dog gates',#4914,$,$);
+#4920=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_13','Carbon steel full-height turnstiles',#4914,$,$);
+#4921=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_14','Carbon steel gates',#4914,$,$);
+#4922=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_15','Carbon steel half-height turnstiles',#4914,$,$);
+#4923=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_16','Carbon steel kissing gates',#4914,$,$);
+#4924=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_17','Carbon steel motorbike inhibitors',#4914,$,$);
+#4925=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_18','Carbon steel safety gates',#4914,$,$);
+#4926=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_19','Composite full-height turnstiles',#4914,$,$);
+#4927=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_20','Composite gates',#4914,$,$);
+#4928=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_22','Composite half-height turnstiles',#4914,$,$);
+#4929=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_26','Flood boards',#4914,$,$);
+#4930=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_28','Flood doors',#4914,$,$);
+#4931=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_30','Flood gates',#4914,$,$);
+#4932=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_34','Glazed half-height turnstiles',#4914,$,$);
+#4933=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_35','Glazed gates',#4914,$,$);
+#4934=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_36','Wood bridle gates',#4914,$,$);
+#4935=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_37','Wood dog gates',#4914,$,$);
+#4936=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_38','Wood gates',#4914,$,$);
+#4937=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_39','Wood kissing gates',#4914,$,$);
+#4938=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_40','Wood ladder stiles',#4914,$,$);
+#4939=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_41','Wood post and rail stiles',#4914,$,$);
+#4940=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_64','Plastics full-height turnstiles',#4914,$,$);
+#4941=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_65','Plastics gates',#4914,$,$);
+#4942=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_78','Stainless steel full-height turnstiles',#4914,$,$);
+#4943=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_80','Stainless steel gates',#4914,$,$);
+#4944=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_88','Stainless steel half-height turnstiles',#4914,$,$);
+#4945=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_90','Stainless steel safety gates',#4914,$,$);
+#4946=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_92','Tripod turnstiles',#4914,$,$);
+#4947=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_34_98','Wrought iron gates',#4914,$,$);
+#4948=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36','Hatches and access panels',#4760,$,$);
+#4949=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_01','Access panels',#4948,$,$);
+#4950=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_02','Aluminium access hatches',#4948,$,$);
+#4951=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_07','Borehole caps',#4948,$,$);
+#4952=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_11','Carbon steel access hatches',#4948,$,$);
+#4953=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_30','Floor hatches',#4948,$,$);
+#4954=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_50','Manual trapdoors',#4948,$,$);
+#4955=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_74','Roof hatches',#4948,$,$);
+#4956=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_76','Self-closing safety hatches',#4948,$,$);
+#4957=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_78','Self-closing trapdoors',#4948,$,$);
+#4958=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_80','Stainless steel access hatches',#4948,$,$);
+#4959=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_36_96','Wall hatches',#4948,$,$);
+#4960=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46','Lift barriers',#4760,$,$);
+#4961=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46_46','Lift landing doorsets',#4960,$,$);
+#4962=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46_47','Lift landing frames',#4960,$,$);
+#4963=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46_48','Lift landing sills',#4960,$,$);
+#4964=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46_49','Lift platform barriers',#4960,$,$);
+#4965=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_46_63','Platform lift landing doorsets and gates',#4960,$,$);
+#4966=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48','Louvres and components',#4760,$,$);
+#4967=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_02','Aluminium louvre blades',#4966,$,$);
+#4968=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_03','Aluminium louvre frames',#4966,$,$);
+#4969=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_04','Aluminium louvre panel units',#4966,$,$);
+#4970=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_11','Carbon steel louvre blades',#4966,$,$);
+#4971=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_12','Carbon steel louvre frames',#4966,$,$);
+#4972=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_13','Carbon steel louvre panel units',#4966,$,$);
+#4973=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_34','Glass louvre blades',#4966,$,$);
+#4974=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_52','Mirror louvre units',#4966,$,$);
+#4975=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_65','Plastic louvre blades',#4966,$,$);
+#4976=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_77','Screening and ventilation access doors',#4966,$,$);
+#4977=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_78','Screening and ventilation louvre support frames',#4966,$,$);
+#4978=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_83','Stainless steel louvre blades',#4966,$,$);
+#4979=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_84','Stainless steel louvre frames',#4966,$,$);
+#4980=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_85','Stainless steel louvre panel units',#4966,$,$);
+#4981=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_96','Wood louvre blades',#4966,$,$);
+#4982=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_97','Wood louvre frames',#4966,$,$);
+#4983=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_48_98','Wood louvre panel units',#4966,$,$);
+#4984=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57','Opening security and protection products',#4760,$,$);
+#4985=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_04','Anti-burglar window bars',#4984,$,$);
+#4986=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_07','Bird guards',#4984,$,$);
+#4987=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_08','Bird guard mesh',#4984,$,$);
+#4988=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_28','Escalator shutters',#4984,$,$);
+#4989=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_29','Firebreak shutters',#4984,$,$);
+#4990=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_31','Flood gate covers',#4984,$,$);
+#4991=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_40','Insect guard mesh',#4984,$,$);
+#4992=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_41','Insect guards',#4984,$,$);
+#4993=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_58','Overhead ventilators',#4984,$,$);
+#4994=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_76','Security shutters',#4984,$,$);
+#4995=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_57_77','Security window screens',#4984,$,$);
+#4996=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_58','Operable roof ventilators',#4760,$,$);
+#4997=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_58_50','Manual control glazed roof ventilators',#4996,$,$);
+#4998=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_58_88','Thermostatic control glazed roof ventilators',#4996,$,$);
+#4999=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59','Vehicular barriers',#4760,$,$);
+#5000=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_11','Cantilevered sliding beam vehicular barriers',#4999,$,$);
+#5001=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_15','Collision protection beams',#4999,$,$);
+#5002=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_38','Height restrictors',#4999,$,$);
+#5003=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_39','Horizontal swing vehicular barriers',#4999,$,$);
+#5004=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_72','Rising arm vehicular barriers',#4999,$,$);
+#5005=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_59_79','Sliding vehicular barriers',#4999,$,$);
+#5006=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60','Passenger boarding bridges',#4760,$,$);
+#5007=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60_03','Apron drive passenger boarding bridges',#5006,$,$);
+#5008=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60_15','Commuter passenger boarding bridges',#5006,$,$);
+#5009=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60_56','Noseloader passenger boarding bridges',#5006,$,$);
+#5010=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60_80','Ship boarding gangways',#5006,$,$);
+#5011=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_60_87','T bridge passenger boarding bridges',#5006,$,$);
+#5012=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61','Pavement and floorlight and venting products',#4760,$,$);
+#5013=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_32','Glazed floorlight panels',#5012,$,$);
+#5014=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_33','Glazed lift-out floorlight access panel',#5012,$,$);
+#5015=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_34','Glazed lift-out access pavement light panels',#5012,$,$);
+#5016=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_35','Glazed pavement light panels',#5012,$,$);
+#5017=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_36','Glazed smoke venting panels',#5012,$,$);
+#5018=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_61_57','Non-glazed smoke venting panels',#5012,$,$);
+#5019=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72','Rooflights',#4760,$,$);
+#5020=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_17','Continuous rooflights',#5019,$,$);
+#5021=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_21','Daylight pipes',#5019,$,$);
+#5022=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_24','Dormers',#5019,$,$);
+#5023=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_25','Double glazed light pipe diffusers',#5019,$,$);
+#5024=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_30','Factory-assembled insulating rooflights (FAIRs)',#5019,$,$);
+#5025=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_31','Framed rooflights',#5019,$,$);
+#5026=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_33','Glazed lift-out rooflight access panels',#5019,$,$);
+#5027=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_34','Glazed rooflight panels',#5019,$,$);
+#5028=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_42','Individual rooflights',#5019,$,$);
+#5029=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_46','Lantern lights',#5019,$,$);
+#5030=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_48','Light reflectors (motorized)',#5019,$,$);
+#5031=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_57','North lights',#5019,$,$);
+#5032=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_77','Skylights',#5019,$,$);
+#5033=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_72_94','Ventilating light pipe diffusers',#5019,$,$);
+#5034=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_84','Shutters and grilles',#4760,$,$);
+#5035=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_84_30','Fire-resisting roller shutters',#5034,$,$);
+#5036=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_84_72','Roller grilles',#5034,$,$);
+#5037=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_84_73','Roller shutters',#5034,$,$);
+#5038=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94','Ventilation grilles',#4760,$,$);
+#5039=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_04','Air ventilation grilles',#5038,$,$);
+#5040=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_06','Air transfer grilles',#5038,$,$);
+#5041=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_26','Eaves fascia grilles',#5038,$,$);
+#5042=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_31','Fire-resisting air transfer grilles',#5038,$,$);
+#5043=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_32','Fire-resisting air transfer grilles with smoke shutters',#5038,$,$);
+#5044=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_78','Soffit grilles',#5038,$,$);
+#5045=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_94_90','Trickle vents',#5038,$,$);
+#5046=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_95','Water control gates',#4760,$,$);
+#5047=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_95_30','Flap control gates',#5046,$,$);
+#5048=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_95_52','Mitre control gates',#5046,$,$);
+#5049=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_95_70','Radial control gates',#5046,$,$);
+#5050=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96','Wall venting products',#4760,$,$);
+#5051=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_11','Cavity ventilators',#5050,$,$);
+#5052=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_33','Gas venting grilles',#5050,$,$);
+#5053=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_35','Ground level vent outlets',#5050,$,$);
+#5054=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_92','Ventilation ducts',#5050,$,$);
+#5055=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_93','Ventilation gratings',#5050,$,$);
+#5056=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_96_96','Wall vent outlets',#5050,$,$);
+#5057=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_97','Window panels',#4760,$,$);
+#5058=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_97_16','Glazed security window panels',#5057,$,$);
+#5059=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_97_80','Speak through units',#5057,$,$);
+#5060=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_97_90','Transaction units',#5057,$,$);
+#5061=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_97_94','Vision panels',#5057,$,$);
+#5062=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98','Window units',#4760,$,$);
+#5063=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_02','Aluminium window units',#5062,$,$);
+#5064=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_03','Aluminium frame roof window units',#5062,$,$);
+#5065=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_13','Bronze window units',#5062,$,$);
+#5066=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_15','Composite window units',#5062,$,$);
+#5067=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_34','Glass louvre window units',#5062,$,$);
+#5068=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_72','Rigid polyurethane frame roof window units',#5062,$,$);
+#5069=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_83','Steel window units',#5062,$,$);
+#5070=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_84','Steel frame roof window units',#5062,$,$);
+#5071=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_92','Unplasticized polyvinyl chloride (PVC-U) window units',#5062,$,$);
+#5072=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_93','Unplasticized polyvinyl chloride (PVC-U) roof window units',#5062,$,$);
+#5073=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_96','Wood window units',#5062,$,$);
+#5074=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_98_97','Wood frame roof window units',#5062,$,$);
+#5075=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99','Window walls',#4760,$,$);
+#5076=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99_02','Aluminium window walls',#5075,$,$);
+#5077=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99_15','Composite window walls',#5075,$,$);
+#5078=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99_83','Steel window walls',#5075,$,$);
+#5079=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99_92','Unplasticized polyvinyl chloride (PVC-U) window walls',#5075,$,$);
+#5080=IFCCLASSIFICATIONREFERENCE($,'Pr_30_59_99_96','Wood window walls',#5075,$,$);
+#5081=IFCCLASSIFICATIONREFERENCE($,'Pr_35','Covering and finishing products',#8,$,$);
+#5082=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31','Formless covering and finish products',#5081,$,$);
+#5083=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05','Asphalt, bitumen and resin mixtures',#5082,$,$);
+#5084=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_03','Asphalt concrete (AC) base courses',#5083,$,$);
+#5085=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_04','Asphalt concrete (AC) binder courses',#5083,$,$);
+#5086=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_05','Asphalt concrete (AC) surface courses',#5083,$,$);
+#5087=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_07','Bitumen-coated chippings',#5083,$,$);
+#5088=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_08','Bitumen emulsion and glass fibre sandwich matrices',#5083,$,$);
+#5089=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_10','Bonded grit surfacings',#5083,$,$);
+#5090=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_19','Cut-back and fluxed bitumen binders',#5083,$,$);
+#5091=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_36','Hard paving-grade bitumen',#5083,$,$);
+#5092=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_37','Hot-applied oxidized bitumen coatings',#5083,$,$);
+#5093=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_38','Hot rolled asphalt (HRA) base courses',#5083,$,$);
+#5094=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_39','Hot rolled asphalt (HRA) binder courses',#5083,$,$);
+#5095=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_40','Hot rolled asphalt (HRA) surface courses and slurries',#5083,$,$);
+#5096=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_42','Impervious textured sports surfacings',#5083,$,$);
+#5097=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_50','Mastic asphalt (MA) surface courses',#5083,$,$);
+#5098=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_60','Paving-grade bitumens',#5083,$,$);
+#5099=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_64','Polyurethane-bound ethylene propylene diene monomer (EPDM) rubber crumb surfacings',#5083,$,$);
+#5100=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_65','Porous asphalt concrete (PAC) surface courses',#5083,$,$);
+#5101=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_66','Porous asphalt products',#5083,$,$);
+#5102=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_70','Resin-bonded aggregate surfacings',#5083,$,$);
+#5103=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_71','Resin-bound mixed aggregate surfacings',#5083,$,$);
+#5104=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_72','Roofing, tanking and flooring mastic asphalt (MA)',#5083,$,$);
+#5105=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_75','Sand asphalt',#5083,$,$);
+#5106=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_83','Stone mastic asphalt (SMA) binder courses',#5083,$,$);
+#5107=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_84','Stone mastic asphalt (SMA) regulating courses',#5083,$,$);
+#5108=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_05_85','Stone mastic asphalt (SMA) surface courses',#5083,$,$);
+#5109=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06','Bedding and underlay compounds',#5082,$,$);
+#5110=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_12','Cementitious levelling screed mixes',#5109,$,$);
+#5111=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_15','Granolithic concrete wearing screed mixes',#5109,$,$);
+#5112=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_28','Fibre-reinforced levelling screed mixes',#5109,$,$);
+#5113=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_29','Fine concrete levelling screed mixes',#5109,$,$);
+#5114=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_31','Floor seals',#5109,$,$);
+#5115=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_32','Flow applied flooring',#5109,$,$);
+#5116=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_36','Heavy-duty flow-applied flooring',#5109,$,$);
+#5117=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_37','Heavy-duty screed flooring',#5109,$,$);
+#5118=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_38','High-build floor coatings',#5109,$,$);
+#5119=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_47','Lightweight aggregate levelling screed mixes',#5109,$,$);
+#5120=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_49','Liquid-applied insulating underlays',#5109,$,$);
+#5121=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_55','Multilayer flooring',#5109,$,$);
+#5122=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_64','Polymer-modified levelling screed mixes',#5109,$,$);
+#5123=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_65','Polymer-modified wearing screed mixes',#5109,$,$);
+#5124=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_69','Quick-drying levelling screed mixes',#5109,$,$);
+#5125=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_71','Ready-mixed levelling and wearing screeds',#5109,$,$);
+#5126=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_72','Ready-mixed self-smoothing calcium sulfate screeds',#5109,$,$);
+#5127=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_73','Ready-mixed trowelled calcium sulfate screeds',#5109,$,$);
+#5128=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_77','Screed flooring',#5109,$,$);
+#5129=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_78','Self-smoothing levelling screed mixes',#5109,$,$);
+#5130=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_79','Self-smoothing wearing screed mixes',#5109,$,$);
+#5131=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_06_80','Smoothing and levelling underlay compounds',#5109,$,$);
+#5132=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22','Decorative coatings',#5082,$,$);
+#5133=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_02','Aluminium paints',#5132,$,$);
+#5134=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_12','Casein paints',#5132,$,$);
+#5135=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_13','Cement paints',#5132,$,$);
+#5136=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_15','Concrete finishing coats',#5132,$,$);
+#5137=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_16','Concrete flash coats',#5132,$,$);
+#5138=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_17','Concrete floor dyes',#5132,$,$);
+#5139=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_18','Concrete floor paints',#5132,$,$);
+#5140=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_19','Concrete stains',#5132,$,$);
+#5141=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_23','Distemper',#5132,$,$);
+#5142=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_37','High-pigment water-based paint',#5132,$,$);
+#5143=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_47','Limewashes',#5132,$,$);
+#5144=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_52','Micaceous iron oxide paints',#5132,$,$);
+#5145=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_54','Multicoloured coatings',#5132,$,$);
+#5146=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_55','Multicoloured finish spatter coatings',#5132,$,$);
+#5147=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_58','Oil-bound distempers',#5132,$,$);
+#5148=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_62','Plant oil paints',#5132,$,$);
+#5149=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_64','Plastic texture paints',#5132,$,$);
+#5150=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_72','Resin-based breathable masonry paints',#5132,$,$);
+#5151=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_77','Silicate-based masonry coatings',#5132,$,$);
+#5152=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_79','Solvent-based finishing coats',#5132,$,$);
+#5153=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_80','Solvent-based gloss finishes',#5132,$,$);
+#5154=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_81','Solvent-based masonry paints',#5132,$,$);
+#5155=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_82','Solvent-based matt and flat finishes',#5132,$,$);
+#5156=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_83','Solvent-based mid-sheen finishes',#5132,$,$);
+#5157=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_87','Tallow lime washes',#5132,$,$);
+#5158=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_94','Water-based finishing coats',#5132,$,$);
+#5159=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_95','Water-based gloss finishes',#5132,$,$);
+#5160=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_96','Water-based masonry paints',#5132,$,$);
+#5161=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_97','Water-based matt and flat finishes',#5132,$,$);
+#5162=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_22_98','Water-based mid-sheen finishes',#5132,$,$);
+#5163=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64','Plasters and renders',#5082,$,$);
+#5164=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_01','Acrylic plasters',#5163,$,$);
+#5165=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_02','Acrylic renders',#5163,$,$);
+#5166=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_07','Biocidal renders',#5163,$,$);
+#5167=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_08','Bonding plasters',#5163,$,$);
+#5168=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_09','Browning plasters',#5163,$,$);
+#5169=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_12','Cementitious renders',#5163,$,$);
+#5170=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_14','Clay plasters',#5163,$,$);
+#5171=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_29','Factory-mixed plasters',#5163,$,$);
+#5172=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_31','Fibrous plasters',#5163,$,$);
+#5173=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_32','Finish plasters',#5163,$,$);
+#5174=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_35','Gypsum plasters',#5163,$,$);
+#5175=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_42','Insulating plasters',#5163,$,$);
+#5176=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_47','Lime plasters',#5163,$,$);
+#5177=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_48','Lime renders',#5163,$,$);
+#5178=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_64','Polymer plasters',#5163,$,$);
+#5179=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_65','Polymer-modified renders',#5163,$,$);
+#5180=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_67','Projection plasters',#5163,$,$);
+#5181=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_70','Render-grade resins',#5163,$,$);
+#5182=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_71','Renovating plasters',#5163,$,$);
+#5183=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_76','Scagliola',#5163,$,$);
+#5184=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_77','Silicone renders',#5163,$,$);
+#5185=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_80','Solid cast plasters',#5163,$,$);
+#5186=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_84','Squash court plasters',#5163,$,$);
+#5187=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_85','Stucco',#5163,$,$);
+#5188=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_86','Synthetic plasters',#5163,$,$);
+#5189=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_98','X-ray undercoat plasters',#5163,$,$);
+#5190=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_64_99','Zinc oxychloride plasters',#5163,$,$);
+#5191=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65','Preparation materials, fillers and stoppers',#5082,$,$);
+#5192=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_01','Abrasives',#5191,$,$);
+#5193=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_02','Abrasive blocks',#5191,$,$);
+#5194=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_12','Cement and grout fillers',#5191,$,$);
+#5195=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_13','Chemical fillers',#5191,$,$);
+#5196=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_20','Decorator\X2\2019\X0\s caulks',#5191,$,$);
+#5197=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_21','Decorator\X2\2019\X0\s flexible fillers',#5191,$,$);
+#5198=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_22','Degreaser solutions',#5191,$,$);
+#5199=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_23','Detergent solutions',#5191,$,$);
+#5200=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_24','Dry air-pressured abrasives',#5191,$,$);
+#5201=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_25','Dry air-pressured micro-abrasives',#5191,$,$);
+#5202=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_26','Dusting powders',#5191,$,$);
+#5203=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_27','Efflorescence control compounds',#5191,$,$);
+#5204=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_28','End grain sealers',#5191,$,$);
+#5205=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_29','Fine surface fillers',#5191,$,$);
+#5206=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_30','Finishing compounds',#5191,$,$);
+#5207=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_31','Fire-resistant fillers',#5191,$,$);
+#5208=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_33','Formwork release agents',#5191,$,$);
+#5209=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_34','Gypsum-based bedding compounds',#5191,$,$);
+#5210=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_50','Masonry stabilizers',#5191,$,$);
+#5211=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_74','Rust removers',#5191,$,$);
+#5212=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_79','Stoppers',#5191,$,$);
+#5213=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_80','Stopper fillers',#5191,$,$);
+#5214=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_82','Surface fillers',#5191,$,$);
+#5215=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_95','Wax-based fillers',#5191,$,$);
+#5216=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_96','Wet air-pressured abrasives',#5191,$,$);
+#5217=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_97','Wetting agents',#5191,$,$);
+#5218=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_65_98','Wood knotting solutions',#5191,$,$);
+#5219=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66','Preparatory coatings',#5082,$,$);
+#5220=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_02','Adhesion promoters',#5219,$,$);
+#5221=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_03','Alkali-resisting primers',#5219,$,$);
+#5222=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_07','Basecoat stains',#5219,$,$);
+#5223=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_08','Bitumen primers',#5219,$,$);
+#5224=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_09','Bonding coats',#5219,$,$);
+#5225=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_15','Combined barrier and bonding coats',#5219,$,$);
+#5226=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_16','Concrete curing coatings',#5219,$,$);
+#5227=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_21','Debonding compounds',#5219,$,$);
+#5228=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_22','Dressing compounds',#5219,$,$);
+#5229=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_26','Etching primers',#5219,$,$);
+#5230=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_30','Floor covering primers',#5219,$,$);
+#5231=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_34','Gilding basecoats',#5219,$,$);
+#5232=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_50','Mastic asphalt (MA) primers',#5219,$,$);
+#5233=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_51','Metallic lead primers',#5219,$,$);
+#5234=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_52','Modified bitumen primers',#5219,$,$);
+#5235=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_53','Mordant solutions',#5219,$,$);
+#5236=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_55','Multicoloured finish basecoats',#5219,$,$);
+#5237=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_57','Non-bituminous primers',#5219,$,$);
+#5238=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_60','Paving primers',#5219,$,$);
+#5239=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_62','Plaster primers',#5219,$,$);
+#5240=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_63','Plasterboard primers',#5219,$,$);
+#5241=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_65','Powder-coating primers',#5219,$,$);
+#5242=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_67','Primer-sealers',#5219,$,$);
+#5243=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_68','Primer-undercoats',#5219,$,$);
+#5244=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_70','Reinforcement treatments',#5219,$,$);
+#5245=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_71','Resin coating primers',#5219,$,$);
+#5246=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_75','Sanded primers',#5219,$,$);
+#5247=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_76','Silicate-based primers',#5219,$,$);
+#5248=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_77','Sealant primers',#5219,$,$);
+#5249=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_78','Slip plane bituminous emulsion paint primers',#5219,$,$);
+#5250=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_80','Solvent-borne basecoats',#5219,$,$);
+#5251=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_81','Solvent-borne metal primers',#5219,$,$);
+#5252=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_82','Solvent-borne undercoats',#5219,$,$);
+#5253=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_83','Solvent-borne wood primers',#5219,$,$);
+#5254=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_88','Thinners',#5219,$,$);
+#5255=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_92','Universal primers',#5219,$,$);
+#5256=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_94','Water-based acrylic primers',#5219,$,$);
+#5257=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_95','Waterborne basecoats',#5219,$,$);
+#5258=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_96','Waterborne metal primers',#5219,$,$);
+#5259=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_97','Waterborne thinned undercoats',#5219,$,$);
+#5260=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_98','Waterborne wood primers',#5219,$,$);
+#5261=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_66_99','Waterborne undercoats',#5219,$,$);
+#5262=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67','Preservative, additives and fire-retardant treatments',#5082,$,$);
+#5263=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_01','Acrylic retarder additives',#5262,$,$);
+#5264=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_07','Borate pellet and rod preservatives',#5262,$,$);
+#5265=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_08','Boron compound preservatives',#5262,$,$);
+#5266=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_14','Clear flame-retardant finishes',#5262,$,$);
+#5267=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_15','Copper-organic preservatives',#5262,$,$);
+#5268=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_24','Dry interior fire-retardant solutions',#5262,$,$);
+#5269=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_34','Glycol-borne preservatives',#5262,$,$);
+#5270=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_37','House longhorn beetle timber treatments',#5262,$,$);
+#5271=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_39','Humidity-resistant fire-retardant solutions',#5262,$,$);
+#5272=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_41','Insecticidal paint additives',#5262,$,$);
+#5273=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_42','Interior fire-retardant solutions',#5262,$,$);
+#5274=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_46','Latex retarder additives',#5262,$,$);
+#5275=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_47','Leach-resistant fire-retardant solutions',#5262,$,$);
+#5276=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_52','Microemulsion-borne preservatives',#5262,$,$);
+#5277=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_59','Organic solvent-borne preservatives',#5262,$,$);
+#5278=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_88','Thatch fire preservative treatments',#5262,$,$);
+#5279=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_89','Thatch fire-retardant treatments',#5262,$,$);
+#5280=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_96','Waterborne preservatives',#5262,$,$);
+#5281=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_97','Water-based microemulsion preservatives',#5262,$,$);
+#5282=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_67_98','Water-based organic preservatives',#5262,$,$);
+#5283=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68','Protective coatings',#5082,$,$);
+#5284=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_01','Acrylic-based waterproof coatings',#5283,$,$);
+#5285=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_02','Anionic bitumen emulsions',#5283,$,$);
+#5286=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_03','Anodized coatings',#5283,$,$);
+#5287=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_04','Anti-carbonation coatings',#5283,$,$);
+#5288=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_05','Anti-graffiti coatings',#5283,$,$);
+#5289=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_06','Barrier coatings',#5283,$,$);
+#5290=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_07','Bitumen-based black coatings',#5283,$,$);
+#5291=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_09','Bitumen emulsion waterproof coatings',#5283,$,$);
+#5292=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_10','Black bitumen coatings',#5283,$,$);
+#5293=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_11','Cationic bitumen emulsions',#5283,$,$);
+#5294=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_12','Cellulose coatings',#5283,$,$);
+#5295=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_13','Chrome plating',#5283,$,$);
+#5296=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_14','Clear floor varnishes',#5283,$,$);
+#5297=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_15','Clear varnishes',#5283,$,$);
+#5298=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_16','Cold-applied bitumen solutions',#5283,$,$);
+#5299=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_17','Cold-applied polymer-modified bitumen waterproof coatings',#5283,$,$);
+#5300=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_18','Concrete polishes',#5283,$,$);
+#5301=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_19','Copper plating',#5283,$,$);
+#5302=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_21','Cork tile polyurethane (PUR) varnishes',#5283,$,$);
+#5303=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_25','Electrical insulation coatings',#5283,$,$);
+#5304=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_27','Epoxy resin coatings',#5283,$,$);
+#5305=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_28','Epoxy underwater coatings',#5283,$,$);
+#5306=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_29','Flame-retardant coatings',#5283,$,$);
+#5307=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_31','Floor dyes',#5283,$,$);
+#5308=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_32','Floor polishes',#5283,$,$);
+#5309=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_33','Fungicidal coatings',#5283,$,$);
+#5310=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_34','Galvanized coatings',#5283,$,$);
+#5311=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_35','Gold plating',#5283,$,$);
+#5312=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_36','Hard wax oils',#5283,$,$);
+#5313=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_37','Heat-resisting coatings',#5283,$,$);
+#5314=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_38','Hot-applied polymer-modified bitumen waterproof coatings',#5283,$,$);
+#5315=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_39','Hot-dip galvanizings',#5283,$,$);
+#5316=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_40','Hygienic coatings',#5283,$,$);
+#5317=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_43','Intumescent protective coatings',#5283,$,$);
+#5318=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_46','Lacquers',#5283,$,$);
+#5319=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_47','Liquid tanking resins',#5283,$,$);
+#5320=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_51','Mastic asphalt (MA) polishes',#5283,$,$);
+#5321=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_52','Membrane walkway coatings',#5283,$,$);
+#5322=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_55','Multicoloured finish glaze coats',#5283,$,$);
+#5323=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_59','Physical vapour deposition (PVD) coatings',#5283,$,$);
+#5324=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_60','Patination oils',#5283,$,$);
+#5325=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_61','Polysiloxane coatings',#5283,$,$);
+#5326=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_62','Polymer resin waterproof coatings',#5283,$,$);
+#5327=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_63','Polyester resin waterproof coatings',#5283,$,$);
+#5328=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_64','Polyurethane (PUR) waterproof coatings',#5283,$,$);
+#5329=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_65','Polyvinylidene fluoride (PVDF) coatings',#5283,$,$);
+#5330=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_66','Powder coatings',#5283,$,$);
+#5331=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_69','Red oxide paints',#5283,$,$);
+#5332=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_70','Resin floor coatings',#5283,$,$);
+#5333=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_72','Sacrificial anti-corrosion coatings',#5283,$,$);
+#5334=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_74','Sherardized coatings',#5283,$,$);
+#5335=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_75','Silver plating',#5283,$,$);
+#5336=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_79','Sprayed monolithic coating finishing coats',#5283,$,$);
+#5337=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_80','Solvent-free waterproof coatings',#5283,$,$);
+#5338=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_81','Solar reflective coatings',#5283,$,$);
+#5339=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_82','Solar reflective anti-corrosion coatings',#5283,$,$);
+#5340=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_83','Spray-applied fireproof coatings',#5283,$,$);
+#5341=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_84','Spray-applied thermal insulation',#5283,$,$);
+#5342=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_85','Steel fence powder coatings',#5283,$,$);
+#5343=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_86','Surface preservation products',#5283,$,$);
+#5344=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_87','Tar-based black coatings',#5283,$,$);
+#5345=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_88','Thermoplastic block copolymer waterproof coatings',#5283,$,$);
+#5346=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_96','Water-dispersible polymer waterproof coatings',#5283,$,$);
+#5347=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_97','Water repellents',#5283,$,$);
+#5348=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_98','Yacht varnishes',#5283,$,$);
+#5349=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_68_99','Zinc plating',#5283,$,$);
+#5350=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77','Surface sealers',#5082,$,$);
+#5351=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_05','Anti-graffiti sealers',#5350,$,$);
+#5352=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_08','Bitumen-based impregnating sealers',#5350,$,$);
+#5353=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_12','Cement-based screed surface sealers',#5350,$,$);
+#5354=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_15','Concrete sealers',#5350,$,$);
+#5355=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_16','Cork flooring sealers',#5350,$,$);
+#5356=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_24','Dry shake finish sealers',#5350,$,$);
+#5357=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_25','Dustproofing sealers',#5350,$,$);
+#5358=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_30','Floor surface sealers',#5350,$,$);
+#5359=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_42','Intumescent coating sealers',#5350,$,$);
+#5360=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_46','Liquid-applied membranes',#5350,$,$);
+#5361=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_50','Mastic asphalt (MA) oil-resistant sealers',#5350,$,$);
+#5362=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_60','Paving sealers and stabilizers',#5350,$,$);
+#5363=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_72','Resin floor sealers',#5350,$,$);
+#5364=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_76','Sealers',#5350,$,$);
+#5365=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_84','Sprayed monolithic coating sealers',#5350,$,$);
+#5366=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_92','Ultraviolet (UV)-resistant sealers',#5350,$,$);
+#5367=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_77_96','Wood floor sealers',#5350,$,$);
+#5368=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85','Specialist coatings',#5082,$,$);
+#5369=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_02','Acoustic chute coatings',#5368,$,$);
+#5370=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_03','Anti-climb paints',#5368,$,$);
+#5371=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_04','Anti-slip floor coatings',#5368,$,$);
+#5372=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_05','Anti-static carpet treatments',#5368,$,$);
+#5373=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_13','Chlorinated rubber road markings',#5368,$,$);
+#5374=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_21','Damp-proof coatings',#5368,$,$);
+#5375=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_24','Dry rot paints',#5368,$,$);
+#5376=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_26','Elastomeric paints',#5368,$,$);
+#5377=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_27','Epoxy paint road markings',#5368,$,$);
+#5378=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_29','Fluorescent paints',#5368,$,$);
+#5379=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_35','Gilding leaf',#5368,$,$);
+#5380=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_36','Gilding size',#5368,$,$);
+#5381=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_46','Light-duty road markings',#5368,$,$);
+#5382=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_47','Line marking paints',#5368,$,$);
+#5383=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_48','Luminous paints',#5368,$,$);
+#5384=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_51','Metallic wear-resistant, low-friction coatings',#5368,$,$);
+#5385=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_60','Phosphorescent paints',#5368,$,$);
+#5386=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_61','Polyurethane resin-based paint',#5368,$,$);
+#5387=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_62','Polyurethane (PUR) rubber spray surfaces',#5368,$,$);
+#5388=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_65','Preformed road markings',#5368,$,$);
+#5389=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_70','Radiator enamels',#5368,$,$);
+#5390=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_72','Reflective coatings',#5368,$,$);
+#5391=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_76','Self-cleaning coatings',#5368,$,$);
+#5392=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_78','Slip plane bituminous emulsion paints',#5368,$,$);
+#5393=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_80','Slip-resistant surface treatments',#5368,$,$);
+#5394=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_81','Sound damping coatings',#5368,$,$);
+#5395=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_82','Surface hardeners',#5368,$,$);
+#5396=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_88','Thermoplastic line markings',#5368,$,$);
+#5397=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_90','Thermoplastic road markings',#5368,$,$);
+#5398=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_94','Vitreous enamels',#5368,$,$);
+#5399=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_96','Waterborne resin coatings',#5368,$,$);
+#5400=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_97','Wear and abrasion-resistant coating',#5368,$,$);
+#5401=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_85_98','Wearing surface dry shake materials',#5368,$,$);
+#5402=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_95','Wood stains, dyes and oils',#5082,$,$);
+#5403=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_95_96','Wood dyes',#5402,$,$);
+#5404=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_95_97','Wood oils',#5402,$,$);
+#5405=IFCCLASSIFICATIONREFERENCE($,'Pr_35_31_95_98','Wood stains',#5402,$,$);
+#5406=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57','Non-rigid sheet, mat and strip covering and finish products',#5081,$,$);
+#5407=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11','Carpets, carpet tiles, coverings, underlays and mats',#5406,$,$);
+#5408=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_05','Axminster carpets',#5407,$,$);
+#5409=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_07','Bonded carpets',#5407,$,$);
+#5410=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_08','Bonded carpet tiles',#5407,$,$);
+#5411=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_11','Cellular plastics underlays',#5407,$,$);
+#5412=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_13','Cellular rubber underlays',#5407,$,$);
+#5413=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_15','Combined fibrous or non-fibrous underlays',#5407,$,$);
+#5414=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_24','Dry felt paper interlays',#5407,$,$);
+#5415=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_26','Entrance mats',#5407,$,$);
+#5416=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_27','Ethylene propylene diene monomer (EPDM) rubber mats',#5407,$,$);
+#5417=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_28','Exercise mats',#5407,$,$);
+#5418=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_29','Flat-needled carpet tiles',#5407,$,$);
+#5419=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_30','Flat-needled carpets',#5407,$,$);
+#5420=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_31','Flocked carpets',#5407,$,$);
+#5421=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_36','Hessian-faced cork underlays',#5407,$,$);
+#5422=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_40','Impregnated fibrous underlays',#5407,$,$);
+#5423=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_45','Knitted carpets',#5407,$,$);
+#5424=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_46','Loose-laid cushion matting',#5407,$,$);
+#5425=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_47','Loose-laid fatigue matting',#5407,$,$);
+#5426=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_49','Loose-laid matting',#5407,$,$);
+#5427=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_56','Needled felt underlays',#5407,$,$);
+#5428=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_57','Needled pile carpet tiles',#5407,$,$);
+#5429=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_58','Needled pile carpets',#5407,$,$);
+#5430=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_62','Pile carpet tiles',#5407,$,$);
+#5431=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_64','Pile carpets',#5407,$,$);
+#5432=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_66','Polybutyl teraphthalate (PBT) bristle mats',#5407,$,$);
+#5433=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_68','Polyvinyl chloride (PVC) bristle mats',#5407,$,$);
+#5434=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_70','Recycled polyethylene terephthalate (PET) plastics underlays',#5407,$,$);
+#5435=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_72','Reed mats',#5407,$,$);
+#5436=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_74','Rubber crumb underlays',#5407,$,$);
+#5437=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_85','Synthetic grass surfaces',#5407,$,$);
+#5438=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_91','Tufted carpets',#5407,$,$);
+#5439=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_11_97','Wilton carpets',#5407,$,$);
+#5440=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_15','Composite surfacing and underlay products',#5406,$,$);
+#5441=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_15_40','In situ polymer shock absorption layers',#5440,$,$);
+#5442=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_15_42','Interlocking shock absorption panels',#5440,$,$);
+#5443=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_15_75','Sand enveloped shock absorption layers',#5440,$,$);
+#5444=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_15_80','Sheet format shock absorption layers',#5440,$,$);
+#5445=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22','Decorative papers and roll coverings',#5406,$,$);
+#5446=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_08','Wallcovering borders',#5445,$,$);
+#5447=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_15','Cork roll coverings',#5445,$,$);
+#5448=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_21','Decorative laminated papers',#5445,$,$);
+#5449=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_38','Heavy-duty roll coverings',#5445,$,$);
+#5450=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_42','Ingrain roll coverings',#5445,$,$);
+#5451=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_46','Linen-backed lining papers',#5445,$,$);
+#5452=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_48','Lining papers',#5445,$,$);
+#5453=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_51','Metal foil roll coverings',#5445,$,$);
+#5454=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_52','Metallic effect roll coverings',#5445,$,$);
+#5455=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_53','Metallized roll coverings',#5445,$,$);
+#5456=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_54','Mural roll coverings',#5445,$,$);
+#5457=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_58','Non-woven lining papers',#5445,$,$);
+#5458=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_60','Paper roll coverings',#5445,$,$);
+#5459=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_72','Relief roll coverings',#5445,$,$);
+#5460=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_88','Textile roll coverings',#5445,$,$);
+#5461=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_90','Textured effect roll coverings',#5445,$,$);
+#5462=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_22_95','Vinyl roll coverings',#5445,$,$);
+#5463=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71','Resilient floor coverings',#5406,$,$);
+#5464=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_02','Agglomerated composition cork tiles',#5463,$,$);
+#5465=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_04','Agglomerated composition cork tiles with polyvinyl chloride (PVC) wearing layer',#5463,$,$);
+#5466=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_12','Composite sheets',#5463,$,$);
+#5467=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_13','Composite rubber tiles',#5463,$,$);
+#5468=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_14','Composite tiles',#5463,$,$);
+#5469=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_15','Cork linoleum (cork carpet) sheets',#5463,$,$);
+#5470=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_17','Cork-backed linoleum sheets',#5463,$,$);
+#5471=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_19','Cork-backed polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5472=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_20','Cork-backed polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5473=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_22','Cork sheets',#5463,$,$);
+#5474=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_23','Cork tiles',#5463,$,$);
+#5475=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_25','Ethylene propylene diene monomer (EPDM) rubber tiles',#5463,$,$);
+#5476=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_26','Expanded (cushioned) polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5477=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_27','Expanded (cushioned) polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5478=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_28','Filled fibrous-backed polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5479=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_30','Floor surface coating resins',#5463,$,$);
+#5480=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_31','Foam-backed linoleum sheets',#5463,$,$);
+#5481=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_32','Foam-backed polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5482=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_33','Foam-backed polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5483=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_34','Foam-backed smooth rubber sheets',#5463,$,$);
+#5484=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_35','Granular rubber sheets',#5463,$,$);
+#5485=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_36','Granular rubber tiles',#5463,$,$);
+#5486=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_37','Hammered rubber tiles',#5463,$,$);
+#5487=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_41','Interlocking laminate floor tiles',#5463,$,$);
+#5488=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_43','Jute or polyester felt-backed polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5489=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_44','Jute or polyester felt-backed polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5490=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_46','Linoleum sheets',#5463,$,$);
+#5491=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_47','Linoleum composite laminate strips and boards',#5463,$,$);
+#5492=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_49','Linoleum tiles',#5463,$,$);
+#5493=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_53','Modular multilayer floor tiles',#5463,$,$);
+#5494=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_60','Particle-based enhanced wet area polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5495=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_61','Particle-based enhanced slip-resistant polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5496=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_62','Particle-based enhanced slip-resistant polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5497=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_67','Polyvinyl chloride (PVC) sheets',#5463,$,$);
+#5498=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_68','Polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5499=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_72','Relief rubber sheets',#5463,$,$);
+#5500=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_73','Relief rubber tiles',#5463,$,$);
+#5501=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_74','Rubber mats and sheets',#5463,$,$);
+#5502=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_75','Rubber tiles',#5463,$,$);
+#5503=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_76','Semi-flexible polyvinyl chloride (PVC) tiles',#5463,$,$);
+#5504=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_80','Smooth rubber sheets',#5463,$,$);
+#5505=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_84','Smooth rubber tiles',#5463,$,$);
+#5506=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_86','Solid rubber sheets',#5463,$,$);
+#5507=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_87','Stabilizing underlays',#5463,$,$);
+#5508=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_88','Stone plastic composite (SPC) strips and boards',#5463,$,$);
+#5509=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_90','Synthetic thermoplastic polymer sheets',#5463,$,$);
+#5510=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_71_91','Synthetic thermoplastic polymer tiles',#5463,$,$);
+#5511=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88','Textiles',#5406,$,$);
+#5512=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88_02','Acoustic textiles',#5511,$,$);
+#5513=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88_16','Cotton textiles',#5511,$,$);
+#5514=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88_46','Linen textiles',#5511,$,$);
+#5515=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88_97','Woollen textiles',#5511,$,$);
+#5516=IFCCLASSIFICATIONREFERENCE($,'Pr_35_57_88_98','Wool-nylon textiles',#5511,$,$);
+#5517=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90','Trim products',#5081,$,$);
+#5518=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07','Beads, stops and fillets',#5517,$,$);
+#5519=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_04','Angle fillets',#5518,$,$);
+#5520=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_08','Bitumen-impregnated fibreboard fillets',#5518,$,$);
+#5521=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_15','Copper cames',#5518,$,$);
+#5522=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_24','Dry lining beads',#5518,$,$);
+#5523=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_33','Glazing beads',#5518,$,$);
+#5524=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_47','Lead cames',#5518,$,$);
+#5525=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_63','Plaster beads',#5518,$,$);
+#5526=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_72','Render beads',#5518,$,$);
+#5527=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_73','Render stops',#5518,$,$);
+#5528=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_88','Thin-coat plaster beads',#5518,$,$);
+#5529=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_07_89','Timber fillets',#5518,$,$);
+#5530=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09','Bridge expansion and movement joints',#5517,$,$);
+#5531=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09_11','Cantilever expansion comb or tooth joints',#5530,$,$);
+#5532=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09_27','Elastomeric expansion joint in metal runners',#5530,$,$);
+#5533=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09_28','Elastomeric pads',#5530,$,$);
+#5534=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09_71','Reinforced elastomeric expansion joints',#5530,$,$);
+#5535=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_09_85','Supported expansion joints',#5530,$,$);
+#5536=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15','Concrete construction joint accessories',#5517,$,$);
+#5537=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_04','Armoured joints',#5536,$,$);
+#5538=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_08','Bottom-of-slab plastics crack inducers',#5536,$,$);
+#5539=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_11','Carbon steel arris armourings',#5536,$,$);
+#5540=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_12','Carbon steel shear load connectors',#5536,$,$);
+#5541=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_13','Carbon steel strip crack inducers',#5536,$,$);
+#5542=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_14','Centrally placed rubber flexible waterstops',#5536,$,$);
+#5543=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_15','Centrally placed polyvinyl chloride (PVC) elastomer flexible waterstops',#5536,$,$);
+#5544=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_16','Centrally placed unplasticized polyvinyl chloride (PVC-U) flexible waterstops',#5536,$,$);
+#5545=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_19','Coated metal waterstops',#5536,$,$);
+#5546=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_37','Headed stud shear connectors',#5536,$,$);
+#5547=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_42','Injectable hose waterstops',#5536,$,$);
+#5548=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_48','Loop connectors',#5536,$,$);
+#5549=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_63','Plastics strip crack inducers',#5536,$,$);
+#5550=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_72','Rubber flexible waterstops',#5536,$,$);
+#5551=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_74','Rubber hydrophilic waterstops',#5536,$,$);
+#5552=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_77','Shrinkage tube crack inducers',#5536,$,$);
+#5553=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_82','Stainless steel arris armourings',#5536,$,$);
+#5554=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_83','Stainless steel shear load connectors',#5536,$,$);
+#5555=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_84','Stainless steel strip crack inducers',#5536,$,$);
+#5556=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_85','Surface-mounted polyvinyl chloride (PVC) flexible waterstops',#5536,$,$);
+#5557=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_86','Synthetic elastomer hydrophilic waterstops',#5536,$,$);
+#5558=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_88','Thermal break shear load connectors',#5536,$,$);
+#5559=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_15_89','Thermal break connection plates',#5536,$,$);
+#5560=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22','Dividing and edge strips',#5517,$,$);
+#5561=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_36','Hardwood edgings',#5560,$,$);
+#5562=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_51','Metal angle edgings',#5560,$,$);
+#5563=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_52','Metal edgings',#5560,$,$);
+#5564=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_63','Plastics edgings',#5560,$,$);
+#5565=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_66','Preformed tiling strip joints',#5560,$,$);
+#5566=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_72','Recycled plastics edgings',#5560,$,$);
+#5567=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_80','Softwood edgings',#5560,$,$);
+#5568=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_22_88','Timber edgings',#5560,$,$);
+#5569=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27','Expansion joints',#5517,$,$);
+#5570=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27_11','Chloroprene and aluminium expansion joints',#5569,$,$);
+#5571=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27_12','Chloroprene and copper expansion joints',#5569,$,$);
+#5572=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27_13','Chloroprene and lead expansion joints',#5569,$,$);
+#5573=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27_14','Chloroprene and stainless steel expansion joints',#5569,$,$);
+#5574=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_27_15','Chloroprene and zinc expansion joints',#5569,$,$);
+#5575=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28','External trims and sills',#5517,$,$);
+#5576=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_02','Aluminium fascias',#5575,$,$);
+#5577=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_04','Anti-climb security devices',#5575,$,$);
+#5578=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_11','Carbon steel fascias',#5575,$,$);
+#5579=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_15','Cover caps',#5575,$,$);
+#5580=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_23','Double-skin glass fibre-reinforced plastics (GRP) components',#5575,$,$);
+#5581=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_32','Glass fibre-reinforced plastics (GRP) facade components',#5575,$,$);
+#5582=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_33','Glass fibre-reinforced plastics (GRP) roof components',#5575,$,$);
+#5583=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_36','Hardwood copings',#5575,$,$);
+#5584=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_50','Membrane standing seam profiles',#5575,$,$);
+#5585=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_51','Metal drip trims',#5575,$,$);
+#5586=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_52','Metal finishing trims',#5575,$,$);
+#5587=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_62','Plastics and composite material trim boards',#5575,$,$);
+#5588=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_64','Polyvinyl chloride (PVC) standing seam profiles',#5575,$,$);
+#5589=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_72','Roof membrane perimeter trims',#5575,$,$);
+#5590=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_76','Single skin ribbed glass',#5575,$,$);
+#5591=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_79','Softwood copings',#5575,$,$);
+#5592=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_82','Stainless steel cappings and copings',#5575,$,$);
+#5593=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_83','Stainless steel fascias',#5575,$,$);
+#5594=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_84','Stainless steel undersills',#5575,$,$);
+#5595=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_92','Unplasticized polyvinyl chloride (PVC-U) finishing trims',#5575,$,$);
+#5596=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_93','Unplasticized polyvinyl chloride (PVC-U) sills',#5575,$,$);
+#5597=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_95','Window sill boards',#5575,$,$);
+#5598=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_96','Wood finishing trims',#5575,$,$);
+#5599=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_28_97','Wood trim boards',#5575,$,$);
+#5600=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30','Flashings',#5517,$,$);
+#5601=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_01','Aluminium flashings',#5600,$,$);
+#5602=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_08','Bitumen-based flashings',#5600,$,$);
+#5603=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_11','Carbon steel flashings',#5600,$,$);
+#5604=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_15','Copper flashings',#5600,$,$);
+#5605=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_18','Copper slates',#5600,$,$);
+#5606=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_33','Galvanized steel flashings',#5600,$,$);
+#5607=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_34','Glass fibre-reinforced plastics (GRP) flashings',#5600,$,$);
+#5608=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_46','Lead flashings',#5600,$,$);
+#5609=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_47','Lead slates',#5600,$,$);
+#5610=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_64','Polyethylene (PE)-based flashings',#5600,$,$);
+#5611=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_72','Recycled plastics flashings',#5600,$,$);
+#5612=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_83','Stainless steel flashings',#5600,$,$);
+#5613=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_30_99','Zinc flashings',#5600,$,$);
+#5614=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31','Floor and stair trims',#5517,$,$);
+#5615=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_11','Carpet grippers',#5614,$,$);
+#5616=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_12','Carpet gripper strips',#5614,$,$);
+#5617=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_26','Flexible polyvinyl chloride (PVC) stair nosings',#5614,$,$);
+#5618=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_27','Flexible stair coverings',#5614,$,$);
+#5619=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_28','Floor construction joint trims',#5614,$,$);
+#5620=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_29','Floor cover strips',#5614,$,$);
+#5621=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_30','Floor dividing strips',#5614,$,$);
+#5622=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_31','Floor edge trims',#5614,$,$);
+#5623=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_32','Floor edging strips',#5614,$,$);
+#5624=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_33','Floor threshold strips',#5614,$,$);
+#5625=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_36','Hardwood floor threshold strips',#5614,$,$);
+#5626=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_37','Hardwood stair trims',#5614,$,$);
+#5627=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_50','Mat well frames',#5614,$,$);
+#5628=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_58','One-part floor transition strips',#5614,$,$);
+#5629=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_66','Preformed strip joints to screeds',#5614,$,$);
+#5630=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_70','Radiator pipe floor covers',#5614,$,$);
+#5631=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_71','Raised access floor level-change trims',#5614,$,$);
+#5632=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_72','Raised access floor vertical edging panels',#5614,$,$);
+#5633=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_73','Render-grade resin coves',#5614,$,$);
+#5634=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_74','Rigid stair nosings',#5614,$,$);
+#5635=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_75','Rubber composite stair nosing inserts',#5614,$,$);
+#5636=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_83','Stair rods',#5614,$,$);
+#5637=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_84','Stair trims',#5614,$,$);
+#5638=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_90','Two-part floor transition strips',#5614,$,$);
+#5639=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_95','Wearing screed sawn-joint sealing strips',#5614,$,$);
+#5640=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_96','Wood-based floor threshold strips',#5614,$,$);
+#5641=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_31_97','Wood-based floor transition strips',#5614,$,$);
+#5642=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33','Gaskets, weatherstrips and baffles',#5517,$,$);
+#5643=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_12','Cellular rubber gaskets',#5642,$,$);
+#5644=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_20','Curtain wall glazing and panel gaskets',#5642,$,$);
+#5645=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_22','Door and window weatherstrips and seals',#5642,$,$);
+#5646=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_23','Door threshold weatherstrips and seals',#5642,$,$);
+#5647=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_24','Ethylene propylene diene monomer (EPDM) combined hydrophilic gaskets',#5642,$,$);
+#5648=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_25','Ethylene propylene diene monomer (EPDM) gaskets',#5642,$,$);
+#5649=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_26','Ethylene propylene diene monomer (EPDM) rubber section glazing trims',#5642,$,$);
+#5650=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_28','Extruded polyvinyl chloride (PVC) glazing gaskets',#5642,$,$);
+#5651=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_34','Glass fibre-reinforced plastics (GRP) cladding neoprene gaskets',#5642,$,$);
+#5652=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_39','Hydrophilic gaskets',#5642,$,$);
+#5653=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_56','Neoprene baffles',#5642,$,$);
+#5654=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_57','Non-cellular rubber gaskets',#5642,$,$);
+#5655=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_64','Polypropylene baffles',#5642,$,$);
+#5656=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_66','Preformed butyl strip glazing trims',#5642,$,$);
+#5657=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_77','Single-sided glazing gaskets',#5642,$,$);
+#5658=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_84','Stainless steel baffles',#5642,$,$);
+#5659=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_86','Synthetic rubber glazing gaskets',#5642,$,$);
+#5660=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_97','Weatherstripping',#5642,$,$);
+#5661=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_33_99','Zipper gaskets',#5642,$,$);
+#5662=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43','Interior wall and ceiling trims',#5517,$,$);
+#5663=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_02','Aluminium skirtings',#5662,$,$);
+#5664=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_03','Angle trims',#5662,$,$);
+#5665=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_04','Arrises',#5662,$,$);
+#5666=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_12','Ceiling perimeter trims',#5662,$,$);
+#5667=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_13','Column guards',#5662,$,$);
+#5668=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_14','Cork cove skirtings',#5662,$,$);
+#5669=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_15','Corner guards',#5662,$,$);
+#5670=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_16','Cover strips',#5662,$,$);
+#5671=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_17','Coves',#5662,$,$);
+#5672=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_18','Composite protection rails',#5662,$,$);
+#5673=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_20','Door protection panels',#5662,$,$);
+#5674=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_21','Edge battens',#5662,$,$);
+#5675=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_22','Edge trims',#5662,$,$);
+#5676=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_29','Fibrous plaster mouldings',#5662,$,$);
+#5677=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_30','Fire-insulating caps',#5662,$,$);
+#5678=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_36','High-density fibreboard (HDF) skirtings',#5662,$,$);
+#5679=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_42','Intumescent protective castings',#5662,$,$);
+#5680=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_47','Lighting cornices',#5662,$,$);
+#5681=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_48','Medium-density fibreboard (MDF) architraves',#5662,$,$);
+#5682=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_49','Medium-density fibreboard (MDF) backboards',#5662,$,$);
+#5683=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_50','Medium-density fibreboard (MDF) cover strips',#5662,$,$);
+#5684=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_51','Medium-density fibreboard (MDF) dado rails',#5662,$,$);
+#5685=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_52','Medium-density fibreboard (MDF) edge trims',#5662,$,$);
+#5686=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_53','Medium-density fibreboard (MDF) lining boards',#5662,$,$);
+#5687=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_54','Medium-density fibreboard (MDF) mouldings and trims',#5662,$,$);
+#5688=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_55','Medium-density fibreboard (MDF) mounting battens',#5662,$,$);
+#5689=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_56','Medium-density fibreboard (MDF) picture rails',#5662,$,$);
+#5690=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_57','Medium-density fibreboard (MDF) protection rails',#5662,$,$);
+#5691=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_58','Medium-density fibreboard (MDF) skirtings',#5662,$,$);
+#5692=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_59','Metal skirtings',#5662,$,$);
+#5693=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_60','Panel partition closer pieces',#5662,$,$);
+#5694=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_61','Pilasters',#5662,$,$);
+#5695=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_62','Plaster cornices',#5662,$,$);
+#5696=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_63','Plastics skirtings',#5662,$,$);
+#5697=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_64','Polyvinyl chloride (PVC) cove skirtings',#5662,$,$);
+#5698=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_65','Plastics protection rails',#5662,$,$);
+#5699=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_66','Preformed casings',#5662,$,$);
+#5700=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_67','Preformed plasterboard cornices',#5662,$,$);
+#5701=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_70','Radiator guards',#5662,$,$);
+#5702=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_74','Rubber cove skirtings',#5662,$,$);
+#5703=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_76','Rubber protection rails',#5662,$,$);
+#5704=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_83','Stainless steel protection rails',#5662,$,$);
+#5705=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_84','Solid cast plaster mouldings',#5662,$,$);
+#5706=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_85','Stainless steel skirtings',#5662,$,$);
+#5707=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_86','Wall protection panels',#5662,$,$);
+#5708=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_87','Wood architraves',#5662,$,$);
+#5709=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_88','Wood backboards',#5662,$,$);
+#5710=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_89','Wood cover strips',#5662,$,$);
+#5711=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_90','Wood dado rails',#5662,$,$);
+#5712=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_91','Wood edge trims',#5662,$,$);
+#5713=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_92','Wood fillets',#5662,$,$);
+#5714=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_93','Wood lining boards',#5662,$,$);
+#5715=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_94','Wood mouldings and trims',#5662,$,$);
+#5716=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_95','Wood mounting battens',#5662,$,$);
+#5717=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_96','Wood picture rails',#5662,$,$);
+#5718=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_97','Wood protection rails',#5662,$,$);
+#5719=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_43_98','Wood skirtings',#5662,$,$);
+#5720=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50','Masonry walling ancillary products',#5517,$,$);
+#5721=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_03','Airbricks',#5720,$,$);
+#5722=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_11','Cavity spacers',#5720,$,$);
+#5723=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_61','Perpend joint plastics cavity ventilators',#5720,$,$);
+#5724=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_62','Perpend joint plastics weep holes',#5720,$,$);
+#5725=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_63','Perpend joint metal weep holes',#5720,$,$);
+#5726=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_64','Plastics cavity closers',#5720,$,$);
+#5727=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_50_88','Tile creasings',#5720,$,$);
+#5728=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53','Movement joints',#5517,$,$);
+#5729=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_11','Cast-in screed movement joints',#5728,$,$);
+#5730=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_30','Fibre-cement movement joints',#5728,$,$);
+#5731=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_42','Insulated render system construction and movement joints',#5728,$,$);
+#5732=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_50','Mastic asphalt (MA) movement joints',#5728,$,$);
+#5733=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_52','Metal movement joint edging angles',#5728,$,$);
+#5734=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_53','Metal section movement joints',#5728,$,$);
+#5735=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_54','Minor flat roofing movement joints',#5728,$,$);
+#5736=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_72','Resin flooring strip movement joints',#5728,$,$);
+#5737=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_85','Sprayed monolithic coating movement joints',#5728,$,$);
+#5738=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_86','Strip movement joints',#5728,$,$);
+#5739=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_88','Timber flooring movement joints',#5728,$,$);
+#5740=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_53_93','Unplasticized polyvinyl chloride (PVC-U) external render and plaster movement joints',#5728,$,$);
+#5741=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60','Paving studs and inserts',#5517,$,$);
+#5742=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_22','Demarcation inserts',#5741,$,$);
+#5743=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_41','Illuminated road studs',#5741,$,$);
+#5744=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_57','Non-reflecting road studs',#5741,$,$);
+#5745=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_62','Pedestrian delineation road studs',#5741,$,$);
+#5746=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_71','Retroreflecting road studs',#5741,$,$);
+#5747=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_77','Skateboard deterrent devices',#5741,$,$);
+#5748=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_78','Slip-resistant cast inserts',#5741,$,$);
+#5749=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_79','Slip-resistant rebate inserts',#5741,$,$);
+#5750=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_60_87','Tactile paving studs',#5741,$,$);
+#5751=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87','Tapes, strips and profile fillers',#5517,$,$);
+#5752=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_01','Acrylic adhesive fixing tapes',#5751,$,$);
+#5753=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_02','Acrylic adhesive sealant tapes',#5751,$,$);
+#5754=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_03','Aluminium conductor tapes',#5751,$,$);
+#5755=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_04','Aluminium foil tapes',#5751,$,$);
+#5756=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_05','Aerogel insulation strips',#5751,$,$);
+#5757=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_07','Butyl rubber adhesive tapes',#5751,$,$);
+#5758=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_08','Butyl rubber preformed strips',#5751,$,$);
+#5759=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_09','Butyl rubber sealant tapes',#5751,$,$);
+#5760=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_10','Butyl rubber fleece tapes',#5751,$,$);
+#5761=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_15','Copper conductor tapes',#5751,$,$);
+#5762=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_23','Double-sided tape damp-proof course joint sealers',#5751,$,$);
+#5763=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_25','Ethylene propylene diene monomer (EPDM)-coated expanded polyethylene (PE) foam profile fillers',#5751,$,$);
+#5764=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_26','Expanded polyethylene (PE) foam profile fillers',#5751,$,$);
+#5765=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_27','Expanded polyethylene (PE) foam strips',#5751,$,$);
+#5766=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_28','Expanded polystyrene (EPS) foam strips',#5751,$,$);
+#5767=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_30','Fire-resistant tapes',#5751,$,$);
+#5768=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_31','Flash tapes',#5751,$,$);
+#5769=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_32','Flexible polyolefin waterproofing tapes',#5751,$,$);
+#5770=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_34','Glass fibre mesh repair tapes',#5751,$,$);
+#5771=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_37','Heat-bonded carpet tapes',#5751,$,$);
+#5772=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_40','Insulating strips',#5751,$,$);
+#5773=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_41','Intumescent tapes',#5751,$,$);
+#5774=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_42','Isolating tapes',#5751,$,$);
+#5775=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_50','Magnetic adhesive-backed tapes',#5751,$,$);
+#5776=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_52','Metal strip-reinforced paper tapes',#5751,$,$);
+#5777=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_54','Mineral fibre profile fillers',#5751,$,$);
+#5778=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_56','Non-impregnated foam glazing tapes',#5751,$,$);
+#5779=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_60','Paper jointing tapes',#5751,$,$);
+#5780=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_64','Polyethylene (PE) debonding tapes',#5751,$,$);
+#5781=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_66','Polytetrafluoroethylene (PTFE) tapes',#5751,$,$);
+#5782=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_67','Preformed butyl shim glazing tapes',#5751,$,$);
+#5783=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_68','Polymer-based adhesive fixing tapes',#5751,$,$);
+#5784=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_69','Polymer-based adhesive sealant tapes',#5751,$,$);
+#5785=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_70','Polyvinyl chloride (PVC) waterproofing tapes',#5751,$,$);
+#5786=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_71','Resin-impregnated precompressed foam sealing strips',#5751,$,$);
+#5787=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_72','Retroreflective self-adhesive tapes',#5751,$,$);
+#5788=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_77','Self-adhesive bitumen tapes',#5751,$,$);
+#5789=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_78','Self-adhesive sports marking tapes',#5751,$,$);
+#5790=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_84','Structural glazing tapes',#5751,$,$);
+#5791=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_85','Synthetic closed cell foam rubber profile fillers',#5751,$,$);
+#5792=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_86','Synthetic rubber strips',#5751,$,$);
+#5793=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_97','Water polo field marking lines',#5751,$,$);
+#5794=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_87_98','Woven glass fibre fabric strips',#5751,$,$);
+#5795=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93','Unit roofing fittings',#5517,$,$);
+#5796=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_07','Bitumen membrane shingle cappings',#5795,$,$);
+#5797=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_12','Clay tile hip fittings',#5795,$,$);
+#5798=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_13','Clay tile ridge fittings',#5795,$,$);
+#5799=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_14','Clay tile roof slope ventilation fittings',#5795,$,$);
+#5800=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_15','Clay tile valley fittings',#5795,$,$);
+#5801=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_16','Clay tile verge fittings',#5795,$,$);
+#5802=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_19','Concrete tile hip fittings',#5795,$,$);
+#5803=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_21','Concrete tile ridge fittings',#5795,$,$);
+#5804=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_22','Concrete tile roof slope ventilation fittings',#5795,$,$);
+#5805=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_23','Concrete tile valley fittings',#5795,$,$);
+#5806=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_24','Concrete tile verge fittings',#5795,$,$);
+#5807=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_26','Dentil slips',#5795,$,$);
+#5808=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_27','Dry fixing abutments',#5795,$,$);
+#5809=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_28','Dry fixing hips',#5795,$,$);
+#5810=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_29','Dry fixing ridges',#5795,$,$);
+#5811=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_30','Dry fixing verges',#5795,$,$);
+#5812=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_32','Fibre-cement slate hip fittings',#5795,$,$);
+#5813=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_33','Fibre-cement slate ridge fittings',#5795,$,$);
+#5814=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_34','Fibre-cement slate roof slope ventilation fittings',#5795,$,$);
+#5815=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_35','Fibre-cement slate verge fittings',#5795,$,$);
+#5816=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_51','Metal tile hip fittings',#5795,$,$);
+#5817=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_52','Metal tile ridge fittings',#5795,$,$);
+#5818=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_53','Metal tile verge fittings',#5795,$,$);
+#5819=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_72','Reconstituted slate roof slope ventilation fittings',#5795,$,$);
+#5820=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_96','Wood shake fittings',#5795,$,$);
+#5821=IFCCLASSIFICATIONREFERENCE($,'Pr_35_90_93_97','Wood shingle fittings',#5795,$,$);
+#5822=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93','Unit covering and finish products',#5081,$,$);
+#5823=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13','Ceiling infill units',#5822,$,$);
+#5824=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_13','Cement-bonded wood wool infill units',#5823,$,$);
+#5825=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_15','Coffered ceiling infill units',#5823,$,$);
+#5826=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_30','Fibre-reinforced gypsum infill units',#5823,$,$);
+#5827=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_51','Metal infill units',#5823,$,$);
+#5828=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_53','Mineral fibre infill units',#5823,$,$);
+#5829=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_58','Open cell infill units',#5823,$,$);
+#5830=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_61','Panel diffuser infill units',#5823,$,$);
+#5831=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_65','Profiled metal acoustic panels',#5823,$,$);
+#5832=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_71','Resin-bonded mineral wool infill units',#5823,$,$);
+#5833=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_73','Rigid urethane foam infill units',#5823,$,$);
+#5834=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_80','Sound attenuator infill units',#5823,$,$);
+#5835=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_13_94','Veneered wood composite infill units',#5823,$,$);
+#5836=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96','Wall and floor tile units',#5822,$,$);
+#5837=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_10','Cast stone slabs',#5836,$,$);
+#5838=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_11','Cast stone tiles',#5836,$,$);
+#5839=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_12','Ceramic tile angle beads',#5836,$,$);
+#5840=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_13','Ceramic tile borders',#5836,$,$);
+#5841=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_14','Ceramic tile cove skirtings',#5836,$,$);
+#5842=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_15','Ceramic tile floor channels',#5836,$,$);
+#5843=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_16','Ceramic tile round edges',#5836,$,$);
+#5844=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_17','Ceramic tile sit-on skirtings',#5836,$,$);
+#5845=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_18','Ceramic tile step treads',#5836,$,$);
+#5846=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_19','Ceramic tiles',#5836,$,$);
+#5847=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_21','Concrete tiles',#5836,$,$);
+#5848=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_34','Graphic-printed porcelain tiles',#5836,$,$);
+#5849=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_53','Mosaic tiles',#5836,$,$);
+#5850=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_56','Natural stone wall and floor slabs',#5836,$,$);
+#5851=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_57','Natural stone tiles',#5836,$,$);
+#5852=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_63','Porcelain tiles',#5836,$,$);
+#5853=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_66','Quarry tile borders',#5836,$,$);
+#5854=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_67','Quarry tile cove skirtings',#5836,$,$);
+#5855=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_68','Quarry tile floor channels',#5836,$,$);
+#5856=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_70','Quarry tile sit-on skirtings',#5836,$,$);
+#5857=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_71','Quarry tile step treads',#5836,$,$);
+#5858=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_72','Quarry tiles',#5836,$,$);
+#5859=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_85','Stone slabs',#5836,$,$);
+#5860=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_86','Stone tiles',#5836,$,$);
+#5861=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_87','Tile matting',#5836,$,$);
+#5862=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_88','Terrazzo precast units',#5836,$,$);
+#5863=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_89','Terrazzo tile skirtings',#5836,$,$);
+#5864=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_90','Terrazzo tiles',#5836,$,$);
+#5865=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_96_92','Tile spacers',#5836,$,$);
+#5866=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_97','Wood block units',#5822,$,$);
+#5867=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_97_15','Composition blocks',#5866,$,$);
+#5868=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_97_52','Mosaic panels',#5866,$,$);
+#5869=IFCCLASSIFICATIONREFERENCE($,'Pr_35_93_97_96','Wood blocks',#5866,$,$);
+#5870=IFCCLASSIFICATIONREFERENCE($,'Pr_40','Signage, sanitary fittings and fittings, furnishing and equipment (FF&E) products',#8,$,$);
+#5871=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10','Signage products',#5870,$,$);
+#5872=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57','Services notices, identification and labels',#5871,$,$);
+#5873=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_10','Burnt clay warning marker tiles',#5872,$,$);
+#5874=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_12','Cable marker tags',#5872,$,$);
+#5875=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_15','Concrete warning marker tiles',#5872,$,$);
+#5876=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_23','Electrical diagrams',#5872,$,$);
+#5877=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_24','Electrical identification labels',#5872,$,$);
+#5878=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_25','Electrical shock treatment signs',#5872,$,$);
+#5879=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_29','Equipment labels and warning notices',#5872,$,$);
+#5880=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_30','Externally illuminated emergency exit signs',#5872,$,$);
+#5881=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_32','Fire hydrant indicator plates',#5872,$,$);
+#5882=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_33','Fire zone diagrams',#5872,$,$);
+#5883=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_36','Heat shrink sleeves',#5872,$,$);
+#5884=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_40','Inclined stair lift notices',#5872,$,$);
+#5885=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_43','Induction loop system signs',#5872,$,$);
+#5886=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_45','Internally illuminated emergency exit signs',#5872,$,$);
+#5887=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_50','Marker posts',#5872,$,$);
+#5888=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_51','Mechanical plant and equipment identification labels',#5872,$,$);
+#5889=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_52','Metal ductwork labels',#5872,$,$);
+#5890=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_56','Nail identification washers',#5872,$,$);
+#5891=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_59','Painted letter and figure stencils',#5872,$,$);
+#5892=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_61','Photoluminescent emergency signs',#5872,$,$);
+#5893=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_62','Photoluminescent low-mounted way-guidance lighting',#5872,$,$);
+#5894=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_63','Plants delivery labels',#5872,$,$);
+#5895=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_64','Plants permanent labels',#5872,$,$);
+#5896=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_65','Plastics ductwork labels',#5872,$,$);
+#5897=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_66','Plastics warning marker boards',#5872,$,$);
+#5898=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_67','Platform lift notices',#5872,$,$);
+#5899=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_78','Self-adhesive colour pipe bands',#5872,$,$);
+#5900=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_79','Self-adhesive plastics ductwork labels and transfers',#5872,$,$);
+#5901=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_80','Self-adhesive vinyl graphics',#5872,$,$);
+#5902=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_86','Surveillance system signs',#5872,$,$);
+#5903=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_88','Telecommunications equipment and outlets labels',#5872,$,$);
+#5904=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_91','Underground cable marker tapes',#5872,$,$);
+#5905=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_93','Valve charts and schematics',#5872,$,$);
+#5906=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_94','Valve identification labels',#5872,$,$);
+#5907=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_95','Warning marker boards',#5872,$,$);
+#5908=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_96','Warning marker tapes',#5872,$,$);
+#5909=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_97','Warning marker tiles',#5872,$,$);
+#5910=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_57_98','Water firefighting system identification and labels',#5872,$,$);
+#5911=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77','Signs and markers',#5871,$,$);
+#5912=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_02','\X2\2018\X0\A\X2\2019\X0\ boards',#5911,$,$);
+#5913=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_04','Alphanumeric characters',#5911,$,$);
+#5914=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_05','Applied glazing details',#5911,$,$);
+#5915=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_06','Banner signs',#5911,$,$);
+#5916=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_07','Beach safety flags',#5911,$,$);
+#5917=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_08','Braille signs',#5911,$,$);
+#5918=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_11','Cabinet signs',#5911,$,$);
+#5919=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_20','Datum plates and markers',#5911,$,$);
+#5920=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_22','Designation signs',#5911,$,$);
+#5921=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_24','Directory signs',#5911,$,$);
+#5922=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_25','Door number labels',#5911,$,$);
+#5923=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_26','Edge markers',#5911,$,$);
+#5924=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_27','Evacuation signs',#5911,$,$);
+#5925=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_29','Fencing safety reflectors',#5911,$,$);
+#5926=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_30','Finger signs',#5911,$,$);
+#5927=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_31','Fire equipment signs',#5911,$,$);
+#5928=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_32','Fire escape route signs',#5911,$,$);
+#5929=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_36','Hazard delineators',#5911,$,$);
+#5930=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_37','Highway marker posts',#5911,$,$);
+#5931=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_38','Hoarding signs',#5911,$,$);
+#5932=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_40','Images and logos',#5911,$,$);
+#5933=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_41','Illuminated signs',#5911,$,$);
+#5934=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_42','Individual letter signs',#5911,$,$);
+#5935=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_46','Ladder signs',#5911,$,$);
+#5936=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_50','Mandatory action signs',#5911,$,$);
+#5937=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_52','Monolith signs',#5911,$,$);
+#5938=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_53','Moving signs',#5911,$,$);
+#5939=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_56','Nameplates',#5911,$,$);
+#5940=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_61','Phosphorescent way-guidance tapes',#5911,$,$);
+#5941=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_63','Plaques',#5911,$,$);
+#5942=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_64','Platform lift signs',#5911,$,$);
+#5943=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_66','Prohibition signs',#5911,$,$);
+#5944=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_69','Public access stair lift signs',#5911,$,$);
+#5945=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_70','Railway signs',#5911,$,$);
+#5946=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_71','Room name labels',#5911,$,$);
+#5947=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_72','Road traffic signs',#5911,$,$);
+#5948=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_73','Room number labels',#5911,$,$);
+#5949=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_74','Safety equipment signs',#5911,$,$);
+#5950=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_75','Safe condition signs',#5911,$,$);
+#5951=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_76','Safety signs',#5911,$,$);
+#5952=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_77','Signboards',#5911,$,$);
+#5953=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_79','Sliding cover signs',#5911,$,$);
+#5954=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_82','Stair lift signs',#5911,$,$);
+#5955=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_84','Street sign plates',#5911,$,$);
+#5956=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_85','Street signs',#5911,$,$);
+#5957=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_86','Survey markers',#5911,$,$);
+#5958=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_87','Topmarks',#5911,$,$);
+#5959=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_88','Toposcopes',#5911,$,$);
+#5960=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_89','Traffic cones',#5911,$,$);
+#5961=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_90','Traffic cylinders',#5911,$,$);
+#5962=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_92','Variable message signs',#5911,$,$);
+#5963=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_93','Window number labels',#5911,$,$);
+#5964=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_94','Verge markers',#5911,$,$);
+#5965=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_95','Warning flags',#5911,$,$);
+#5966=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_96','Warning markers',#5911,$,$);
+#5967=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_97','Warning signs',#5911,$,$);
+#5968=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_98','Waymarker discs',#5911,$,$);
+#5969=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_77_99','Waymarker posts',#5911,$,$);
+#5970=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90','Water and navigation aids',#5871,$,$);
+#5971=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_07','Beacons',#5970,$,$);
+#5972=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_10','Buoys',#5970,$,$);
+#5973=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_21','Daymarks',#5970,$,$);
+#5974=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_31','Fog signals',#5970,$,$);
+#5975=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_50','Marine traffic signals',#5970,$,$);
+#5976=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_55','Navigation booms',#5970,$,$);
+#5977=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_56','Navigation signs',#5970,$,$);
+#5978=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_90_65','Positional indicators',#5970,$,$);
+#5979=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_96','Wind direction indicator products',#5871,$,$);
+#5980=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_96_96','Weathervanes',#5979,$,$);
+#5981=IFCCLASSIFICATIONREFERENCE($,'Pr_40_10_96_98','Windsocks',#5979,$,$);
+#5982=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20','Sanitary fittings and accessories',#5870,$,$);
+#5983=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06','Bathing fittings',#5982,$,$);
+#5984=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_02','Accessible baths',#5983,$,$);
+#5985=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_08','Baths',#5983,$,$);
+#5986=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_11','Bidets',#5983,$,$);
+#5987=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_36','Health care general baths',#5983,$,$);
+#5988=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_38','Hospital pattern bidets',#5983,$,$);
+#5989=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_78','Shower beds',#5983,$,$);
+#5990=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_79','Shower enclosures',#5983,$,$);
+#5991=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_80','Shower doors',#5983,$,$);
+#5992=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_82','Shower screens',#5983,$,$);
+#5993=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_83','Shower seats',#5983,$,$);
+#5994=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_84','Shower trays',#5983,$,$);
+#5995=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_06_99','Whirlpool baths',#5983,$,$);
+#5996=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_27','Emergency shower products',#5982,$,$);
+#5997=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_27_15','Combined emergency shower and eye-wash stations',#5996,$,$);
+#5998=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_27_28','Eye-wash fountains',#5996,$,$);
+#5999=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_27_75','Safety showers',#5996,$,$);
+#6000=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60','Packaged sanitary fittings',#5982,$,$);
+#6001=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_01','Accessible shower equipment packages',#6000,$,$);
+#6002=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_02','Accessible WC equipment packages',#6000,$,$);
+#6003=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_75','Sauna room packages',#6000,$,$);
+#6004=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_78','Shower enclosure packages',#6000,$,$);
+#6005=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_85','Steam cabinet packages',#6000,$,$);
+#6006=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_86','Steam room packages',#6000,$,$);
+#6007=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_60_96','Wet room floor formers',#6000,$,$);
+#6008=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76','Sanitary accessories',#5982,$,$);
+#6009=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_01','Adult changing units',#6008,$,$);
+#6010=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_02','Air fresheners',#6008,$,$);
+#6011=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_06','Baby changing units',#6008,$,$);
+#6012=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_07','Bath panels',#6008,$,$);
+#6013=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_82','Soap dishes',#6008,$,$);
+#6014=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_83','Splashbacks',#6008,$,$);
+#6015=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_84','Support rails',#6008,$,$);
+#6016=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_86','Toilet brush holders',#6008,$,$);
+#6017=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_88','Toilet roll holders',#6008,$,$);
+#6018=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_89','Toothbrush holders',#6008,$,$);
+#6019=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_90','Towel rails',#6008,$,$);
+#6020=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_91','Towel rings',#6008,$,$);
+#6021=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_92','Tumbler holders',#6008,$,$);
+#6022=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_93','Ultraviolet (UV) air-disinfection devices',#6008,$,$);
+#6023=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_94','Vanity units',#6008,$,$);
+#6024=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_95','Vanity and washroom furniture',#6008,$,$);
+#6025=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_97','Wash stands',#6008,$,$);
+#6026=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_76_98','WC pan backrests',#6008,$,$);
+#6027=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87','Taps and water supply outlet fittings',#5982,$,$);
+#6028=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_03','Automatic-action thermostatic mixer taps',#6027,$,$);
+#6029=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_07','Bath mixer taps with shower hose and hand sprays',#6027,$,$);
+#6030=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_08','Bath mixer taps',#6027,$,$);
+#6031=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_09','Bath taps',#6027,$,$);
+#6032=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_10','Bath thermostatic water supply sets',#6027,$,$);
+#6033=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_11','Bidet over-rim supply mixer taps',#6027,$,$);
+#6034=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_12','Bidet mixer for ascending spray taps',#6027,$,$);
+#6035=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_13','Bidet thermostatic mixer for over-rim taps',#6027,$,$);
+#6036=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_15','Combined tap and hand dryers',#6027,$,$);
+#6037=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_17','Combined tap, soap dispenser and hand dryers',#6027,$,$);
+#6038=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_31','Foot-operated valves',#6027,$,$);
+#6039=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_33','Garden taps',#6027,$,$);
+#6040=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_35','Grip valves',#6027,$,$);
+#6041=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_37','High-neck pillar taps',#6027,$,$);
+#6042=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_43','Key-operated valves',#6027,$,$);
+#6043=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_49','Knee-operated valves',#6027,$,$);
+#6044=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_50','Lever-action bib taps',#6027,$,$);
+#6045=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_51','Lever-action high-neck pillar taps',#6027,$,$);
+#6046=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_55','Mixer taps',#6027,$,$);
+#6047=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_60','Pillar taps',#6027,$,$);
+#6048=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_64','Press-action self-closing bib taps',#6027,$,$);
+#6049=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_65','Press-action self-closing bib mixer taps',#6027,$,$);
+#6050=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_66','Press-action self-closing pillar taps',#6027,$,$);
+#6051=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_67','Press-action self-closing pillar mixer taps',#6027,$,$);
+#6052=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_75','Shower fittings package',#6027,$,$);
+#6053=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_76','Shower heads',#6027,$,$);
+#6054=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_77','Shower head holders',#6027,$,$);
+#6055=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_78','Shower manual water supply sets',#6027,$,$);
+#6056=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_79','Shower self-closing (emergency) valves',#6027,$,$);
+#6057=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_80','Shower thermostatic valves',#6027,$,$);
+#6058=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_81','Shower thermostatic water supply sets',#6027,$,$);
+#6059=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_82','Sink manual water supply sets',#6027,$,$);
+#6060=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_83','Sink spouts',#6027,$,$);
+#6061=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_84','Sink taps',#6027,$,$);
+#6062=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_85','Sink thermostatic water supply sets',#6027,$,$);
+#6063=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_87','Thermostatic mixer taps',#6027,$,$);
+#6064=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_89','Toilet showers',#6027,$,$);
+#6065=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_93','Wall-mounted bib taps',#6027,$,$);
+#6066=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_94','Wall-mounted lever-action bib taps',#6027,$,$);
+#6067=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_95','Wall-mounted spray taps',#6027,$,$);
+#6068=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_96','Washbasin manual water supply sets',#6027,$,$);
+#6069=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_97','Washbasin spouts',#6027,$,$);
+#6070=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_98','Washbasin taps',#6027,$,$);
+#6071=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_87_99','Washbasin thermostatic water supply sets',#6027,$,$);
+#6072=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93','Urinal and WC fittings',#5982,$,$);
+#6073=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_30','Floor-standing urinals',#6072,$,$);
+#6074=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_36','Health care macerators',#6072,$,$);
+#6075=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_37','Hospital pattern disposal units',#6072,$,$);
+#6076=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_38','Hospital pattern urinals',#6072,$,$);
+#6077=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_39','Hospital pattern WC pans and cisterns',#6072,$,$);
+#6078=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_62','Pre-plumbed installation frames',#6072,$,$);
+#6079=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_74','Urinal dividers',#6072,$,$);
+#6080=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_77','Slab urinals',#6072,$,$);
+#6081=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_78','Urinal cisterns',#6072,$,$);
+#6082=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_80','Urinal flush pipes',#6072,$,$);
+#6083=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_82','Wall-hung urinals',#6072,$,$);
+#6084=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_84','Waterless urinals',#6072,$,$);
+#6085=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_85','Waterless toilets',#6072,$,$);
+#6086=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_86','WC and washbasin combined units',#6072,$,$);
+#6087=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_87','WC cistern fittings',#6072,$,$);
+#6088=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_89','WC cisterns',#6072,$,$);
+#6089=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_90','WC cistern flush pipes',#6072,$,$);
+#6090=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_92','WC large capacity replacement cisterns',#6072,$,$);
+#6091=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_93','WC pan connectors',#6072,$,$);
+#6092=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_94','WC pans',#6072,$,$);
+#6093=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_95','WC seats and covers',#6072,$,$);
+#6094=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_96','WC squatting pans',#6072,$,$);
+#6095=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_97','WC suites',#6072,$,$);
+#6096=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_93_99','WC, wash and dry combined units',#6072,$,$);
+#6097=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96','Washbasins, sinks and troughs',#5982,$,$);
+#6098=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_15','Ceramic sinks',#6097,$,$);
+#6099=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_17','Commercial kitchen rinsing sinks',#6097,$,$);
+#6100=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_18','Countertop washbasins',#6097,$,$);
+#6101=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_19','Commercial stainless steel sinks',#6097,$,$);
+#6102=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_34','Healthcare clinical sinks with drainers',#6097,$,$);
+#6103=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_35','Healthcare clinical washbasins',#6097,$,$);
+#6104=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_36','Healthcare domestic service sinks',#6097,$,$);
+#6105=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_37','Healthcare general washbasins',#6097,$,$);
+#6106=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_38','Healthcare hand rinse basins',#6097,$,$);
+#6107=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_39','Hospital pattern plaster sinks',#6097,$,$);
+#6108=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_40','Hospital pattern scrub-up troughs',#6097,$,$);
+#6109=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_42','Integral washbasins and vanity tops',#6097,$,$);
+#6110=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_44','Janitorial sinks',#6097,$,$);
+#6111=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_45','Kitchen sinks',#6097,$,$);
+#6112=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_46','Laundry troughs',#6097,$,$);
+#6113=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_47','Laundry troughs and cabinets',#6097,$,$);
+#6114=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_63','Pedestal washbasins',#6097,$,$);
+#6115=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_70','Recessed washbasins',#6097,$,$);
+#6116=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_81','Sinks',#6097,$,$);
+#6117=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_92','Under-mounted washbasins',#6097,$,$);
+#6118=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_95','Wall-hung hand rinse basins',#6097,$,$);
+#6119=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_96','Wall-hung washbasins',#6097,$,$);
+#6120=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_97','Wash basin, soap dispenser and hand dryer units',#6097,$,$);
+#6121=IFCCLASSIFICATIONREFERENCE($,'Pr_40_20_96_99','Wash troughs',#6097,$,$);
+#6122=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30','Fittings',#5870,$,$);
+#6123=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04','Animal housing',#6122,$,$);
+#6124=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_02','Animal feeding stations',#6123,$,$);
+#6125=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_06','Bat boxes',#6123,$,$);
+#6126=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_07','Bird baths',#6123,$,$);
+#6127=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_08','Bird boxes',#6123,$,$);
+#6128=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_09','Bird roosts',#6123,$,$);
+#6129=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_15','Columbaria',#6123,$,$);
+#6130=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_24','Dog kennels',#6123,$,$);
+#6131=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_25','Dovecotes',#6123,$,$);
+#6132=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_41','Insect houses',#6123,$,$);
+#6133=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_50','Mammal houses',#6123,$,$);
+#6134=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_56','Nesting baskets',#6123,$,$);
+#6135=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_57','Nest poles and platforms',#6123,$,$);
+#6136=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_04_70','Raptor poles',#6123,$,$);
+#6137=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20','Curtains and screens',#6122,$,$);
+#6138=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_02','Acoustic curtains',#6137,$,$);
+#6139=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_03','Acoustic screens',#6137,$,$);
+#6140=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_13','Choir screens',#6137,$,$);
+#6141=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_20','Curtain track concealment casings',#6137,$,$);
+#6142=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_30','Fire screens',#6137,$,$);
+#6143=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_38','Hospital bed screens',#6137,$,$);
+#6144=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_58','Organ screens',#6137,$,$);
+#6145=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_59','Ornamental screens',#6137,$,$);
+#6146=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_63','Privacy curtain supports',#6137,$,$);
+#6147=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_64','Privacy curtains',#6137,$,$);
+#6148=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_65','Privacy screens',#6137,$,$);
+#6149=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_67','Polyvinyl chloride (PVC) strip curtains',#6137,$,$);
+#6150=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_70','Recessed curtain pelmets',#6137,$,$);
+#6151=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_71','Relaxation screens',#6137,$,$);
+#6152=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_77','Shower curtain rails',#6137,$,$);
+#6153=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_78','Shower curtains',#6137,$,$);
+#6154=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_83','Stage curtain supports',#6137,$,$);
+#6155=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_84','Stage curtains',#6137,$,$);
+#6156=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_86','Surface-mounted curtain pelmets',#6137,$,$);
+#6157=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_96','Window curtain supports',#6137,$,$);
+#6158=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_20_97','Window curtains',#6137,$,$);
+#6159=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21','Cycle stands and lockers',#6122,$,$);
+#6160=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_02','Aluminium cycle lockers',#6159,$,$);
+#6161=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_11','Carbon steel cycle lockers',#6159,$,$);
+#6162=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_12','Carbon steel cycle stands',#6159,$,$);
+#6163=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_13','Ceiling-mounted cycle supports',#6159,$,$);
+#6164=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_20','Cycle repair stations',#6159,$,$);
+#6165=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_35','Ground-mounted cycle stands',#6159,$,$);
+#6166=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_36','Hardwood cycle stands',#6159,$,$);
+#6167=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_65','Plastics cycle lockers',#6159,$,$);
+#6168=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_76','Scooter racks',#6159,$,$);
+#6169=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_83','Stainless steel cycle lockers',#6159,$,$);
+#6170=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_84','Stainless steel cycle stands',#6159,$,$);
+#6171=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_21_96','Wall-mounted cycle stands',#6159,$,$);
+#6172=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22','Deterrents and traps',#6122,$,$);
+#6173=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_02','Animal deterrents',#6172,$,$);
+#6174=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_05','Bait stations',#6172,$,$);
+#6175=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_06','Bird deterrent spikes',#6172,$,$);
+#6176=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_11','Cage traps',#6172,$,$);
+#6177=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_14','Coiled wire bird deterrents',#6172,$,$);
+#6178=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_22','Decoy predators',#6172,$,$);
+#6179=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_26','Electric pulse track bird deterrents',#6172,$,$);
+#6180=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_30','Flight diverters',#6172,$,$);
+#6181=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_31','Frond bird deterrents',#6172,$,$);
+#6182=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_34','Guard barriers',#6172,$,$);
+#6183=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_38','Humane traps',#6172,$,$);
+#6184=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_40','Inclined surface bird deterrents',#6172,$,$);
+#6185=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_46','Laser bird repellers',#6172,$,$);
+#6186=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_48','Low tension wire bird (gull) deterrents',#6172,$,$);
+#6187=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_56','Non-toxic rat and mouse baits',#6172,$,$);
+#6188=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_60','Pheromone traps',#6172,$,$);
+#6189=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_64','Powered traps',#6172,$,$);
+#6190=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_66','Powered ultraviolet light traps',#6172,$,$);
+#6191=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_76','Scare eyes',#6172,$,$);
+#6192=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_80','Sonic deterrents',#6172,$,$);
+#6193=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_82','Spring traps',#6172,$,$);
+#6194=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_84','Sprung tension wire bird deterrents',#6172,$,$);
+#6195=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_87','Tactile gels and liquids deterrents',#6172,$,$);
+#6196=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_89','Taste and scent bird deterrents',#6172,$,$);
+#6197=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_92','Ultrasonic rodent repellers',#6172,$,$);
+#6198=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_95','Vision disturbance bird deterrents',#6172,$,$);
+#6199=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_22_96','Visual threat bird deterrents',#6172,$,$);
+#6200=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25','Display and presentation fittings',#6122,$,$);
+#6201=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_03','Audible signs',#6200,$,$);
+#6202=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_04','Audiovisual furniture',#6200,$,$);
+#6203=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_13','Chalkboards',#6200,$,$);
+#6204=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_17','Computer-generated signs',#6200,$,$);
+#6205=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_21','Demountable podiums and staging',#6200,$,$);
+#6206=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_22','Desktop lecterns',#6200,$,$);
+#6207=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_23','Display screens',#6200,$,$);
+#6208=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_24','Display plinths',#6200,$,$);
+#6209=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_25','Dot matrix displays',#6200,$,$);
+#6210=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_30','Free-standing screens',#6200,$,$);
+#6211=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_42','Interactive whiteboards',#6200,$,$);
+#6212=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_46','Lecterns',#6200,$,$);
+#6213=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_47','Light emitting diode (LED) panels',#6200,$,$);
+#6214=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_48','Liquid crystal display (LCD) panels',#6200,$,$);
+#6215=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_50','Magnetic boards',#6200,$,$);
+#6216=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_55','Multimedia screens',#6200,$,$);
+#6217=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_58','Noticeboards',#6200,$,$);
+#6218=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_64','Pinboards',#6200,$,$);
+#6219=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_65','Plasma display screens',#6200,$,$);
+#6220=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_67','Projection screens',#6200,$,$);
+#6221=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_71','Retail display fittings',#6200,$,$);
+#6222=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_84','Stanchions and ropes',#6200,$,$);
+#6223=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_88','Teaching walls',#6200,$,$);
+#6224=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_25_96','Whiteboards',#6200,$,$);
+#6225=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26','Drying lines',#6122,$,$);
+#6226=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_12','Ceiling-mounted clothes-drying lines',#6225,$,$);
+#6227=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_30','Folding wall-mounted clothes-drying lines',#6225,$,$);
+#6228=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_32','Free standing clothes-drying lines',#6225,$,$);
+#6229=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_55','Multiple line retractable clothes-drying lines',#6225,$,$);
+#6230=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_63','Photographic film-drying lines',#6225,$,$);
+#6231=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_65','Portable clothes-drying lines',#6225,$,$);
+#6232=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_72','Rotary clothes-drying lines',#6225,$,$);
+#6233=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_26_79','Single line retractable clothes-drying lines',#6225,$,$);
+#6234=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_28','External storage units',#6122,$,$);
+#6235=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_28_34','Garden sheds',#6234,$,$);
+#6236=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_28_59','Outdoor metal storage sheds',#6234,$,$);
+#6237=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_28_81','Shopping trolley bays',#6234,$,$);
+#6238=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29','Fitted chairs, seats and benches',#6122,$,$);
+#6239=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_05','Auditorium seating',#6238,$,$);
+#6240=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_12','Choir seating',#6238,$,$);
+#6241=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_13','Choir stalls',#6238,$,$);
+#6242=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_22','Demountable seats',#6238,$,$);
+#6243=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_28','Fixed benches',#6238,$,$);
+#6244=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_29','Fixed seats',#6238,$,$);
+#6245=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_31','Fixed observation poolside chairs',#6238,$,$);
+#6246=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_46','Leaning rails',#6238,$,$);
+#6247=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_61','Pedicure chairs',#6238,$,$);
+#6248=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_72','Retractable seats',#6238,$,$);
+#6249=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_79','Sitting rails',#6238,$,$);
+#6250=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_83','Spa foot ritual benches',#6238,$,$);
+#6251=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_84','Street and site benches',#6238,$,$);
+#6252=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_85','Street and site seats',#6238,$,$);
+#6253=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_88','Thrones',#6238,$,$);
+#6254=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_96','Wall-fixed lift-up seats',#6238,$,$);
+#6255=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_97','Wall-mounted gallery benches',#6238,$,$);
+#6256=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_29_98','Window seats',#6238,$,$);
+#6257=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30','Fitted desks, tables and worktops',#6122,$,$);
+#6258=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_17','Combined outdoor tables and seating',#6257,$,$);
+#6259=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_18','Countertops',#6257,$,$);
+#6260=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_22','Dishwasher inlet tables',#6257,$,$);
+#6261=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_23','Dishwasher outlet tables',#6257,$,$);
+#6262=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_32','Food preparation worktops',#6257,$,$);
+#6263=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_42','Industrial work benches',#6257,$,$);
+#6264=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_45','Kitchen splashbacks',#6257,$,$);
+#6265=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_46','Kitchen worktops',#6257,$,$);
+#6266=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_47','Laboratory work benches',#6257,$,$);
+#6267=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_48','Laboratory worktops',#6257,$,$);
+#6268=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_71','Reception desks',#6257,$,$);
+#6269=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_78','School art, design and technology work benches',#6257,$,$);
+#6270=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_79','Servery counters',#6257,$,$);
+#6271=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_80','Sink tables',#6257,$,$);
+#6272=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_84','Stainless steel bench units',#6257,$,$);
+#6273=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_86','Street and site tables',#6257,$,$);
+#6274=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_30_96','Worktops',#6257,$,$);
+#6275=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31','Flagpoles',#6122,$,$);
+#6276=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_29','Fan-assisted ground-mounted flagpoles',#6275,$,$);
+#6277=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_33','Ground-mounted banner poles',#6275,$,$);
+#6278=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_34','Ground-mounted flagpoles',#6275,$,$);
+#6279=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_35','Ground-mounted sleeved flagpoles',#6275,$,$);
+#6280=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_53','Mobile telescopic flagpoles',#6275,$,$);
+#6281=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_70','Rigged and guyed flagpoles',#6275,$,$);
+#6282=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_71','Rigged un-guyed flagpoles',#6275,$,$);
+#6283=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_31_96','Wall-mounted flagpoles',#6275,$,$);
+#6284=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50','Mail fittings',#6122,$,$);
+#6285=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_46','Letter boxes',#6284,$,$);
+#6286=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_47','Letter cages',#6284,$,$);
+#6287=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_48','Letter plate internal flaps and seals',#6284,$,$);
+#6288=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_49','Letter plates',#6284,$,$);
+#6289=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_62','Pigeonholes',#6284,$,$);
+#6290=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_50_65','Post boxes',#6284,$,$);
+#6291=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53','Mirrors',#6122,$,$);
+#6292=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_06','Bathroom mirrors',#6291,$,$);
+#6293=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_14','Cheval mirrors',#6291,$,$);
+#6294=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_23','Dressing glasses',#6291,$,$);
+#6295=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_30','Framed glass mirrors',#6291,$,$);
+#6296=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_31','Framed metal mirrors',#6291,$,$);
+#6297=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_32','Framed plastics mirrors',#6291,$,$);
+#6298=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_59','Overmantel mirrors',#6291,$,$);
+#6299=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_65','Platform mirrors',#6291,$,$);
+#6300=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_70','Rail mirrors',#6291,$,$);
+#6301=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_73','Road mirrors',#6291,$,$);
+#6302=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_53_96','Wall mirrors',#6291,$,$);
+#6303=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55','Musical instruments',#6122,$,$);
+#6304=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_06','Bell frames',#6303,$,$);
+#6305=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_07','Bell headstocks',#6303,$,$);
+#6306=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_08','Bell wheels',#6303,$,$);
+#6307=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_10','Bracket bells',#6303,$,$);
+#6308=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_35','Grand pianos',#6303,$,$);
+#6309=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_77','Ship\X2\2019\X0\s bells',#6303,$,$);
+#6310=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_89','Tower bells',#6303,$,$);
+#6311=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_90','Tubular bells',#6303,$,$);
+#6312=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_91','Turret bells',#6303,$,$);
+#6313=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_55_93','Upright pianos',#6303,$,$);
+#6314=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61','Play equipment',#6122,$,$);
+#6315=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_15','Climbing frames',#6314,$,$);
+#6316=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_18','Combined play structures',#6314,$,$);
+#6317=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_40','Imaginative play structures',#6314,$,$);
+#6318=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_42','Infants'' swings',#6314,$,$);
+#6319=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_52','Modular play climbers',#6314,$,$);
+#6320=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_59','Play cableways',#6314,$,$);
+#6321=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_60','Play rockers',#6314,$,$);
+#6322=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_61','Play panels',#6314,$,$);
+#6323=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_62','Play pools',#6314,$,$);
+#6324=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_63','Play roundabouts',#6314,$,$);
+#6325=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_64','Play runways',#6314,$,$);
+#6326=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_65','Play sandpits',#6314,$,$);
+#6327=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_66','Play slides',#6314,$,$);
+#6328=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_67','Play swings',#6314,$,$);
+#6329=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_77','See-saws',#6314,$,$);
+#6330=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_78','Sensory play structures',#6314,$,$);
+#6331=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_79','Sit-on rockers',#6314,$,$);
+#6332=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_82','Spinning poles',#6314,$,$);
+#6333=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_84','Spring rockers',#6314,$,$);
+#6334=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_88','Traditional rockers',#6314,$,$);
+#6335=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_95','Water play equipment',#6314,$,$);
+#6336=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_96','Water play fountains',#6314,$,$);
+#6337=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_97','Water play structures',#6314,$,$);
+#6338=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_61_98','Wobble boards',#6314,$,$);
+#6339=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65','Point of sale fittings',#6122,$,$);
+#6340=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_11','Cash registers',#6339,$,$);
+#6341=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_12','Cash transfer units',#6339,$,$);
+#6342=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_13','Cashier drawers',#6339,$,$);
+#6343=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_60','Paystations and troughs',#6339,$,$);
+#6344=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_65','Point of sale units',#6339,$,$);
+#6345=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_65_88','Tills',#6339,$,$);
+#6346=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_66','Poster display units',#6122,$,$);
+#6347=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_66_22','Digital poster display units',#6346,$,$);
+#6348=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_66_73','Rolling poster display units',#6346,$,$);
+#6349=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_66_74','Rotating poster display units',#6346,$,$);
+#6350=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_66_84','Static poster display units',#6346,$,$);
+#6351=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71','Religious fittings',#6122,$,$);
+#6352=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_01','Abat-voix',#6351,$,$);
+#6353=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_03','Ambons',#6351,$,$);
+#6354=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_06','Baldachins',#6351,$,$);
+#6355=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_07','Bimahs',#6351,$,$);
+#6356=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_31','Fonts',#6351,$,$);
+#6357=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_36','Hassocks',#6351,$,$);
+#6358=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_51','Minbars',#6351,$,$);
+#6359=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_56','Nave lecterns',#6351,$,$);
+#6360=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_71_68','Pulpits',#6351,$,$);
+#6361=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75','Safes and security cabinets',#6122,$,$);
+#6362=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_11','Cash safes',#6361,$,$);
+#6363=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_16','Computer safes',#6361,$,$);
+#6364=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_20','Cupboard safes',#6361,$,$);
+#6365=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_21','Data protection safes',#6361,$,$);
+#6366=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_22','Deposit safes',#6361,$,$);
+#6367=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_29','Fire protection safes',#6361,$,$);
+#6368=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_30','Firearm security cabinets',#6361,$,$);
+#6369=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_31','Floorboard safes',#6361,$,$);
+#6370=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_36','High-security safes',#6361,$,$);
+#6371=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_38','Home and office safes',#6361,$,$);
+#6372=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_39','Hotel safes',#6361,$,$);
+#6373=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_45','Key safes',#6361,$,$);
+#6374=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_49','Lead security cabinets',#6361,$,$);
+#6375=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_51','Medical safes',#6361,$,$);
+#6376=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_55','Multipurpose security cabinets',#6361,$,$);
+#6377=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_60','Parcel safes',#6361,$,$);
+#6378=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_63','Plate safes',#6361,$,$);
+#6379=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_65','Premises information boxes',#6361,$,$);
+#6380=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_76','Secure rooms',#6361,$,$);
+#6381=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_77','Security cages',#6361,$,$);
+#6382=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_84','Steel security cabinets',#6361,$,$);
+#6383=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_90','Tool vaults',#6361,$,$);
+#6384=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_93','Underfloor safes',#6361,$,$);
+#6385=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_94','Vault doors',#6361,$,$);
+#6386=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_75_96','Wall safes',#6361,$,$);
+#6387=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78','Shelves, hangers and racks',#6122,$,$);
+#6388=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_08','Bottle racks',#6387,$,$);
+#6389=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_13','Cloakroom hanging racks',#6387,$,$);
+#6390=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_15','Clothes hooks',#6387,$,$);
+#6391=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_16','Clothes rails',#6387,$,$);
+#6392=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_17','Coat racks',#6387,$,$);
+#6393=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_27','Equipment storage racks',#6387,$,$);
+#6394=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_35','Gym weights storage racks',#6387,$,$);
+#6395=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_36','Hat stands',#6387,$,$);
+#6396=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_47','Library shelf units',#6387,$,$);
+#6397=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_53','Mobile aisle shelving',#6387,$,$);
+#6398=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_58','Open bookcases',#6387,$,$);
+#6399=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_65','Post room racks',#6387,$,$);
+#6400=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_70','Racking units',#6387,$,$);
+#6401=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_71','Retail shelf units',#6387,$,$);
+#6402=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_77','Shelf units',#6387,$,$);
+#6403=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_78','Shelves',#6387,$,$);
+#6404=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_80','Shoe trees',#6387,$,$);
+#6405=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_85','Stainless steel shelving and racking units',#6387,$,$);
+#6406=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_78_95','Wardrobe rails',#6387,$,$);
+#6407=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80','Skateboard installations',#6122,$,$);
+#6408=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_75','Skate bowls',#6407,$,$);
+#6409=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_77','Skate edges',#6407,$,$);
+#6410=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_78','Skate pipes',#6407,$,$);
+#6411=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_80','Skate platforms',#6407,$,$);
+#6412=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_81','Skate rails',#6407,$,$);
+#6413=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_82','Skate ramps',#6407,$,$);
+#6414=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_80_83','Skate stairs',#6407,$,$);
+#6415=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83','Sports fittings',#6122,$,$);
+#6416=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83_08','Basketball hoops',#6415,$,$);
+#6417=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83_10','Bouldering holds',#6415,$,$);
+#6418=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83_11','Bouldering walls',#6415,$,$);
+#6419=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83_14','Climbing walls',#6415,$,$);
+#6420=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_83_37','Hanging and stretching equipment',#6415,$,$);
+#6421=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84','Sports goals',#6122,$,$);
+#6422=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_04','American football goalposts',#6421,$,$);
+#6423=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_05','Australian football goalposts',#6421,$,$);
+#6424=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_28','Five-a-side football goals',#6421,$,$);
+#6425=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_29','Fixed water polo goals',#6421,$,$);
+#6426=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_30','Floating water polo goals',#6421,$,$);
+#6427=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_31','Football goals',#6421,$,$);
+#6428=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_33','Gaelic football goalposts',#6421,$,$);
+#6429=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_36','Handball goals',#6421,$,$);
+#6430=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_39','Hockey goals',#6421,$,$);
+#6431=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_40','Ice hockey goals',#6421,$,$);
+#6432=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_46','Lacrosse goals',#6421,$,$);
+#6433=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_56','Netball goals',#6421,$,$);
+#6434=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_65','Polo goal posts',#6421,$,$);
+#6435=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_69','Quidditch goals',#6421,$,$);
+#6436=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_84_74','Rugby goalposts',#6421,$,$);
+#6437=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85','Sports netting',#6122,$,$);
+#6438=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_04','Archery nets',#6437,$,$);
+#6439=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_06','Badminton nets',#6437,$,$);
+#6440=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_17','Cricket nets',#6437,$,$);
+#6441=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_24','Driving range nets',#6437,$,$);
+#6442=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_34','Golf course nets',#6437,$,$);
+#6443=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_80','Space nets',#6437,$,$);
+#6444=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_85','Stadium nets',#6437,$,$);
+#6445=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_87','Tennis nets',#6437,$,$);
+#6446=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_85_95','Volleyball nets',#6437,$,$);
+#6447=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86','Swimming pool fittings',#6122,$,$);
+#6448=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_22','Diving platforms',#6447,$,$);
+#6449=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_24','Diving springboards',#6447,$,$);
+#6450=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_28','False start posts',#6447,$,$);
+#6451=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_30','Fixed domestic diving boards',#6447,$,$);
+#6452=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_32','Fixed starting platforms',#6447,$,$);
+#6453=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_47','Lane rope storage floor cover plates',#6447,$,$);
+#6454=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_59','Pool rails',#6447,$,$);
+#6455=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_78','Water flumes',#6447,$,$);
+#6456=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_80','Water slides',#6447,$,$);
+#6457=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_88','Touch panels',#6447,$,$);
+#6458=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_90','Turning boards',#6447,$,$);
+#6459=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_95','Water polo catwalks',#6447,$,$);
+#6460=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_86_96','Water polo field markers',#6447,$,$);
+#6461=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87','Storage units and cupboards',#6122,$,$);
+#6462=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_03','Bathroom cabinets',#6461,$,$);
+#6463=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_07','Bedside units',#6461,$,$);
+#6464=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_10','Bureau bookcases',#6461,$,$);
+#6465=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_11','Chests',#6461,$,$);
+#6466=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_12','Classroom storage units',#6461,$,$);
+#6467=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_14','Clothes drying cabinets',#6461,$,$);
+#6468=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_17','Corner cupboards',#6461,$,$);
+#6469=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_20','Cupboards',#6461,$,$);
+#6470=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_24','Display cases',#6461,$,$);
+#6471=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_25','Drawer units',#6461,$,$);
+#6472=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_26','Dressers',#6461,$,$);
+#6473=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_29','Filing cabinets',#6461,$,$);
+#6474=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_30','Folding tables storage cabinets',#6461,$,$);
+#6475=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_31','Floor-standing kitchen cupboards',#6461,$,$);
+#6476=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_33','Glazed bookcases',#6461,$,$);
+#6477=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_40','Index storage units',#6461,$,$);
+#6478=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_42','Kitchen drawer units',#6461,$,$);
+#6479=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_46','Laboratory storage units',#6461,$,$);
+#6480=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_47','Linen presses',#6461,$,$);
+#6481=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_48','Lockers',#6461,$,$);
+#6482=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_51','Media wall partition units',#6461,$,$);
+#6483=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_52','Medicine cabinets',#6461,$,$);
+#6484=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_55','Museum showcases',#6461,$,$);
+#6485=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_57','Office storage units',#6461,$,$);
+#6486=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_63','Plan chests',#6461,$,$);
+#6487=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_66','Portfolio cabinets',#6461,$,$);
+#6488=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_72','Retail storage units',#6461,$,$);
+#6489=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_73','Rotary storage units',#6461,$,$);
+#6490=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_81','Sideboards',#6461,$,$);
+#6491=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_83','Smart lockers',#6461,$,$);
+#6492=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_85','Storage chests',#6461,$,$);
+#6493=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_86','Storage wall partition units',#6461,$,$);
+#6494=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_87','Suspension storage units',#6461,$,$);
+#6495=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_90','Tool chests',#6461,$,$);
+#6496=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_93','Under-bed storage units',#6461,$,$);
+#6497=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_95','Wall-mounted kitchen cupboards',#6461,$,$);
+#6498=IFCCLASSIFICATIONREFERENCE($,'Pr_40_30_87_96','Wardrobes',#6461,$,$);
+#6499=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50','Furnishings',#5870,$,$);
+#6500=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05','Artwork products',#6499,$,$);
+#6501=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_02','Acrylic paintings',#6500,$,$);
+#6502=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_11','Carvings',#6500,$,$);
+#6503=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_13','Chalk drawings',#6500,$,$);
+#6504=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_14','Charcoal drawings',#6500,$,$);
+#6505=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_24','Drypoint prints',#6500,$,$);
+#6506=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_27','Embroideries',#6500,$,$);
+#6507=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_28','Etchings',#6500,$,$);
+#6508=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_29','Floor-mounted mobiles',#6500,$,$);
+#6509=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_30','Floor-mounted sculptures',#6500,$,$);
+#6510=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_33','Garden ornaments',#6500,$,$);
+#6511=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_41','Indoor ornaments',#6500,$,$);
+#6512=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_42','Installation pieces',#6500,$,$);
+#6513=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_43','Interactive artworks',#6500,$,$);
+#6514=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_46','Linoprints',#6500,$,$);
+#6515=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_51','Mixed media artworks',#6500,$,$);
+#6516=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_55','Murals',#6500,$,$);
+#6517=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_58','Oil paintings',#6500,$,$);
+#6518=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_60','Pastel drawings',#6500,$,$);
+#6519=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_62','Pencil drawings',#6500,$,$);
+#6520=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_66','Projected artworks',#6500,$,$);
+#6521=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_76','Screenprints',#6500,$,$);
+#6522=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_77','Sculptural reliefs',#6500,$,$);
+#6523=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_82','Sons et lumi\X2\00E8\X0\res',#6500,$,$);
+#6524=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_84','Stand-mounted sculptures',#6500,$,$);
+#6525=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_85','Statuary',#6500,$,$);
+#6526=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_86','Suspended mobiles',#6500,$,$);
+#6527=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_87','Tapestries',#6500,$,$);
+#6528=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_95','Wall hangings',#6500,$,$);
+#6529=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_96','Wall-mounted sculptures',#6500,$,$);
+#6530=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_05_97','Watercolour paintings',#6500,$,$);
+#6531=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06','Beds',#6499,$,$);
+#6532=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_10','Bunk beds',#6531,$,$);
+#6533=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_11','Camp beds',#6531,$,$);
+#6534=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_14','Chair beds',#6531,$,$);
+#6535=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_16','Cots',#6531,$,$);
+#6536=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_18','Cradles',#6531,$,$);
+#6537=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_21','Daybeds',#6531,$,$);
+#6538=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_22','Divans',#6531,$,$);
+#6539=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_24','Double beds',#6531,$,$);
+#6540=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_30','Foldaway beds',#6531,$,$);
+#6541=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_31','Four-poster beds',#6531,$,$);
+#6542=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_32','Futons',#6531,$,$);
+#6543=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_36','Hammocks',#6531,$,$);
+#6544=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_37','Headboards',#6531,$,$);
+#6545=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_38','Hospital bedheads',#6531,$,$);
+#6546=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_39','Hospital beds',#6531,$,$);
+#6547=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_50','Mattresses',#6531,$,$);
+#6548=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_77','Single beds',#6531,$,$);
+#6549=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_06_96','Waterbeds',#6531,$,$);
+#6550=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07','Bins and buckets',#6499,$,$);
+#6551=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_02','Aggregate bins',#6550,$,$);
+#6552=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_04','Ashtrays',#6550,$,$);
+#6553=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_07','Bin stores',#6550,$,$);
+#6554=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_10','Bulk storage fire sand bins',#6550,$,$);
+#6555=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_11','Carbon steel fire buckets',#6550,$,$);
+#6556=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_12','Cemetery flower baskets',#6550,$,$);
+#6557=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_19','Compost bins',#6550,$,$);
+#6558=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_25','Dustbins',#6550,$,$);
+#6559=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_33','Galvanized steel fire buckets',#6550,$,$);
+#6560=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_35','Grit bins',#6550,$,$);
+#6561=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_46','Linen containers',#6550,$,$);
+#6562=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_47','Litter bins',#6550,$,$);
+#6563=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_56','Nappy disposal bins',#6550,$,$);
+#6564=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_57','Needle disposal boxes',#6550,$,$);
+#6565=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_58','Non-segregated waste bins',#6550,$,$);
+#6566=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_64','Plastics fire buckets',#6550,$,$);
+#6567=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_70','Recycling bins',#6550,$,$);
+#6568=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_71','Refuse bag holders',#6550,$,$);
+#6569=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_72','Refuse bins',#6550,$,$);
+#6570=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_73','Refuse containers',#6550,$,$);
+#6571=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_75','Salt bins',#6550,$,$);
+#6572=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_76','Sanitary towel disposal bins',#6550,$,$);
+#6573=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_77','Segregated waste bins',#6550,$,$);
+#6574=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_78','Scuttles',#6550,$,$);
+#6575=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_83','Spittoons',#6550,$,$);
+#6576=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_07_96','Waste bins',#6550,$,$);
+#6577=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12','Chairs, seats and benches',#6499,$,$);
+#6578=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_03','Armrests',#6577,$,$);
+#6579=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_04','Assembly stacking chairs',#6577,$,$);
+#6580=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_05','Auditorium chairs',#6577,$,$);
+#6581=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_06','Barbell benches',#6577,$,$);
+#6582=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_07','Benches',#6577,$,$);
+#6583=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_12','Ceremonial chairs',#6577,$,$);
+#6584=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_14','Chaises longues',#6577,$,$);
+#6585=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_15','Changing benches',#6577,$,$);
+#6586=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_16','Classroom seats',#6577,$,$);
+#6587=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_20','Deckchairs',#6577,$,$);
+#6588=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_21','Dining benches',#6577,$,$);
+#6589=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_22','Dining chairs',#6577,$,$);
+#6590=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_26','Easy chairs',#6577,$,$);
+#6591=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_27','Electrically operated chairs',#6577,$,$);
+#6592=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_29','Footstools',#6577,$,$);
+#6593=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_30','Flip-up seats',#6577,$,$);
+#6594=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_31','Folding chairs',#6577,$,$);
+#6595=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_32','Footrests',#6577,$,$);
+#6596=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_33','Garden benches',#6577,$,$);
+#6597=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_37','High chairs',#6577,$,$);
+#6598=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_46','Library chairs',#6577,$,$);
+#6599=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_47','Linked seats',#6577,$,$);
+#6600=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_48','Lounge chairs',#6577,$,$);
+#6601=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_51','Meeting room chairs',#6577,$,$);
+#6602=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_57','Office chairs',#6577,$,$);
+#6603=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_59','Ottomans',#6577,$,$);
+#6604=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_62','Pews',#6577,$,$);
+#6605=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_63','Play chairs',#6577,$,$);
+#6606=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_64','Portable observation poolside chairs',#6577,$,$);
+#6607=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_67','Prie-dieux',#6577,$,$);
+#6608=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_71','Reception chairs',#6577,$,$);
+#6609=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_72','Reclining chairs',#6577,$,$);
+#6610=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_74','Rocking chairs',#6577,$,$);
+#6611=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_76','Settees',#6577,$,$);
+#6612=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_80','Sofa beds',#6577,$,$);
+#6613=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_81','Sofas',#6577,$,$);
+#6614=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_82','Stacking benches',#6577,$,$);
+#6615=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_83','Stacking chairs',#6577,$,$);
+#6616=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_84','Stacking pews',#6577,$,$);
+#6617=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_85','Stools',#6577,$,$);
+#6618=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_86','Study chairs',#6577,$,$);
+#6619=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_87','Swing chairs',#6577,$,$);
+#6620=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_88','Tennis umpire''s stands',#6577,$,$);
+#6621=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_90','Tiered seating',#6577,$,$);
+#6622=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_93','Upholstered benches',#6577,$,$);
+#6623=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_12_94','Utility weight benches',#6577,$,$);
+#6624=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13','Clocks',#6499,$,$);
+#6625=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_06','Battery analogue clocks',#6624,$,$);
+#6626=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_09','Bracket clocks',#6624,$,$);
+#6627=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_21','Dial clocks',#6624,$,$);
+#6628=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_22','Digital clocks',#6624,$,$);
+#6629=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_26','Electric clocks',#6624,$,$);
+#6630=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_29','Flip clocks',#6624,$,$);
+#6631=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_46','Lever clocks',#6624,$,$);
+#6632=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_48','Longcase clocks',#6624,$,$);
+#6633=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_50','Master clocks',#6624,$,$);
+#6634=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_51','Mechanical clocks',#6624,$,$);
+#6635=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_61','Pendulum clocks',#6624,$,$);
+#6636=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_66','Projection clocks',#6624,$,$);
+#6637=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_70','Quartz clocks',#6624,$,$);
+#6638=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_71','Radio clocks',#6624,$,$);
+#6639=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_79','Secondary clocks',#6624,$,$);
+#6640=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_86','Sundials',#6624,$,$);
+#6641=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_87','Time zone clocks',#6624,$,$);
+#6642=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_89','Torsion pendulum clocks',#6624,$,$);
+#6643=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_96','Water clocks',#6624,$,$);
+#6644=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_13_97','Weight-driven clocks',#6624,$,$);
+#6645=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21','Desks and tables',#6499,$,$);
+#6646=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_05','Audiovisual tables',#6645,$,$);
+#6647=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_08','Boardroom tables',#6645,$,$);
+#6648=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_10','Bureaux',#6645,$,$);
+#6649=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_11','Cable-managed podium tables',#6645,$,$);
+#6650=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_12','Card tables',#6645,$,$);
+#6651=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_13','Classroom desks and tables',#6645,$,$);
+#6652=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_14','Coffee tables',#6645,$,$);
+#6653=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_15','Conference tables',#6645,$,$);
+#6654=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_16','Console tables',#6645,$,$);
+#6655=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_17','Computer desks',#6645,$,$);
+#6656=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_21','Desks',#6645,$,$);
+#6657=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_22','Dining tables',#6645,$,$);
+#6658=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_23','Display case tables',#6645,$,$);
+#6659=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_24','Drafting machines',#6645,$,$);
+#6660=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_25','Drawing boards',#6645,$,$);
+#6661=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_26','Dressing tables',#6645,$,$);
+#6662=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_29','Flip-top tables',#6645,$,$);
+#6663=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_30','Folding dining room tables',#6645,$,$);
+#6664=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_31','Folding tables',#6645,$,$);
+#6665=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_32','Food preparation tables',#6645,$,$);
+#6666=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_33','Gallery benches',#6645,$,$);
+#6667=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_46','Laboratory work benches and tables',#6645,$,$);
+#6668=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_47','Laundry finishing tables',#6645,$,$);
+#6669=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_48','Laundry spotting tables',#6645,$,$);
+#6670=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_49','Light tables',#6645,$,$);
+#6671=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_50','Manicure finishing tables',#6645,$,$);
+#6672=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_51','Meeting room tables',#6645,$,$);
+#6673=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_58','Occasional tables',#6645,$,$);
+#6674=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_59','Office desks',#6645,$,$);
+#6675=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_60','Office tables',#6645,$,$);
+#6676=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_63','Play tables',#6645,$,$);
+#6677=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_70','Reading desks',#6645,$,$);
+#6678=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_73','Reference and search desks',#6645,$,$);
+#6679=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_76','School art, design and technology tables',#6645,$,$);
+#6680=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_83','Standing desks',#6645,$,$);
+#6681=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_84','Stand-up tables',#6645,$,$);
+#6682=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_85','Study desks',#6645,$,$);
+#6683=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_90','Touchdown desks',#6645,$,$);
+#6684=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_96','Workstations',#6645,$,$);
+#6685=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_98','Writing desks',#6645,$,$);
+#6686=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_21_99','Writing tablets (detachable)',#6645,$,$);
+#6687=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28','Extinguishers and fire blankets',#6499,$,$);
+#6688=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_11','Carbon dioxide fire extinguishers',#6687,$,$);
+#6689=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_24','Dry powder fire extinguishers',#6687,$,$);
+#6690=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_29','Fire protective blankets',#6687,$,$);
+#6691=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_30','Foam fire extinguishers',#6687,$,$);
+#6692=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_31','Fire suppression liquid',#6687,$,$);
+#6693=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_36','Halocarbon fire extinguishers',#6687,$,$);
+#6694=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_47','Heat protective blankets',#6687,$,$);
+#6695=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_64','Portable fire extinguishers',#6687,$,$);
+#6696=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_80','Specialist dry powder fire extinguishers',#6687,$,$);
+#6697=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_95','Water fire extinguisher leather straps',#6687,$,$);
+#6698=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_96','Water fire extinguishers',#6687,$,$);
+#6699=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_28_97','Wet chemical fire extinguishers',#6687,$,$);
+#6700=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_31','Furniture booths',#6499,$,$);
+#6701=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_31_51','Meeting booths',#6700,$,$);
+#6702=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_31_71','Restaurant booths',#6700,$,$);
+#6703=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_33','Garden furnishings',#6499,$,$);
+#6704=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_33_33','Garden awnings',#6703,$,$);
+#6705=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_33_34','Garden umbrellas',#6703,$,$);
+#6706=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51','Medical chairs and couches',#6499,$,$);
+#6707=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_05','Bariatric patient chairs',#6706,$,$);
+#6708=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_06','Bariatric plinth couches',#6706,$,$);
+#6709=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_07','Blood sampling chairs',#6706,$,$);
+#6710=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_08','Bo-plinth couches',#6706,$,$);
+#6711=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_15','Commodes',#6706,$,$);
+#6712=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_21','Day care couches',#6706,$,$);
+#6713=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_22','Dental chairs',#6706,$,$);
+#6714=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_23','Dialysis chairs',#6706,$,$);
+#6715=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_25','Echocardiography couches',#6706,$,$);
+#6716=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_26','Ear, nose and throat (ENT) and ophthalmic chairs',#6706,$,$);
+#6717=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_27','Examination and treatment chairs',#6706,$,$);
+#6718=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_28','Examination and treatment couches',#6706,$,$);
+#6719=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_34','Gynaecology chairs',#6706,$,$);
+#6720=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_35','Gynaecology couches',#6706,$,$);
+#6721=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_50','Medical footstools',#6706,$,$);
+#6722=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_51','Minor operations couches',#6706,$,$);
+#6723=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_58','Oncology chairs',#6706,$,$);
+#6724=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_59','Outpatients couches',#6706,$,$);
+#6725=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_61','Phlebotomy chairs',#6706,$,$);
+#6726=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_62','Phlebotomy couches',#6706,$,$);
+#6727=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_63','Plaster chairs',#6706,$,$);
+#6728=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_65','Podiatry chairs',#6706,$,$);
+#6729=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_71','Reclining treatment armchairs',#6706,$,$);
+#6730=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_75','Sanitary seats',#6706,$,$);
+#6731=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_84','Step stools',#6706,$,$);
+#6732=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_51_92','Ultrasound couches',#6706,$,$);
+#6733=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52','Medical desks, tables and worktops',#6499,$,$);
+#6734=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_22','Dissection tables',#6733,$,$);
+#6735=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_50','Mayo tables',#6733,$,$);
+#6736=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_57','Operating theatre tables',#6733,$,$);
+#6737=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_58','Overbed tables',#6733,$,$);
+#6738=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_59','Overchair tables',#6733,$,$);
+#6739=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_65','Post-mortem tables',#6733,$,$);
+#6740=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_52_88','Tilt tables',#6733,$,$);
+#6741=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53','Medical trolleys',#6499,$,$);
+#6742=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_04','Armchair patient trolleys',#6741,$,$);
+#6743=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_06','Bariatric patient trolleys',#6741,$,$);
+#6744=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_24','Dressing trolleys',#6741,$,$);
+#6745=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_27','Emergency trolleys',#6741,$,$);
+#6746=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_33','General-purpose medical trolleys',#6741,$,$);
+#6747=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_41','Instruments trolleys',#6741,$,$);
+#6748=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_48','Lockable hospital trolleys',#6741,$,$);
+#6749=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_51','Medical service carts',#6741,$,$);
+#6750=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_60','Patient notes trolleys',#6741,$,$);
+#6751=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_61','Patient trolleys',#6741,$,$);
+#6752=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_62','Phlebotomy trolleys',#6741,$,$);
+#6753=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_66','Procedure trolleys',#6741,$,$);
+#6754=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_53_81','Soiled linen trolleys',#6741,$,$);
+#6755=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81','Soft furnishings',#6499,$,$);
+#6756=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_06','Beanbags',#6755,$,$);
+#6757=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_07','Blankets',#6755,$,$);
+#6758=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_09','Bolsters',#6755,$,$);
+#6759=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_20','Cushions',#6755,$,$);
+#6760=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_25','Duvets',#6755,$,$);
+#6761=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_29','Flannels',#6755,$,$);
+#6762=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_56','Napkins',#6755,$,$);
+#6763=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_62','Pillows',#6755,$,$);
+#6764=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_63','Placemats',#6755,$,$);
+#6765=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_73','Rugs',#6755,$,$);
+#6766=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_74','Runners',#6755,$,$);
+#6767=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_77','Sheets',#6755,$,$);
+#6768=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_86','Swags',#6755,$,$);
+#6769=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_87','Tablecloths',#6755,$,$);
+#6770=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_90','Towels',#6755,$,$);
+#6771=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_91','Trimmings',#6755,$,$);
+#6772=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_81_94','Valances',#6755,$,$);
+#6773=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83','Sports furnishings',#6499,$,$);
+#6774=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_06','Balancing equipment',#6773,$,$);
+#6775=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_19','Cricket wicket stump boxes',#6773,$,$);
+#6776=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_20','Cycle ramps',#6773,$,$);
+#6777=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_28','Equestrian riding equipment',#6773,$,$);
+#6778=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_29','Fencing pistes',#6773,$,$);
+#6779=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_83_44','Jumping equipment',#6773,$,$);
+#6780=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84','Stands and holders',#6499,$,$);
+#6781=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_09','Bowl stands',#6780,$,$);
+#6782=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_10','Bucket holders',#6780,$,$);
+#6783=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_20','Copyholders',#6780,$,$);
+#6784=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_23','Display banner stands',#6780,$,$);
+#6785=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_28','Exhibit stands',#6780,$,$);
+#6786=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_29','Extinguisher floor stands',#6780,$,$);
+#6787=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_30','Fire bucket floor stands',#6780,$,$);
+#6788=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_42','Infusion stands',#6780,$,$);
+#6789=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_50','Magazine racks',#6780,$,$);
+#6790=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_51','Medical equipment stands',#6780,$,$);
+#6791=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_56','Newspaper stands',#6780,$,$);
+#6792=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_57','Notice stands',#6780,$,$);
+#6793=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_66','Print stands',#6780,$,$);
+#6794=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_84_92','Umbrella stands',#6780,$,$);
+#6795=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86','Swimming pool furnishings',#6499,$,$);
+#6796=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86_46','Lane rope storage bags',#6795,$,$);
+#6797=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86_62','Portable domestic diving boards',#6795,$,$);
+#6798=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86_64','Portable starting platforms',#6795,$,$);
+#6799=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86_66','Private use pool covers',#6795,$,$);
+#6800=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_86_68','Public use pool covers',#6795,$,$);
+#6801=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90','Trolleys',#6499,$,$);
+#6802=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_06','Bag search trolleys',#6801,$,$);
+#6803=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_08','Book trolleys',#6801,$,$);
+#6804=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_15','Computer trolleys',#6801,$,$);
+#6805=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_30','Fire trolleys',#6801,$,$);
+#6806=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_31','Food preparation trolleys',#6801,$,$);
+#6807=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_32','Food service trolleys',#6801,$,$);
+#6808=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_33','Furniture trolleys',#6801,$,$);
+#6809=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_46','Laundry trolleys',#6801,$,$);
+#6810=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_47','Laundry bag trolleys',#6801,$,$);
+#6811=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_49','Luggage trolleys',#6801,$,$);
+#6812=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_52','Mailroom trolleys',#6801,$,$);
+#6813=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_64','Pool lane rope storage trolleys',#6801,$,$);
+#6814=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_72','Relay break detector storage trolleys',#6801,$,$);
+#6815=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_76','Shopping trolleys',#6801,$,$);
+#6816=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_82','Spa treatment trolleys',#6801,$,$);
+#6817=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_87','Table storage trolleys',#6801,$,$);
+#6818=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_90_88','Touchpad storage trolleys',#6801,$,$);
+#6819=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_96','Wheels',#6499,$,$);
+#6820=IFCCLASSIFICATIONREFERENCE($,'Pr_40_50_96_11','Castors',#6819,$,$);
+#6821=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70','Equipment',#5870,$,$);
+#6822=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_13','Cleaning equipment',#6821,$,$);
+#6823=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_13_50','Machine parts cleaning washer units',#6822,$,$);
+#6824=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_13_58','Oil spillage cleaning units',#6822,$,$);
+#6825=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_13_60','Orbital tank cleaners',#6822,$,$);
+#6826=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_13_72','Robotic cleaning units',#6822,$,$);
+#6827=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_15','Cold water supply sources',#6821,$,$);
+#6828=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_15_24','Drinking fountains',#6827,$,$);
+#6829=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_15_96','Water coolers',#6827,$,$);
+#6830=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17','Commercial cooking equipment',#6821,$,$);
+#6831=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_16','Commercial conveyor toasters',#6830,$,$);
+#6832=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_18','Commercial electric boiling pans',#6830,$,$);
+#6833=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_19','Commercial electric boiling tables',#6830,$,$);
+#6834=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_20','Commercial electric bratt pans',#6830,$,$);
+#6835=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_21','Commercial electric cooking ranges',#6830,$,$);
+#6836=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_22','Commercial electric deep fat fryers',#6830,$,$);
+#6837=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_24','Commercial electric griddles',#6830,$,$);
+#6838=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_25','Commercial electric grills',#6830,$,$);
+#6839=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_27','Electric ovens',#6830,$,$);
+#6840=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_28','Commercial electric steaming ovens',#6830,$,$);
+#6841=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_33','Commercial gas boiling pans',#6830,$,$);
+#6842=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_34','Commercial gas boiling tables',#6830,$,$);
+#6843=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_35','Commercial gas bratt pans',#6830,$,$);
+#6844=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_36','Commercial gas cooking ranges',#6830,$,$);
+#6845=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_37','Commercial gas deep fat fryers',#6830,$,$);
+#6846=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_39','Commercial gas griddles',#6830,$,$);
+#6847=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_40','Commercial gas grills',#6830,$,$);
+#6848=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_41','Gas ovens',#6830,$,$);
+#6849=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_42','Commercial gas steaming ovens',#6830,$,$);
+#6850=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_43','Commercial general-purpose electric ovens',#6830,$,$);
+#6851=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_44','Commercial general-purpose gas ovens',#6830,$,$);
+#6852=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_52','Commercial microwave ovens',#6830,$,$);
+#6853=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_17_79','Commercial slot toasters',#6830,$,$);
+#6854=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_18','Crematorium and medical waste disposal equipment',#6821,$,$);
+#6855=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_18_04','Ashes separators',#6854,$,$);
+#6856=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_18_15','Cremators',#6854,$,$);
+#6857=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_18_17','Cremulators',#6854,$,$);
+#6858=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21','Dishwashers',#6821,$,$);
+#6859=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_12','Commercial pass-through dishwashers',#6858,$,$);
+#6860=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_14','Commercial under-counter dishwashers',#6858,$,$);
+#6861=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_16','Conveyor dishwashers',#6858,$,$);
+#6862=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_22','Dish and utensil washers',#6858,$,$);
+#6863=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_24','Domestic dishwashers',#6858,$,$);
+#6864=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_21_30','Flight dishwashers',#6858,$,$);
+#6865=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22','Dispensers and acceptance units',#6821,$,$);
+#6866=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_05','Automated teller machines (ATMs)',#6865,$,$);
+#6867=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_06','Barrier parking control units',#6865,$,$);
+#6868=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_15','Cold drink dispensers',#6865,$,$);
+#6869=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_16','Collection boxes',#6865,$,$);
+#6870=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_17','Condom dispensers',#6865,$,$);
+#6871=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_18','Commercial plate dispensers',#6865,$,$);
+#6872=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_21','Couch roll holders',#6865,$,$);
+#6873=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_22','Disposable apron dispensers',#6865,$,$);
+#6874=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_23','Disposable glove dispensers',#6865,$,$);
+#6875=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_24','Donation boxes',#6865,$,$);
+#6876=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_25','Drive-by cash payment units',#6865,$,$);
+#6877=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_28','Fabric roller towel cabinets',#6865,$,$);
+#6878=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_29','Facial tissue dispensers',#6865,$,$);
+#6879=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_31','Food waste disposal units',#6865,$,$);
+#6880=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_35','Hand sanitizer dispensers',#6865,$,$);
+#6881=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_36','Hand cleaning gel dispensers',#6865,$,$);
+#6882=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_37','Hot drink dispensers',#6865,$,$);
+#6883=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_38','Hot food dispensers',#6865,$,$);
+#6884=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_47','Leaflet dispensers',#6865,$,$);
+#6885=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_52','Multi-function dispensers',#6865,$,$);
+#6886=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_56','Newspaper dispensers',#6865,$,$);
+#6887=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_60','Packaged goods dispensers',#6865,$,$);
+#6888=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_61','Paper roll dispensers',#6865,$,$);
+#6889=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_62','Paper towel dispensers',#6865,$,$);
+#6890=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_63','Parking meters',#6865,$,$);
+#6891=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_64','Pay and display units',#6865,$,$);
+#6892=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_71','Refreshment dispensers',#6865,$,$);
+#6893=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_75','Sanitary towel dispensers',#6865,$,$);
+#6894=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_77','Shaving product dispensers',#6865,$,$);
+#6895=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_80','Snack dispensers',#6865,$,$);
+#6896=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_81','Soap dispensers',#6865,$,$);
+#6897=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_85','Surface wipe dispensers',#6865,$,$);
+#6898=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_86','Sweets dispensers',#6865,$,$);
+#6899=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_88','Ticket dispensers',#6865,$,$);
+#6900=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_90','Toilet paper dispensers',#6865,$,$);
+#6901=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_22_92','Tool dispensers',#6865,$,$);
+#6902=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23','Commercial display and service catering products',#6821,$,$);
+#6903=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_10','Buffet counters',#6902,$,$);
+#6904=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_15','Commercial electric bains-marie',#6902,$,$);
+#6905=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_18','Crockery',#6902,$,$);
+#6906=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_20','Cutlery',#6902,$,$);
+#6907=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_24','Drink chillers',#6902,$,$);
+#6908=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_27','Espresso machines',#6902,$,$);
+#6909=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_31','Food display units',#6902,$,$);
+#6910=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_33','Food sneeze guards',#6902,$,$);
+#6911=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_35','Gas bains-marie',#6902,$,$);
+#6912=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_36','Glassware',#6902,$,$);
+#6913=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_40','Icemakers',#6902,$,$);
+#6914=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_42','Instant boiling and cold water taps',#6902,$,$);
+#6915=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_52','Mobile gas bains-marie',#6902,$,$);
+#6916=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_53','Mobile electric bains-marie',#6902,$,$);
+#6917=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_54','Mobile plain top hot cupboards',#6902,$,$);
+#6918=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_79','Serveware',#6902,$,$);
+#6919=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_84','Static plain top hot cupboards',#6902,$,$);
+#6920=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_23_86','Sushi trains',#6902,$,$);
+#6921=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24','Domestic cooking equipment',#6821,$,$);
+#6922=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_07','Built-in electric hobs',#6921,$,$);
+#6923=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_08','Built-in electric ovens',#6921,$,$);
+#6924=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_09','Built-in gas hobs',#6921,$,$);
+#6925=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_10','Built-in gas ovens',#6921,$,$);
+#6926=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_11','Built-in microwave ovens',#6921,$,$);
+#6927=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_15','Combination microwave ovens',#6921,$,$);
+#6928=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_24','Dual-fuel free-standing cookers',#6921,$,$);
+#6929=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_25','Electric free-standing cookers',#6921,$,$);
+#6930=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_26','Electric barbecues',#6921,$,$);
+#6931=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_27','Electric cooking ranges',#6921,$,$);
+#6932=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_33','Gas barbecues',#6921,$,$);
+#6933=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_34','Gas cooking ranges',#6921,$,$);
+#6934=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_35','Gas free-standing cookers',#6921,$,$);
+#6935=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_45','Kettles',#6921,$,$);
+#6936=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_51','Microwave ovens',#6921,$,$);
+#6937=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_24_81','Solid fuel barbecues',#6921,$,$);
+#6938=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_25','Domestic laundry equipment',#6821,$,$);
+#6939=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_25_45','Laundry tumble dryers',#6938,$,$);
+#6940=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_25_46','Laundry washer-dryers',#6938,$,$);
+#6941=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_25_47','Laundry washing machines',#6938,$,$);
+#6942=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_26','Domestic refrigerators and freezers',#6821,$,$);
+#6943=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_26_31','Freezers',#6942,$,$);
+#6944=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_26_32','Fridge-freezers',#6942,$,$);
+#6945=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_26_72','Refrigerators',#6942,$,$);
+#6946=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_27','Environmental protection equipment',#6821,$,$);
+#6947=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_27_22','Debris booms',#6946,$,$);
+#6948=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_27_56','Oil containment booms',#6946,$,$);
+#6949=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_29','Fire simulation equipment',#6821,$,$);
+#6950=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_29_01','Aircraft fire training simulators',#6949,$,$);
+#6951=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31','Commercial food refrigerators and freezers',#6821,$,$);
+#6952=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_06','Commercial blast chiller cabinets',#6951,$,$);
+#6953=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_08','Commercial blast freezer cabinets',#6951,$,$);
+#6954=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_11','Catering freezers',#6951,$,$);
+#6955=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_12','Catering refrigerators',#6951,$,$);
+#6956=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_13','Chest freezer covers',#6951,$,$);
+#6957=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_29','Commercial freezer cabinets',#6951,$,$);
+#6958=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_30','Commercial freezer counters',#6951,$,$);
+#6959=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_69','Refrigerated display cabinet airflow equipment',#6951,$,$);
+#6960=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_70','Commercial refrigerated cabinets',#6951,$,$);
+#6961=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_31_71','Commercial refrigerated counters',#6951,$,$);
+#6962=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35','General workshop equipment',#6821,$,$);
+#6963=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_15','Clipping machines',#6962,$,$);
+#6964=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_27','Electric kilns',#6962,$,$);
+#6965=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_35','Guillotines',#6962,$,$);
+#6966=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_50','Magnetic tool holders',#6962,$,$);
+#6967=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_60','Packaging machines',#6962,$,$);
+#6968=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_67','Punch machines',#6962,$,$);
+#6969=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_77','Shaping machines',#6962,$,$);
+#6970=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_80','Slotting machines',#6962,$,$);
+#6971=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_84','Strapping machines',#6962,$,$);
+#6972=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_35_88','Threading machines',#6962,$,$);
+#6973=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46','Laundry fittings and equipment',#6821,$,$);
+#6974=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_24','Dryer ironers',#6973,$,$);
+#6975=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_25','Dry work presses',#6973,$,$);
+#6976=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_31','Form finishers',#6973,$,$);
+#6977=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_39','Hydro extractors',#6973,$,$);
+#6978=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_42','Ironing tables',#6973,$,$);
+#6979=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_45','Laundry finishing cabinets',#6973,$,$);
+#6980=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_46','Laundry feeders',#6973,$,$);
+#6981=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_47','Laundry folders',#6973,$,$);
+#6982=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_48','Laundry recovery tanks',#6973,$,$);
+#6983=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_72','Roller ironers',#6973,$,$);
+#6984=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_77','Shirt finishers',#6973,$,$);
+#6985=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_82','Spotting cabinets',#6973,$,$);
+#6986=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_83','Spotting tables',#6973,$,$);
+#6987=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_90','Trouser presses',#6973,$,$);
+#6988=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_98','Water extraction presses',#6973,$,$);
+#6989=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_46_99','Wet work presses',#6973,$,$);
+#6990=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47','Laundry washers and dryers',#6821,$,$);
+#6991=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_06','Barrier washers',#6990,$,$);
+#6992=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_07','Batch laundry dryers',#6990,$,$);
+#6993=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_08','Batch laundry washers',#6990,$,$);
+#6994=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_15','Commercial washers',#6990,$,$);
+#6995=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_32','Front-loading washers',#6990,$,$);
+#6996=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_46','Laundry drying cabinets',#6990,$,$);
+#6997=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_91','Commercial tumble dryers',#6990,$,$);
+#6998=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_47_97','Commercial washer-dryers',#6990,$,$);
+#6999=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_50','Mail equipment',#6821,$,$);
+#7000=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_50_32','Franking machines',#6999,$,$);
+#7001=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_50_65','Post handling equipment',#6999,$,$);
+#7002=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51','Medical and laboratory equipment',#6821,$,$);
+#7003=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_04','Autoclaves',#7002,$,$);
+#7004=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_10','Calorimeters',#7002,$,$);
+#7005=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_16','Contamination control equipment',#7002,$,$);
+#7006=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_22','Defibrillator units',#7002,$,$);
+#7007=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_30','Fermenters',#7002,$,$);
+#7008=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_32','First aid kits',#7002,$,$);
+#7009=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_42','Incubators',#7002,$,$);
+#7010=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_44','Jacketed vessels',#7002,$,$);
+#7011=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_46','Laboratory containment isolators',#7002,$,$);
+#7012=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_51','Microscopes',#7002,$,$);
+#7013=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_59','Operating theatre equipment',#7002,$,$);
+#7014=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_60','Oscilloscopes',#7002,$,$);
+#7015=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_68','Radiation screens',#7002,$,$);
+#7016=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_70','Retrievers',#7002,$,$);
+#7017=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_84','Sterilization equipment',#7002,$,$);
+#7018=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_94','Vacuum furnaces',#7002,$,$);
+#7019=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_51_99','X-ray radiation screens',#7002,$,$);
+#7020=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53','Medical, laboratory and pharmacy refrigerators and freezers',#6821,$,$);
+#7021=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_46','Laboratory freezers',#7020,$,$);
+#7022=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_48','Laboratory refrigerators',#7020,$,$);
+#7023=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_51','Medical freezers',#7020,$,$);
+#7024=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_55','Mortuary foetal cabinets',#7020,$,$);
+#7025=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_63','Pharmacy freezers',#7020,$,$);
+#7026=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_65','Pharmacy refrigerators',#7020,$,$);
+#7027=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_70','Refrigerated mortuary storage units',#7020,$,$);
+#7028=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_53_92','Ultra-low freezers',#7020,$,$);
+#7029=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55','Mooring, docking and flotation equipment',#6821,$,$);
+#7030=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_03','Anchors and chains',#7029,$,$);
+#7031=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_05','Arch fenders',#7029,$,$);
+#7032=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_15','Capstan',#7029,$,$);
+#7033=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_20','Cone fenders',#7029,$,$);
+#7034=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_22','Cell fenders',#7029,$,$);
+#7035=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_27','Fairleads',#7029,$,$);
+#7036=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_29','Fender strips',#7029,$,$);
+#7037=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_30','Floats',#7029,$,$);
+#7038=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_35','Guide piles',#7029,$,$);
+#7039=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_50','Magnetic mooring devices',#7029,$,$);
+#7040=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_52','Mooring bollards',#7029,$,$);
+#7041=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_53','Mooring line tensioners',#7029,$,$);
+#7042=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_54','Mooring cleats',#7029,$,$);
+#7043=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_61','Pneumatic fenders',#7029,$,$);
+#7044=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_69','Quick-release mooring hooks',#7029,$,$);
+#7045=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_55_95','Vacuum mooring devices',#7029,$,$);
+#7046=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_58','Office equipment',#6821,$,$);
+#7047=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_58_23','Document shredders',#7046,$,$);
+#7048=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_58_46','Label makers',#7046,$,$);
+#7049=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_58_60','Paper laminators',#7046,$,$);
+#7050=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_62','Personal dryers',#6821,$,$);
+#7051=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_62_09','Body dryers',#7050,$,$);
+#7052=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_62_29','Face dryers',#7050,$,$);
+#7053=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_62_36','Hairdryers',#7050,$,$);
+#7054=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_62_37','Hand dryers',#7050,$,$);
+#7055=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_63','Photographic equipment',#6821,$,$);
+#7056=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_63_04','Automated film developing equipment',#7055,$,$);
+#7057=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_63_05','Automated printing equipment',#7055,$,$);
+#7058=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_63_28','Enlargers',#7055,$,$);
+#7059=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65','Preparation catering equipment',#6821,$,$);
+#7060=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_17','Drink making equipment',#7059,$,$);
+#7061=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_26','Commercial electric hot water dispensers',#7059,$,$);
+#7062=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_29','Food blenders',#7059,$,$);
+#7063=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_30','Food mincers',#7059,$,$);
+#7064=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_31','Commercial food mixers',#7059,$,$);
+#7065=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_32','Food smokers',#7059,$,$);
+#7066=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_45','Commercial gravity feed slicers',#7059,$,$);
+#7067=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_46','Hot cupboards',#7059,$,$);
+#7068=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_65','Commercial potato peelers',#7059,$,$);
+#7069=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_65_94','Commercial vegetable preparation machines',#7059,$,$);
+#7070=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_66','Process equipment',#6821,$,$);
+#7071=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_66_47','Light-gauge steel roll-forming machines',#7070,$,$);
+#7072=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_66_75','Sand bagging equipment',#7070,$,$);
+#7073=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67','Projectors',#6821,$,$);
+#7074=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67_14','Cinematic projectors',#7073,$,$);
+#7075=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67_22','Digital projectors',#7073,$,$);
+#7076=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67_29','Film projectors',#7073,$,$);
+#7077=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67_63','Planetarium projectors',#7073,$,$);
+#7078=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_67_79','Slide projectors',#7073,$,$);
+#7079=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_71','Recreation equipment',#6821,$,$);
+#7080=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_71_04','Arcade machines',#7079,$,$);
+#7081=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_71_87','Tanning units',#7079,$,$);
+#7082=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73','Rolling stock depot equipment',#6821,$,$);
+#7083=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_06','Bogie drops',#7082,$,$);
+#7084=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_07','Bogie presses',#7082,$,$);
+#7085=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_08','Bogie racks',#7082,$,$);
+#7086=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_09','Bogie turntables',#7082,$,$);
+#7087=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_10','Bogie workstands',#7082,$,$);
+#7088=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_23','Drophead buckeye couplers',#7082,$,$);
+#7089=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_24','Drophead buckeye drawgears',#7082,$,$);
+#7090=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_30','Fixed controlled emission toilets (CETs)',#7082,$,$);
+#7091=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_47','Lifting tables',#7082,$,$);
+#7092=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_70','Rail vehicle lifting jacks',#7082,$,$);
+#7093=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_73','Retractable buffers',#7082,$,$);
+#7094=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_75','Sand plant',#7082,$,$);
+#7095=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_95','Wheel drops',#7082,$,$);
+#7096=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_96','Wheel lathes',#7082,$,$);
+#7097=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_97','Wheelset presses',#7082,$,$);
+#7098=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_73_98','Wheel stops',#7082,$,$);
+#7099=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75','Safety equipment',#6821,$,$);
+#7100=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_01','Access cradles',#7099,$,$);
+#7101=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_08','Buoyancy aids',#7099,$,$);
+#7102=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_21','Davit arms',#7099,$,$);
+#7103=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_27','Electrically powered rescue winches',#7099,$,$);
+#7104=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_28','Evacuation chairs',#7099,$,$);
+#7105=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_29','Fall arrester devices',#7099,$,$);
+#7106=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_33','Gantries',#7099,$,$);
+#7107=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_35','Guided type fall arresters',#7099,$,$);
+#7108=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_36','Hand climbing devices',#7099,$,$);
+#7109=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_37','Harnesses and lanyards',#7099,$,$);
+#7110=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_39','Hoist equipment storage units',#7099,$,$);
+#7111=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_47','Lifebuoys',#7099,$,$);
+#7112=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_51','Manual rescue winches',#7099,$,$);
+#7113=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_55','Mullion guides',#7099,$,$);
+#7114=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_66','Protection netting',#7099,$,$);
+#7115=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_72','Rope and pulley devices',#7099,$,$);
+#7116=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_75','Safety access anchor devices',#7099,$,$);
+#7117=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_76','Safety access equipment winding handles',#7099,$,$);
+#7118=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_77','Safety harnesses',#7099,$,$);
+#7119=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_79','Safety netting',#7099,$,$);
+#7120=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_81','Spillage control kits',#7099,$,$);
+#7121=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_82','Stair climbing trolleys',#7099,$,$);
+#7122=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_83','Suspended access tracks',#7099,$,$);
+#7123=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_84','Suspended chairs',#7099,$,$);
+#7124=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_85','Suspension rigs',#7099,$,$);
+#7125=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_86','Suspension rope restraints',#7099,$,$);
+#7126=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_96','Working platforms',#7099,$,$);
+#7127=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_75_97','Working platform storage units',#7099,$,$);
+#7128=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84','Sports equipment',#6821,$,$);
+#7129=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_01','Abdominal machines',#7128,$,$);
+#7130=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_04','Arm machines',#7128,$,$);
+#7131=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_06','Back machines',#7128,$,$);
+#7132=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_11','Cable machines',#7128,$,$);
+#7133=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_13','Chest and shoulder machines',#7128,$,$);
+#7134=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_16','Cross trainers',#7128,$,$);
+#7135=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_26','Elliptical trainers',#7128,$,$);
+#7136=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_27','Exercise bikes',#7128,$,$);
+#7137=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_46','Leg machines',#7128,$,$);
+#7138=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_47','Leverage units',#7128,$,$);
+#7139=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_55','Multigyms',#7128,$,$);
+#7140=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_65','Pool, snooker and billiards tables',#7128,$,$);
+#7141=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_66','Power cages and racks',#7128,$,$);
+#7142=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_67','Power plates',#7128,$,$);
+#7143=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_68','Punch bags',#7128,$,$);
+#7144=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_72','Rowing machines',#7128,$,$);
+#7145=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_80','Smith machines',#7128,$,$);
+#7146=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_84','Steppers',#7128,$,$);
+#7147=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_86','Suspension trainers',#7128,$,$);
+#7148=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_90','Trampolines',#7128,$,$);
+#7149=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_91','Treadmills',#7128,$,$);
+#7150=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_92','Upper body trainers',#7128,$,$);
+#7151=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_84_94','Vertical knee raise and dip machines',#7128,$,$);
+#7152=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_85','Stage equipment',#6821,$,$);
+#7153=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_85_31','Fly/ pulley bars',#7152,$,$);
+#7154=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_85_65','Portable stages',#7152,$,$);
+#7155=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86','Swimming pool equipment',#6821,$,$);
+#7156=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_02','Air cushion equipment',#7155,$,$);
+#7157=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_08','Buoyancy-aided movable floors',#7155,$,$);
+#7158=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_10','Buoyancy-aided movable bulkheads',#7155,$,$);
+#7159=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_52','Mechanical drive movable floors',#7155,$,$);
+#7160=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_60','Pool structure-supported movable bulkheads',#7155,$,$);
+#7161=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_84','Surface agitation equipment',#7155,$,$);
+#7162=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_94','Water polo ball release devices',#7155,$,$);
+#7163=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_86_98','Wave machine equipment',#7155,$,$);
+#7164=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_96','Water control equipment',#6821,$,$);
+#7165=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_96_30','Flow control device chambers',#7164,$,$);
+#7166=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_96_31','Flow control devices',#7164,$,$);
+#7167=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_99','Weighing equipment',#6821,$,$);
+#7168=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_99_22','Digital scales',#7167,$,$);
+#7169=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_99_42','Industrial scales',#7167,$,$);
+#7170=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_99_45','Kitchen scales',#7167,$,$);
+#7171=IFCCLASSIFICATIONREFERENCE($,'Pr_40_70_99_62','Personnel weighing scales',#7167,$,$);
+#7172=IFCCLASSIFICATIONREFERENCE($,'Pr_45','Flora and fauna products',#8,$,$);
+#7173=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28','Fauna products',#7172,$,$);
+#7174=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_05','Animal pass products',#7173,$,$);
+#7175=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_05_04','Amphibian ramps',#7174,$,$);
+#7176=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_05_70','Resting posts',#7174,$,$);
+#7177=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_05_80','Small animal concrete tunnel sections',#7174,$,$);
+#7178=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30','Fish, eel and lamprey pass products',#7173,$,$);
+#7179=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_10','Bristle boards and mats',#7178,$,$);
+#7180=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_27','Eel tiles',#7178,$,$);
+#7181=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_29','Fish pass deflectors',#7178,$,$);
+#7182=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_30','Fish refuge meshes',#7178,$,$);
+#7183=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_42','Lamprey plates',#7178,$,$);
+#7184=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_44','Lamprey tiles',#7178,$,$);
+#7185=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_46','Larinier tiles',#7178,$,$);
+#7186=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_58','Pass baffles',#7178,$,$);
+#7187=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_60','Pass channels',#7178,$,$);
+#7188=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_65','Pet flaps',#7178,$,$);
+#7189=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_30_78','Siphon fish passes',#7178,$,$);
+#7190=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_65','Piscine deterrent products',#7173,$,$);
+#7191=IFCCLASSIFICATIONREFERENCE($,'Pr_45_28_65_30','Fish and eel mesh screens',#7190,$,$);
+#7192=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30','Flora products',#7172,$,$);
+#7193=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04','Artificial plants',#7192,$,$);
+#7194=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_02','Artificial grass',#7193,$,$);
+#7195=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_03','Artificial low growing trees',#7193,$,$);
+#7196=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_04','Artificial topiary and pleaching',#7193,$,$);
+#7197=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_05','Artificial trees',#7193,$,$);
+#7198=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_64','Polyester silk plants',#7193,$,$);
+#7199=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_04_66','Preserved plants',#7193,$,$);
+#7200=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10','Bulbs, corms, tubers and dormant roots',#7192,$,$);
+#7201=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10_04','Annual tubers',#7200,$,$);
+#7202=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10_10','Bulbs',#7200,$,$);
+#7203=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10_15','Corms',#7200,$,$);
+#7204=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10_62','Perennial roots',#7200,$,$);
+#7205=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_10_63','Perennial tubers',#7200,$,$);
+#7206=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36','Herbaceous and aquatic plants',#7192,$,$);
+#7207=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_02','Annual plugs',#7206,$,$);
+#7208=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_03','Aquatic plant bare roots and clumps',#7206,$,$);
+#7209=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_04','Aquatic plant bunches',#7206,$,$);
+#7210=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_05','Aquatic plant pots and baskets',#7206,$,$);
+#7211=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_06','Aquatic plant plugs',#7206,$,$);
+#7212=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_11','Cell-grown annuals',#7206,$,$);
+#7213=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_13','Cell-grown perennials',#7206,$,$);
+#7214=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_14','Container-grown aquatic plants',#7206,$,$);
+#7215=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_15','Container-grown annuals',#7206,$,$);
+#7216=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_16','Container-grown perennials',#7206,$,$);
+#7217=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_64','Perennial clumps',#7206,$,$);
+#7218=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_36_65','Perennial plugs',#7206,$,$);
+#7219=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76','Seeds',#7192,$,$);
+#7220=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_29','Flower seeds',#7219,$,$);
+#7221=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_32','Fruit seeds',#7219,$,$);
+#7222=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_34','Grass seeds',#7219,$,$);
+#7223=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_39','Hydroseeding mixes',#7219,$,$);
+#7224=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_48','Locally collected seeds',#7219,$,$);
+#7225=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_77','Site-grown temporary crop seeds',#7219,$,$);
+#7226=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_90','Tree and shrub seeds',#7219,$,$);
+#7227=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_94','Vegetable seeds',#7219,$,$);
+#7228=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_76_97','Wildflower seeds',#7219,$,$);
+#7229=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80','Shrubs and woody climbers',#7192,$,$);
+#7230=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_04','Bare-root climbers',#7229,$,$);
+#7231=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_06','Bare-root cutting-raised roses',#7229,$,$);
+#7232=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_08','Bare-root shrubs',#7229,$,$);
+#7233=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_10','Bare-root budded roses',#7229,$,$);
+#7234=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_11','Cell-grown climbers',#7229,$,$);
+#7235=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_12','Cell-grown shrubs',#7229,$,$);
+#7236=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_14','Container-grown bamboos',#7229,$,$);
+#7237=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_15','Container-grown budded roses',#7229,$,$);
+#7238=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_16','Container-grown climbers',#7229,$,$);
+#7239=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_18','Container-grown cutting-raised roses',#7229,$,$);
+#7240=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_20','Container-grown shrubs',#7229,$,$);
+#7241=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_71','Root-balled bamboos',#7229,$,$);
+#7242=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_80_73','Root-balled shrubs',#7229,$,$);
+#7243=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90','Trees',#7192,$,$);
+#7244=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_05','Bare-root conifers',#7243,$,$);
+#7245=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_07','Bare-root fruit trees',#7243,$,$);
+#7246=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_09','Bare-root trees',#7243,$,$);
+#7247=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_11','Cell-grown conifers',#7243,$,$);
+#7248=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_13','Cell-grown trees',#7243,$,$);
+#7249=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_17','Container-grown conifers',#7243,$,$);
+#7250=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_19','Container-grown fruit trees',#7243,$,$);
+#7251=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_21','Container-grown trees',#7243,$,$);
+#7252=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_72','Root-balled conifers',#7243,$,$);
+#7253=IFCCLASSIFICATIONREFERENCE($,'Pr_45_30_90_74','Root-balled trees',#7243,$,$);
+#7254=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31','Formless flora and fauna products',#7172,$,$);
+#7255=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03','Animal biocides',#7254,$,$);
+#7256=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_08','Biological controls',#7255,$,$);
+#7257=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_42','Insecticides',#7255,$,$);
+#7258=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_64','Poisons',#7255,$,$);
+#7259=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_72','Rodenticides',#7255,$,$);
+#7260=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_88','Termite-resistant granules',#7255,$,$);
+#7261=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_90','Termiticides',#7255,$,$);
+#7262=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_03_96','Vermicides\X2\00A0\X0\',#7255,$,$);
+#7263=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37','Herbicides',#7254,$,$);
+#7264=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37_15','Combined selective lawn herbicide and feed mixes',#7263,$,$);
+#7265=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37_56','Non-selective contact herbicides',#7263,$,$);
+#7266=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37_57','Non-selective residual herbicides',#7263,$,$);
+#7267=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37_58','Non-selective systemic herbicides',#7263,$,$);
+#7268=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_37_76','Selective herbicides',#7263,$,$);
+#7269=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52','Microbial biocides',#7254,$,$);
+#7270=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_03','Algaecides',#7269,$,$);
+#7271=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_07','Biocides',#7269,$,$);
+#7272=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_31','Fungicidal solutions',#7269,$,$);
+#7273=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_32','Fungicides',#7269,$,$);
+#7274=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_55','Non-oxidizing water treatment biocides',#7269,$,$);
+#7275=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_59','Oxidizing water treatment biocides',#7269,$,$);
+#7276=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_62','Plant fungicides',#7269,$,$);
+#7277=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_73','Root sealers',#7269,$,$);
+#7278=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_52_86','Surface biocides',#7269,$,$);
+#7279=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63','Plant-based fibres',#7254,$,$);
+#7280=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_14','Coir fibres',#7279,$,$);
+#7281=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_15','Combed wheat reed',#7279,$,$);
+#7282=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_16','Compostable plant material',#7279,$,$);
+#7283=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_30','Flax fibres',#7279,$,$);
+#7284=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_37','Hemp fibres',#7279,$,$);
+#7285=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_44','Jute fibres',#7279,$,$);
+#7286=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_47','Long straw',#7279,$,$);
+#7287=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_48','Loose straw',#7279,$,$);
+#7288=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_56','Natural bark',#7279,$,$);
+#7289=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_60','Paper bales',#7279,$,$);
+#7290=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_64','Playground bark',#7279,$,$);
+#7291=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_76','Sedge',#7279,$,$);
+#7292=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_78','Sisal fibres',#7279,$,$);
+#7293=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_80','Sphagnum moss',#7279,$,$);
+#7294=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_84','Straw bales',#7279,$,$);
+#7295=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_96','Water reed',#7279,$,$);
+#7296=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_97','Wood chips',#7279,$,$);
+#7297=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_63_98','Wood fibres',#7279,$,$);
+#7298=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89','Topsoils, feeds and growing media',#7254,$,$);
+#7299=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_08','Blood and bonemeal',#7298,$,$);
+#7300=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_15','Compost dressings',#7298,$,$);
+#7301=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_16','Composted materials',#7298,$,$);
+#7302=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_35','Green roof substrates',#7298,$,$);
+#7303=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_41','Imported growing media',#7298,$,$);
+#7304=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_42','Imported topsoils',#7298,$,$);
+#7305=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_43','Inorganic fertilizers',#7298,$,$);
+#7306=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_50','Manufactured growing media',#7298,$,$);
+#7307=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_51','Manufactured topsoils',#7298,$,$);
+#7308=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_52','Manures',#7298,$,$);
+#7309=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_55','Mycorrhizal inoculants',#7298,$,$);
+#7310=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_57','Non-compost turf dressings',#7298,$,$);
+#7311=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_58','Organic fertilizers',#7298,$,$);
+#7312=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_75','Sanitized and stabilized composts',#7298,$,$);
+#7313=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_80','Soil amelioration aggregates',#7298,$,$);
+#7314=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_81','Soil amelioration industrial by-products',#7298,$,$);
+#7315=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_82','Soil amelioration minerals',#7298,$,$);
+#7316=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_83','Soil conditioning agents',#7298,$,$);
+#7317=IFCCLASSIFICATIONREFERENCE($,'Pr_45_31_89_84','Soil moisture retention additives',#7298,$,$);
+#7318=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57','Non-rigid sheet, mat and strip flora and fauna products',#7172,$,$);
+#7319=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91','Turf and pre-planted substrates',#7318,$,$);
+#7320=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_20','Cultivated turf',#7319,$,$);
+#7321=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_56','Natural turf',#7319,$,$);
+#7322=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_63','Pre-planted coir rolls',#7319,$,$);
+#7323=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_64','Pre-planted pallets',#7319,$,$);
+#7324=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_65','Pre-planted vegetation mats',#7319,$,$);
+#7325=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_67','Pre-seeded mats',#7319,$,$);
+#7326=IFCCLASSIFICATIONREFERENCE($,'Pr_45_57_91_76','Seeded area turf edging',#7319,$,$);
+#7327=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63','Plant support products',#7172,$,$);
+#7328=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63','Plant containers',#7327,$,$);
+#7329=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_02','Aluminium divided modular units',#7328,$,$);
+#7330=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_03','Aluminium edge retaining profiles',#7328,$,$);
+#7331=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_04','Aluminium plant containers',#7328,$,$);
+#7332=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_05','Aquatic plant containers',#7328,$,$);
+#7333=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_07','Biodegradable plant containers',#7328,$,$);
+#7334=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_11','Cast and wrought iron plant containers',#7328,$,$);
+#7335=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_12','Cast iron plant containers',#7328,$,$);
+#7336=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_13','Ceramic plant containers',#7328,$,$);
+#7337=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_15','Concrete and reconstituted aggregate plant containers',#7328,$,$);
+#7338=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_17','Cropping bags',#7328,$,$);
+#7339=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_22','Divided modular planting units',#7328,$,$);
+#7340=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_29','Flower pouches',#7328,$,$);
+#7341=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_34','Glass fibre-reinforced plastic (GRP) and advanced composite (AC) plant containers',#7328,$,$);
+#7342=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_36','Hanging plant containers',#7328,$,$);
+#7343=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_37','Herb planters',#7328,$,$);
+#7344=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_38','Herb wheels',#7328,$,$);
+#7345=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_56','Natural planting cassettes',#7328,$,$);
+#7346=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_62','Plastics divided modular units',#7328,$,$);
+#7347=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_63','Plastics plant containers',#7328,$,$);
+#7348=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_65','Potato planters',#7328,$,$);
+#7349=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_72','Round plant containers',#7328,$,$);
+#7350=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_80','Square plant containers',#7328,$,$);
+#7351=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_81','Stainless steel divided modular units',#7328,$,$);
+#7352=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_82','Stainless steel edge retaining profiles',#7328,$,$);
+#7353=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_83','Stainless steel plant containers',#7328,$,$);
+#7354=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_84','Steel plant containers',#7328,$,$);
+#7355=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_85','Stone plant containers',#7328,$,$);
+#7356=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_86','Strawberry planters',#7328,$,$);
+#7357=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_87','Terracotta plant containers',#7328,$,$);
+#7358=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_88','Terrariums',#7328,$,$);
+#7359=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_89','Treated timber plant containers',#7328,$,$);
+#7360=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_90','Trough plant containers',#7328,$,$);
+#7361=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_92','Untreated timber plant containers',#7328,$,$);
+#7362=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_94','Vases',#7328,$,$);
+#7363=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_96','Wall planters',#7328,$,$);
+#7364=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_97','Window boxes',#7328,$,$);
+#7365=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_63_98','Wood-plastics composite plant containers',#7328,$,$);
+#7366=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64','Plant support and protection',#7327,$,$);
+#7367=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_11','Canes',#7366,$,$);
+#7368=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_14','Climbing plant supports',#7366,$,$);
+#7369=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_15','Concrete tree surrounds',#7366,$,$);
+#7370=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_30','Floral foam fixing media',#7366,$,$);
+#7371=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_33','Geocellular modular plastics structured soil units',#7366,$,$);
+#7372=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_35','Guy wire kits',#7366,$,$);
+#7373=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_63','Plastics mesh reinforcement',#7366,$,$);
+#7374=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_66','Polystyrene (PS) fixing media',#7366,$,$);
+#7375=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_67','Protective fencing',#7366,$,$);
+#7376=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_72','Root ball securing frames',#7366,$,$);
+#7377=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_78','Shrub protectors',#7366,$,$);
+#7378=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_80','Softwood pegs',#7366,$,$);
+#7379=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_83','Stake ties',#7366,$,$);
+#7380=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_84','Stakes',#7366,$,$);
+#7381=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_86','Tensioned wire trellises',#7366,$,$);
+#7382=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_87','Tree grilles',#7366,$,$);
+#7383=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_88','Tree guards',#7366,$,$);
+#7384=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_89','Tree protectors',#7366,$,$);
+#7385=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_90','Trellises',#7366,$,$);
+#7386=IFCCLASSIFICATIONREFERENCE($,'Pr_45_63_64_96','Weed control mats',#7366,$,$);
+#7387=IFCCLASSIFICATIONREFERENCE($,'Pr_50','Fabric accessory products',#8,$,$);
+#7388=IFCCLASSIFICATIONREFERENCE($,'Pr_60','Services and process source products',#8,$,$);
+#7389=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45','Water filtration and treatment products',#7388,$,$);
+#7390=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01','Aerator products',#7389,$,$);
+#7391=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_11','Cascade trays',#7390,$,$);
+#7392=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_30','Fine bubble diffuser manifolds',#7390,$,$);
+#7393=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_37','High-speed vertical shaft surface aerators',#7390,$,$);
+#7394=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_38','Horizontal shaft surface aerators',#7390,$,$);
+#7395=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_44','Jet aeration manifolds',#7390,$,$);
+#7396=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_48','Low-speed vertical shaft surface aerators',#7390,$,$);
+#7397=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_01_96','Wind-powered aerators',#7390,$,$);
+#7398=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03','Air blower products',#7389,$,$);
+#7399=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_12','Centrifugal blowers',#7398,$,$);
+#7400=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_55','Multicore blowers',#7398,$,$);
+#7401=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_72','Rotary lobe air blowers',#7398,$,$);
+#7402=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_73','Rotary screw blowers',#7398,$,$);
+#7403=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_78','Side channel blowers',#7398,$,$);
+#7404=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_03_90','Turbo blowers',#7398,$,$);
+#7405=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_05','Aquaculture products',#7389,$,$);
+#7406=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_05_65','Protein skimmers',#7405,$,$);
+#7407=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07','Biological filtration wastewater treatment products',#7389,$,$);
+#7408=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_21','De Hoxar separators',#7407,$,$);
+#7409=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_22','Dissolved air flotation plants',#7407,$,$);
+#7410=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_23','Disc biological filters',#7407,$,$);
+#7411=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_25','Drum filters',#7407,$,$);
+#7412=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_46','Lamella plate packs',#7407,$,$);
+#7413=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_51','Membrane bioreactors',#7407,$,$);
+#7414=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_60','Packaged lamella units',#7407,$,$);
+#7415=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_07_72','Rotating biological contactors',#7407,$,$);
+#7416=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_12','Centrifuge products',#7389,$,$);
+#7417=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_22','Decanters',#7389,$,$);
+#7418=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_22_30','Floating decanters',#7417,$,$);
+#7419=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_22_52','Motor-driven moving arm decanters',#7417,$,$);
+#7420=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_24','Distributor products',#7389,$,$);
+#7421=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_24_52','Motorized trickling filter distributor arms',#7420,$,$);
+#7422=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_24_60','Paddlewheel trickling filter distributor arms',#7420,$,$);
+#7423=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_24_72','Rotary reaction trickling filter distributor arms and siphons',#7420,$,$);
+#7424=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_24_90','Turbine trickling filter distributor arms',#7420,$,$);
+#7425=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_29','Filtration media',#7389,$,$);
+#7426=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_29_14','Clay trickling filter floor tiles',#7425,$,$);
+#7427=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_29_16','Concrete trickling filter floor tiles',#7425,$,$);
+#7428=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_29_65','Plastics structured cross-flow media',#7425,$,$);
+#7429=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_29_70','Random packed plastics media',#7425,$,$);
+#7430=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30','Flow control products',#7389,$,$);
+#7431=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_15','Composite plastics penstocks',#7430,$,$);
+#7432=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_23','Diffuser drums',#7430,$,$);
+#7433=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_31','Float-activated flow control units',#7430,$,$);
+#7434=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_52','Metal penstocks',#7430,$,$);
+#7435=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_83','Stop gates',#7430,$,$);
+#7436=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_84','Stop logs',#7430,$,$);
+#7437=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_93','Vortex water flow controls',#7430,$,$);
+#7438=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_95','Water baffles',#7430,$,$);
+#7439=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_96','Weir gates',#7430,$,$);
+#7440=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_30_97','Weir plates',#7430,$,$);
+#7441=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_33','Grit trap products',#7389,$,$);
+#7442=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_33_17','Cross-flow separators',#7441,$,$);
+#7443=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_33_57','Non-powered vortex separators',#7441,$,$);
+#7444=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_33_65','Powered vortex flow separators',#7441,$,$);
+#7445=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_34','Grit classifier products',#7389,$,$);
+#7446=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_34_15','Classifier vortex washer and dewaterers',#7445,$,$);
+#7447=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_34_71','Reciprocating rake classifiers',#7445,$,$);
+#7448=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_34_76','Screw classifiers',#7445,$,$);
+#7449=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_46','Launder trough products',#7389,$,$);
+#7450=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_46_46','Launder troughs',#7449,$,$);
+#7451=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_58','Odour control tank cover products',#7389,$,$);
+#7452=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_58_33','Gas containment covers',#7451,$,$);
+#7453=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_58_58','Odour control covers',#7451,$,$);
+#7454=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74','Scum removal products',#7389,$,$);
+#7455=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_30','Fixed scum pipes',#7454,$,$);
+#7456=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_72','Rotating scum pipes',#7454,$,$);
+#7457=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_75','Scum beaches',#7454,$,$);
+#7458=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_76','Scum removal boards',#7454,$,$);
+#7459=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_77','Scum removal valves',#7454,$,$);
+#7460=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_74_85','Surface scum scrapers',#7454,$,$);
+#7461=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_76','Sludge-dewatering products',#7389,$,$);
+#7462=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_76_07','Belt presses',#7461,$,$);
+#7463=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_76_22','Decanter centrifuges',#7461,$,$);
+#7464=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_76_65','Plate presses',#7461,$,$);
+#7465=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78','Sludge removal products',#7389,$,$);
+#7466=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78_08','Bottom sludge scrapers',#7465,$,$);
+#7467=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78_12','Chain and flight scrapers',#7465,$,$);
+#7468=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78_72','Rotating full bridge scrapers',#7465,$,$);
+#7469=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78_73','Rotating half bridge scrapers',#7465,$,$);
+#7470=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_78_78','Siphons',#7465,$,$);
+#7471=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_79','Sludge screening products',#7389,$,$);
+#7472=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_79_34','Gravity sludge screens',#7471,$,$);
+#7473=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_79_65','Pressurized sludge screens',#7471,$,$);
+#7474=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80','Sludge thickening products',#7389,$,$);
+#7475=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80_21','Disc thickeners',#7474,$,$);
+#7476=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80_24','Drum thickeners',#7474,$,$);
+#7477=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80_34','Gravity belt thickeners',#7474,$,$);
+#7478=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80_63','Picket fence thickeners',#7474,$,$);
+#7479=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_80_75','Screw thickeners',#7474,$,$);
+#7480=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_85','Suspended growth and tertiary wastewater treatment products',#7389,$,$);
+#7481=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90','Wastewater and water mixer products',#7389,$,$);
+#7482=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90_04','Air-driven mixers',#7481,$,$);
+#7483=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90_15','Channel mixers',#7481,$,$);
+#7484=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90_51','Mechanical mixers',#7481,$,$);
+#7485=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90_85','Static pipe mixers',#7481,$,$);
+#7486=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_90_86','Submersible propeller mixers',#7481,$,$);
+#7487=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_93','Wastewater screenings treatment products',#7389,$,$);
+#7488=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_93_42','Impeller and compactor tank wash',#7487,$,$);
+#7489=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_93_50','Macerator and dewaterer tank wash',#7487,$,$);
+#7490=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_93_75','Screw compactors',#7487,$,$);
+#7491=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_93_96','Washer compactors',#7487,$,$);
+#7492=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94','Wastewater screening and water abstraction products',#7389,$,$);
+#7493=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_06','Band screens',#7492,$,$);
+#7494=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_08','Brushed and macerator combined screens',#7492,$,$);
+#7495=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_09','Brushed screens',#7492,$,$);
+#7496=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_15','Coanda screens',#7492,$,$);
+#7497=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_23','Disc screens',#7492,$,$);
+#7498=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_25','Drum screens',#7492,$,$);
+#7499=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_29','Finescreens',#7492,$,$);
+#7500=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_30','Flushing screens',#7492,$,$);
+#7501=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_34','Grab screens',#7492,$,$);
+#7502=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_70','Raked bar screens',#7492,$,$);
+#7503=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_71','Rotating comb screens',#7492,$,$);
+#7504=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_72','Rotary drum screens',#7492,$,$);
+#7505=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_73','Rotating bar interceptors',#7492,$,$);
+#7506=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_78','Slot screens',#7492,$,$);
+#7507=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_80','Spiral and compaction combined screens',#7492,$,$);
+#7508=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_81','Spiral screens',#7492,$,$);
+#7509=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_83','Static perforated plate screens',#7492,$,$);
+#7510=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_84','Static wedge wire screens',#7492,$,$);
+#7511=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_94_85','Step screens',#7492,$,$);
+#7512=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_95','Wastewater settlement products',#7389,$,$);
+#7513=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_95_15','Conical glass fibre-reinforced plastics (GRP) settlement tanks',#7512,$,$);
+#7514=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_96','Wastewater tank-flushing products',#7389,$,$);
+#7515=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_96_14','Circular tank-flushing vessels',#7514,$,$);
+#7516=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_96_30','Flushing gates',#7514,$,$);
+#7517=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_96_89','Tipping troughs',#7514,$,$);
+#7518=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_96_94','Vacuum-operated storage reservoirs',#7514,$,$);
+#7519=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97','Wastewater trash rake products',#7389,$,$);
+#7520=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97_05','Articulated arm trash rakes',#7519,$,$);
+#7521=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97_20','Curved trash rakes',#7519,$,$);
+#7522=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97_85','Suspended trash rakes',#7519,$,$);
+#7523=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97_88','Telescopic arm trash rakes',#7519,$,$);
+#7524=IFCCLASSIFICATIONREFERENCE($,'Pr_60_45_97_94','Vertical grab rakes',#7519,$,$);
+#7525=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50','Tank, cylinder and vessel products',#7388,$,$);
+#7526=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_10','Bulk storage tanks',#7525,$,$);
+#7527=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_10_34','Glass fused steel tanks',#7526,$,$);
+#7528=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_10_64','Plastics tanks',#7526,$,$);
+#7529=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_10_66','Precast concrete modular tanks',#7526,$,$);
+#7530=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20','Cylinders and buffer vessels',#7525,$,$);
+#7531=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_02','Accumulators',#7530,$,$);
+#7532=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_10','Buffer vessels',#7530,$,$);
+#7533=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_21','Direct hot water storage cylinders',#7530,$,$);
+#7534=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_22','Direct insulated hot water combination units',#7530,$,$);
+#7535=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_23','Double feed indirect hot water storage cylinders',#7530,$,$);
+#7536=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_24','Double feed indirect insulated hot water combination units',#7530,$,$);
+#7537=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_25','Dual coil hot water storage cylinders',#7530,$,$);
+#7538=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_28','Expansion vessels',#7530,$,$);
+#7539=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_42','Indirectly heated unvented hot water storage cylinders',#7530,$,$);
+#7540=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_77','Single feed indirect insulated combination units',#7530,$,$);
+#7541=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_20_78','Single feed indirect hot water storage cylinders',#7530,$,$);
+#7542=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33','Gas storage cylinders',#7525,$,$);
+#7543=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_14','Compressed air cylinders',#7542,$,$);
+#7544=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_15','Compressed gas cylinders',#7542,$,$);
+#7545=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_37','High-pressure fire-extinguishing gas storage cylinders',#7542,$,$);
+#7546=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_46','Liquefied gas cylinders',#7542,$,$);
+#7547=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_47','Liquid oxygen cylinders',#7542,$,$);
+#7548=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_48','Low-pressure fire-extinguishing gas storage cylinders',#7542,$,$);
+#7549=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_33_51','Medical compressed gas cylinders',#7542,$,$);
+#7550=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41','Irrigation and water feature reservoirs',#7525,$,$);
+#7551=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_41','Integral water features',#7550,$,$);
+#7552=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_53','Modular irrigation reservoirs',#7550,$,$);
+#7553=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_65','Preformed reservoirs',#7550,$,$);
+#7554=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_66','Preformed rigid pond liners',#7550,$,$);
+#7555=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_77','Sealed irrigation reservoirs',#7550,$,$);
+#7556=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_41_96','Water feature containers',#7550,$,$);
+#7557=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46','Liquid fuel tank accessories',#7525,$,$);
+#7558=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_45','Liquid fuel tank contents gauges',#7557,$,$);
+#7559=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_46','Liquid fuel tank drip trays',#7557,$,$);
+#7560=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_47','Liquid fuel tank fill points',#7557,$,$);
+#7561=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_48','Liquid fuel tank outflow heaters',#7557,$,$);
+#7562=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_49','Liquid fuel tank heaters',#7557,$,$);
+#7563=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_59','Overflow prevention devices',#7557,$,$);
+#7564=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_46_87','Tank access chambers',#7557,$,$);
+#7565=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47','Liquid fuel tanks',#7525,$,$);
+#7566=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_11','Liquid fuel service tanks',#7565,$,$);
+#7567=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_12','Carbon steel liquid fuel tanks',#7565,$,$);
+#7568=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_13','Carbon steel oil tanks',#7565,$,$);
+#7569=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_34','Glass fibre-reinforced plastics liquid fuel tanks',#7565,$,$);
+#7570=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_63','Plastics oil tanks',#7565,$,$);
+#7571=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_47_84','Stainless steel liquid fuel tanks',#7565,$,$);
+#7572=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67','Pressure storage vessels',#7525,$,$);
+#7573=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_31','Foam firefighting tanks',#7572,$,$);
+#7574=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_48','Liquefied petroleum gas (LPG) storage vessels',#7572,$,$);
+#7575=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_52','Metal liquid or gas pressure vessels',#7572,$,$);
+#7576=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_70','Refrigerant recovery storage vessels',#7572,$,$);
+#7577=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_93','Vacuum flasks',#7572,$,$);
+#7578=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_67_94','Vacuum insulated evaporator (VIE) storage vessels',#7572,$,$);
+#7579=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_85','Storage of solid materials',#7525,$,$);
+#7580=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_85_01','Above-ground storage containers for solid fuel',#7579,$,$);
+#7581=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_85_07','Below-ground storage containers for solid fuel',#7579,$,$);
+#7582=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_85_70','Refuse storage containers',#7579,$,$);
+#7583=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_85_78','Silos',#7579,$,$);
+#7584=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96','Water storage products',#7525,$,$);
+#7585=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_15','Concrete tanks',#7584,$,$);
+#7586=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_20','Cylindrical tanks',#7584,$,$);
+#7587=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_31','Geocellular modular plastics storage units',#7584,$,$);
+#7588=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_32','Galvanized steel cisterns',#7584,$,$);
+#7589=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_33','Galvanized steel tanks',#7584,$,$);
+#7590=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_34','Glass fibre-reinforced plastics cisterns',#7584,$,$);
+#7591=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_35','Glass fibre-reinforced pressure tanks',#7584,$,$);
+#7592=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_36','Glass fibre-reinforced plastics tanks',#7584,$,$);
+#7593=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_52','Moulded plastics tanks',#7584,$,$);
+#7594=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_53','Moulded plastics cisterns',#7584,$,$);
+#7595=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_56','Natural stone aquifer blocks',#7584,$,$);
+#7596=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_62','Piped attenuation structures',#7584,$,$);
+#7597=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_63','Plastics bladder water storage tanks',#7584,$,$);
+#7598=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_64','Polyethylene (PE) tanks',#7584,$,$);
+#7599=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_65','Polypropylene (PP) tanks',#7584,$,$);
+#7600=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_70','Rainwater storage butts',#7584,$,$);
+#7601=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_76','Sectional carbon steel tanks',#7584,$,$);
+#7602=IFCCLASSIFICATIONREFERENCE($,'Pr_60_50_96_84','Stainless steel tanks',#7584,$,$);
+#7603=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55','Liquid and gas source products',#7388,$,$);
+#7604=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31','Inlet connections and fill connections',#7603,$,$);
+#7605=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_29','Foam inlet adaptors',#7604,$,$);
+#7606=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_30','Foam inlet boxes',#7604,$,$);
+#7607=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_42','Riser inlet breechings and boxes',#7604,$,$);
+#7608=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_47','Liquefied petroleum gas (LPG) fill connections',#7604,$,$);
+#7609=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_96','Water inlet adaptors',#7604,$,$);
+#7610=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_31_97','Water inlet boxes',#7604,$,$);
+#7611=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33','Gas and vacuum generators',#7603,$,$);
+#7612=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_04','Anaerobic digesters',#7611,$,$);
+#7613=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_13','Chlorine generators',#7611,$,$);
+#7614=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_39','Hydrogen generators',#7611,$,$);
+#7615=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_56','Nitrogen generators',#7611,$,$);
+#7616=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_60','Ozone generators',#7611,$,$);
+#7617=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_73','Pressure swing adsorption (PSA) plant',#7611,$,$);
+#7618=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_81','Sodium hypochlorite generators',#7611,$,$);
+#7619=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_33_94','Vacuum plant',#7611,$,$);
+#7620=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96','Water treatment chemicals',#7603,$,$);
+#7621=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_06','Bacteria and biofouling inhibitors',#7620,$,$);
+#7622=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_07','Biocide chemicals',#7620,$,$);
+#7623=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_08','Biodispersant chemicals',#7620,$,$);
+#7624=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_12','Chlorination chemicals',#7620,$,$);
+#7625=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_15','Corrosion inhibitor chemicals',#7620,$,$);
+#7626=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_16','Corrosion inhibitor chemicals for closed circuits',#7620,$,$);
+#7627=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_21','De-chlorination chemicals',#7620,$,$);
+#7628=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_22','Dispersant chemicals',#7620,$,$);
+#7629=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_58','Odour control chemicals',#7620,$,$);
+#7630=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_64','pH correction chemicals',#7620,$,$);
+#7631=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_77','Scale inhibitor chemicals',#7620,$,$);
+#7632=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_78','Septicity control chemicals',#7620,$,$);
+#7633=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_79','Settlement coagulants',#7620,$,$);
+#7634=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_96_96','Water plumbosolvency reduction chemicals',#7620,$,$);
+#7635=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97','Water treatment products',#7603,$,$);
+#7636=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_02','Alkalinity dosing units',#7635,$,$);
+#7637=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_04','Airlift injectors',#7635,$,$);
+#7638=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_06','Bioaugmentation devices',#7635,$,$);
+#7639=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_07','Biocide dosing pots',#7635,$,$);
+#7640=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_11','Chemical disinfection devices',#7635,$,$);
+#7641=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_12','Chemical dosing pots',#7635,$,$);
+#7642=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_13','Chemical injectors',#7635,$,$);
+#7643=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_14','Clarifiers',#7635,$,$);
+#7644=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_15','Coagulant dosing units',#7635,$,$);
+#7645=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_17','Copper and silver ionization units',#7635,$,$);
+#7646=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_20','Deionization units',#7635,$,$);
+#7647=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_21','Desalination units',#7635,$,$);
+#7648=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_22','Disinfectant dosing units',#7635,$,$);
+#7649=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_23','Distillation units',#7635,$,$);
+#7650=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_24','Drinking water nitrate removal devices',#7635,$,$);
+#7651=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_27','Electrodialysis units',#7635,$,$);
+#7652=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_41','Inline filter units',#7635,$,$);
+#7653=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_43','Ion exchange demineralization units',#7635,$,$);
+#7654=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_44','Ion exchange softening units',#7635,$,$);
+#7655=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_50','Magnetic water conditioners',#7635,$,$);
+#7656=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_59','Ozonation disinfection units',#7635,$,$);
+#7657=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_63','pH control dosing units',#7635,$,$);
+#7658=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_72','Reverse osmosis units',#7635,$,$);
+#7659=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_85','Sterilizers',#7635,$,$);
+#7660=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_86','Surface skimmers',#7635,$,$);
+#7661=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_90','Thermal disinfection units',#7635,$,$);
+#7662=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_93','Ultraviolet (UV) disinfection devices',#7635,$,$);
+#7663=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_94','Vacuum degassers',#7635,$,$);
+#7664=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_95','Water aerators',#7635,$,$);
+#7665=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_96','Water conditioners',#7635,$,$);
+#7666=IFCCLASSIFICATIONREFERENCE($,'Pr_60_55_97_97','Water treatment dosing pots',#7635,$,$);
+#7667=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60','Heating and cooling source products',#7388,$,$);
+#7668=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08','Boilers',#7667,$,$);
+#7669=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_08','Biomass boilers',#7668,$,$);
+#7670=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_09','Boiler superheaters',#7668,$,$);
+#7671=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_15','Combination gas-fired condensing boilers',#7668,$,$);
+#7672=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_24','Dual-fuel cast iron boilers',#7668,$,$);
+#7673=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_25','Dual-fuel steel shell boilers',#7668,$,$);
+#7674=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_27','Electric boilers',#7668,$,$);
+#7675=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_33','Gas-fired boilers',#7668,$,$);
+#7676=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_34','Gas-fired condensing boilers',#7668,$,$);
+#7677=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_35','Gas-fired cast iron boilers',#7668,$,$);
+#7678=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_36','Gas-fired steel shell boilers',#7668,$,$);
+#7679=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_37','Gas-fired water tube boilers',#7668,$,$);
+#7680=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_39','Hydrogen boilers',#7668,$,$);
+#7681=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_56','Oil-fired condensing boilers',#7668,$,$);
+#7682=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_57','Oil-fired non-condensing boilers',#7668,$,$);
+#7683=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_58','Oil-fired cast iron boilers',#7668,$,$);
+#7684=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_59','Oil-fired steel shell boilers',#7668,$,$);
+#7685=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_60','Oil-fired water tube boilers',#7668,$,$);
+#7686=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_80','Solid fuel cast iron boilers',#7668,$,$);
+#7687=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_81','Solid fuel steel shell boilers',#7668,$,$);
+#7688=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_83','Submerged panel heat exchangers',#7668,$,$);
+#7689=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_08_84','Submerged pipe heat exchangers',#7668,$,$);
+#7690=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10','Burners',#7667,$,$);
+#7691=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_03','Atmospheric gas burners',#7690,$,$);
+#7692=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_05','Atomizing oil burners',#7690,$,$);
+#7693=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_08','Blown gas burners',#7690,$,$);
+#7694=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_29','Forced draught dual-fuel burners',#7690,$,$);
+#7695=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_30','Forced draught gas burners',#7690,$,$);
+#7696=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_31','Forced draught oil burners',#7690,$,$);
+#7697=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_10_65','Pre-mix gas burners',#7690,$,$);
+#7698=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13','Chillers and cooling towers',#7667,$,$);
+#7699=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_01','Adsorption chillers',#7698,$,$);
+#7700=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_02','Adiabatic chillers',#7698,$,$);
+#7701=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_03','Air blast chillers',#7698,$,$);
+#7702=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_04','Air-cooled liquid chillers',#7698,$,$);
+#7703=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_14','Closed-circuit cooling towers',#7698,$,$);
+#7704=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_22','Direct-fired absorption liquid chillers',#7698,$,$);
+#7705=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_27','Electric-driven refrigerant compressors',#7698,$,$);
+#7706=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_28','Evaporative condensers',#7698,$,$);
+#7707=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_33','Gas-engine-driven refrigerant compressors',#7698,$,$);
+#7708=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_38','Hot water-fired absorption liquid chillers',#7698,$,$);
+#7709=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_48','Low-temperature refrigeration compressors',#7698,$,$);
+#7710=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_51','Medium-temperature refrigeration compressors',#7698,$,$);
+#7711=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_59','Open circuit cooling towers',#7698,$,$);
+#7712=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_60','Packaged process chillers',#7698,$,$);
+#7713=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_70','Refrigeration evaporators',#7698,$,$);
+#7714=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_80','Solar thermal absorption chillers',#7698,$,$);
+#7715=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_84','Steam fired absorption liquid chillers',#7698,$,$);
+#7716=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_13_96','Water-cooled liquid chillers',#7698,$,$);
+#7717=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36','Heat recovery distribution equipment',#7667,$,$);
+#7718=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_26','Economizers',#7717,$,$);
+#7719=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_36','Heat pipes',#7717,$,$);
+#7720=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_38','Horizontal wastewater heat exchangers',#7717,$,$);
+#7721=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_55','Multiple wastewater heat exchangers',#7717,$,$);
+#7722=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_60','Passive heat exchangers',#7717,$,$);
+#7723=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_62','Plate recuperators',#7717,$,$);
+#7724=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_72','Regenerators',#7717,$,$);
+#7725=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_74','Run-around coils',#7717,$,$);
+#7726=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_88','Thermal wheels',#7717,$,$);
+#7727=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_36_94','Vertical wastewater heat exchangers',#7717,$,$);
+#7728=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38','Calorifiers and plate heat exchangers',#7667,$,$);
+#7729=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_36','Heat interface units',#7728,$,$);
+#7730=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_38','Hot water non-storage calorifiers',#7728,$,$);
+#7731=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_42','Instantaneous plate heat exchangers',#7728,$,$);
+#7732=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_62','Plate heat exchangers',#7728,$,$);
+#7733=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_84','Steam to water non-storage calorifiers',#7728,$,$);
+#7734=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_38_85','Storage calorifiers',#7728,$,$);
+#7735=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81','Solar heat collectors',#7667,$,$);
+#7736=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_26','Evacuated tube solar collectors',#7735,$,$);
+#7737=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_30','Flat plate solar collectors',#7735,$,$);
+#7738=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_78','Single-line pump stations',#7735,$,$);
+#7739=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_80','Solar heat stores',#7735,$,$);
+#7740=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_81','Solar trackers',#7735,$,$);
+#7741=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_81_91','Twin-line pump stations',#7735,$,$);
+#7742=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_83','Solid fuel and waste handling equipment',#7667,$,$);
+#7743=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_83_05','Ash handling equipment',#7742,$,$);
+#7744=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_83_81','Solid fuel handling equipment',#7742,$,$);
+#7745=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_84','Steam generators',#7667,$,$);
+#7746=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_84_14','Clean steam generators',#7745,$,$);
+#7747=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96','Water heaters',#7667,$,$);
+#7748=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_26','Electric instantaneous shower units',#7747,$,$);
+#7749=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_27','Electric instantaneous water heaters',#7747,$,$);
+#7750=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_28','Electric storage water heaters',#7747,$,$);
+#7751=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_31','Gas-fired condensing water heaters',#7747,$,$);
+#7752=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_33','Gas-fired instantaneous water heaters',#7747,$,$);
+#7753=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_34','Gas-fired storage water heaters',#7747,$,$);
+#7754=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_37','Heat pump water heaters',#7747,$,$);
+#7755=IFCCLASSIFICATIONREFERENCE($,'Pr_60_60_96_42','Immersion heaters',#7747,$,$);
+#7756=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65','Air and fume source products',#7388,$,$);
+#7757=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_03','Air-handling units',#7756,$,$);
+#7758=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_03_28','Extract and return air-handling units',#7757,$,$);
+#7759=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_03_86','Supply air-handling units',#7757,$,$);
+#7760=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_03_87','Supply and return air-handling units',#7757,$,$);
+#7761=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31','Fume cupboards and safety cabinets',#7756,$,$);
+#7762=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_33','General-purpose fume cupboards',#7761,$,$);
+#7763=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_46','Laminar flow cabinets',#7761,$,$);
+#7764=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_52','Microbiological safety cabinets',#7761,$,$);
+#7765=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_71','Recirculatory filtration fume cupboards',#7761,$,$);
+#7766=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_76','School fume cupboards',#7761,$,$);
+#7767=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_31_94','Variable air volume fume cupboards',#7761,$,$);
+#7768=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37','Heating and cooling coils',#7756,$,$);
+#7769=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_12','Chilled water cooling coils',#7768,$,$);
+#7770=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_27','Electric heater batteries',#7768,$,$);
+#7771=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_33','Gas-fired heater batteries',#7768,$,$);
+#7772=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_41','Intercoolers',#7768,$,$);
+#7773=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_47','Low-temperature hot water heating coils',#7768,$,$);
+#7774=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_37_72','Refrigerant cooling coils',#7768,$,$);
+#7775=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94','Ventilation hoods and extract points',#7756,$,$);
+#7776=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_29','Fume capturing hoods',#7775,$,$);
+#7777=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_30','Fume enclosing hoods',#7775,$,$);
+#7778=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_31','Fume receiving hoods',#7775,$,$);
+#7779=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_32','Fume extract points',#7775,$,$);
+#7780=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_45','Kitchen canopies',#7775,$,$);
+#7781=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_46','Kitchen extractor hoods',#7775,$,$);
+#7782=IFCCLASSIFICATIONREFERENCE($,'Pr_60_65_94_94','Vehicle exhaust nozzles',#7775,$,$);
+#7783=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70','Power supply products',#7388,$,$);
+#7784=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06','Batteries and chargers',#7783,$,$);
+#7785=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_05','Automatic battery chargers',#7784,$,$);
+#7786=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_07','Batteries',#7784,$,$);
+#7787=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_08','Battery boosters',#7784,$,$);
+#7788=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_12','Central battery supply units',#7784,$,$);
+#7789=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_23','Battery charge controllers',#7784,$,$);
+#7790=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_28','Emergency call battery backup supply',#7784,$,$);
+#7791=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_46','Lead-acid starter batteries',#7784,$,$);
+#7792=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_67','Photovoltaic (PV) generator junction boxes',#7784,$,$);
+#7793=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_71','Rechargeable dry cell battery chargers',#7784,$,$);
+#7794=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_77','Sealed nickel-cadmium batteries',#7784,$,$);
+#7795=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_94','Valve-regulated lead-acid cells',#7784,$,$);
+#7796=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_95','Vented lead-acid batteries',#7784,$,$);
+#7797=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_06_96','Vented nickel cadmium batteries',#7784,$,$);
+#7798=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_10','Charging stations',#7783,$,$);
+#7799=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_10_53','Mobile device charging hubs',#7798,$,$);
+#7800=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22','Distribution boxes and switchboards',#7783,$,$);
+#7801=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_11','Cable distribution cabinets',#7800,$,$);
+#7802=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_19','Cubicle switchboards',#7800,$,$);
+#7803=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_22','Distribution boards',#7800,$,$);
+#7804=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_28','Extension boxes',#7800,$,$);
+#7805=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_46','Lighting distribution boxes',#7800,$,$);
+#7806=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_50','Master distribution boxes',#7800,$,$);
+#7807=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_79','Slave distribution boxes',#7800,$,$);
+#7808=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_22_80','Spreader boxes',#7800,$,$);
+#7809=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_28','Extra-high-voltage switchgear',#7783,$,$);
+#7810=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36','High-voltage switchgear and transformers',#7783,$,$);
+#7811=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_06','High-voltage busbar metering panels',#7810,$,$);
+#7812=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_07','High-voltage bus-section panels',#7810,$,$);
+#7813=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_12','High-voltage circuit breakers',#7810,$,$);
+#7814=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_18','High-voltage current transformers',#7810,$,$);
+#7815=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_22','High-voltage disconnectors',#7810,$,$);
+#7816=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_24','High-voltage dry-type transformers',#7810,$,$);
+#7817=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_26','High-voltage earthing switches',#7810,$,$);
+#7818=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_30','High-voltage liquid-immersed transformers',#7810,$,$);
+#7819=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_37','High-voltage fuses',#7810,$,$);
+#7820=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_41','High-voltage inductive voltage transformers',#7810,$,$);
+#7821=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_53','High-voltage modular switchboards',#7810,$,$);
+#7822=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_56','High-voltage neutral earth resistor panels',#7810,$,$);
+#7823=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_58','High-voltage optical current transformers',#7810,$,$);
+#7824=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_70','High-voltage rectiformers',#7810,$,$);
+#7825=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_72','High-voltage ring main units',#7810,$,$);
+#7826=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_80','High-voltage switch-disconnectors',#7810,$,$);
+#7827=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_81','High-voltage switch-fuse combinations',#7810,$,$);
+#7828=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_82','High-voltage switches',#7810,$,$);
+#7829=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_83','High-voltage switchgear protection and control modules',#7810,$,$);
+#7830=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_36_94','High-voltage vacuum circuit breaker panels',#7810,$,$);
+#7831=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48','Low-voltage switchgear',#7783,$,$);
+#7832=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_03','Aluminium busbars',#7831,$,$);
+#7833=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_05','Automatic transfer switching equipment (TSE)',#7831,$,$);
+#7834=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_06','Busbar chambers',#7831,$,$);
+#7835=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_07','Busbar trunking feed units',#7831,$,$);
+#7836=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_08','Busbar trunking fire barrier units',#7831,$,$);
+#7837=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_09','Busbar trunking tap-off units',#7831,$,$);
+#7838=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_15','Copper busbars',#7831,$,$);
+#7839=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_26','Electromechanical relays',#7831,$,$);
+#7840=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_27','Electrical cut-outs',#7831,$,$);
+#7841=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_30','Fireman\X2\2019\X0\s emergency switches',#7831,$,$);
+#7842=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_44','Low-voltage fuse-switch-disconnectors',#7831,$,$);
+#7843=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_46','Low-voltage switch-disconnector fuses',#7831,$,$);
+#7844=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_47','Low-voltage switch-disconnectors',#7831,$,$);
+#7845=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_48','Low-voltage switches',#7831,$,$);
+#7846=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_49','Low-voltage switchgear tripping units',#7831,$,$);
+#7847=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_52','Manual changeover switches',#7831,$,$);
+#7848=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_62','Photovoltaic array junction boxes',#7831,$,$);
+#7849=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_63','Photovoltaic generator junction boxes',#7831,$,$);
+#7850=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_66','Power busbar trunking',#7831,$,$);
+#7851=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_68','Powertrack',#7831,$,$);
+#7852=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_69','Powertrack feed units',#7831,$,$);
+#7853=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_70','Powertrack tap-off units',#7831,$,$);
+#7854=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_88','Transfer switching equipment (TSE)',#7831,$,$);
+#7855=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_48_90','Trapped key interlocks',#7831,$,$);
+#7856=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50','Medium-voltage switchgear and transformers',#7783,$,$);
+#7857=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_06','Medium-voltage busbar metering panels',#7856,$,$);
+#7858=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_07','Medium-voltage bus-section panels',#7856,$,$);
+#7859=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_12','Medium-voltage circuit breakers',#7856,$,$);
+#7860=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_18','Medium-voltage current transformers',#7856,$,$);
+#7861=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_22','Medium-voltage disconnectors',#7856,$,$);
+#7862=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_24','Medium-voltage dry-type transformers',#7856,$,$);
+#7863=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_26','Medium-voltage earthing switches',#7856,$,$);
+#7864=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_30','Medium-voltage liquid-immersed transformers',#7856,$,$);
+#7865=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_37','Medium-voltage fuses',#7856,$,$);
+#7866=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_41','Medium-voltage inductive voltage transformers',#7856,$,$);
+#7867=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_53','Medium-voltage modular switchboards',#7856,$,$);
+#7868=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_56','Medium-voltage neutral earth resistor panels',#7856,$,$);
+#7869=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_58','Medium-voltage optical current transformers',#7856,$,$);
+#7870=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_70','Medium-voltage rectiformers',#7856,$,$);
+#7871=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_72','Medium-voltage ring main units',#7856,$,$);
+#7872=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_80','Medium-voltage switch-disconnectors',#7856,$,$);
+#7873=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_81','Medium-voltage switch-fuse combinations',#7856,$,$);
+#7874=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_82','Medium-voltage switches',#7856,$,$);
+#7875=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_83','Medium-voltage switchgear protection and control modules',#7856,$,$);
+#7876=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_50_94','Medium-voltage vacuum circuit breaker panels',#7856,$,$);
+#7877=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64','Power conditioning supply equipment',#7783,$,$);
+#7878=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64_22','Direct current (d.c.) switch mode power supply units',#7877,$,$);
+#7879=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64_84','Static frequency converters',#7877,$,$);
+#7880=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64_86','Static inverter power supply units',#7877,$,$);
+#7881=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64_93','Uninterruptible power supply (UPS) units',#7877,$,$);
+#7882=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_64_94','Uninterruptible power supply (UPS) remote alarm panels',#7877,$,$);
+#7883=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65','Power generators, engines and packaged combined heat and power (CHP) units',#7783,$,$);
+#7884=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_03','Alternators',#7883,$,$);
+#7885=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_05','Automatic voltage regulators',#7883,$,$);
+#7886=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_27','Engine exhausts',#7883,$,$);
+#7887=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_30','Fuel cells',#7883,$,$);
+#7888=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_32','Gas turbines (CCGT)',#7883,$,$);
+#7889=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_33','Generator control panels',#7883,$,$);
+#7890=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_34','Generator sets',#7883,$,$);
+#7891=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_35','Governors',#7883,$,$);
+#7892=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_36','Generator internal combustion engines',#7883,$,$);
+#7893=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_37','Horizontal axis wind turbines (HAWT)',#7883,$,$);
+#7894=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_39','Hydro turbines',#7883,$,$);
+#7895=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_47','Load banks',#7883,$,$);
+#7896=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_58','Offshore wind turbines',#7883,$,$);
+#7897=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_59','Onshore wind turbines',#7883,$,$);
+#7898=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_60','Packaged combined heat and power (CHP) units',#7883,$,$);
+#7899=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_63','Photovoltaic modules',#7883,$,$);
+#7900=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_94','Vertical axis wind turbines (VAWT)',#7883,$,$);
+#7901=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_96','Water wheels',#7883,$,$);
+#7902=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_65_97','Wind turbine controllers',#7883,$,$);
+#7903=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_90','Unregulated power supply units',#7783,$,$);
+#7904=IFCCLASSIFICATIONREFERENCE($,'Pr_60_70_90_22','Direct current (d.c.) power supply units',#7903,$,$);
+#7905=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75','Communications source products',#7388,$,$);
+#7906=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_01','Antennas and satellite dishes',#7905,$,$);
+#7907=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_01_22','Digital audio broadcasting (DAB) antennas',#7906,$,$);
+#7908=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_01_31','Frequency modulation (FM) antennas',#7906,$,$);
+#7909=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_01_75','Satellite dishes',#7906,$,$);
+#7910=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_01_92','Ultra-high frequency (UHF) antennas',#7906,$,$);
+#7911=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03','Audio and video players and recorders',#7905,$,$);
+#7912=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_07','Blu-ray players',#7911,$,$);
+#7913=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_11','Cassette players',#7911,$,$);
+#7914=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_15','Compact disc players',#7911,$,$);
+#7915=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_22','Digital video recorders',#7911,$,$);
+#7916=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_56','Network video recorders',#7911,$,$);
+#7917=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_65','Powered television mounting mechanisms',#7911,$,$);
+#7918=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_70','Radio tuners',#7911,$,$);
+#7919=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_78','Televisions',#7911,$,$);
+#7920=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_03_87','Time-lapse video recorders',#7911,$,$);
+#7921=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_06','Audio input devices',#7905,$,$);
+#7922=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_06_53','Microphones',#7921,$,$);
+#7923=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_06_60','Paging consoles',#7921,$,$);
+#7924=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08','Audio and visual source products',#7905,$,$);
+#7925=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_01','Artificial reverberation, time delay and frequency shift equipment',#7924,$,$);
+#7926=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_02','Audio amplifiers',#7924,$,$);
+#7927=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_03','Audio equalizers',#7924,$,$);
+#7928=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_04','Automatic announcement equipment',#7924,$,$);
+#7929=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_05','Auxiliary passive elements',#7924,$,$);
+#7930=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_21','Digital broadcast signal router multiswitches',#7924,$,$);
+#7931=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_23','Diplexers',#7924,$,$);
+#7932=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_28','External source input points',#7924,$,$);
+#7933=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_46','Launch amplifiers',#7924,$,$);
+#7934=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_48','Local volume controls',#7924,$,$);
+#7935=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_50','Masthead amplifiers',#7924,$,$);
+#7936=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_52','Mixer amplifiers',#7924,$,$);
+#7937=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_54','Mixers',#7924,$,$);
+#7938=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_55','Multiswitches',#7924,$,$);
+#7939=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_63','Pre-amplifiers',#7924,$,$);
+#7940=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_71','Remote microphone input points',#7924,$,$);
+#7941=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_08_78','Splitters',#7924,$,$);
+#7942=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_78','Signal transmitters',#7905,$,$);
+#7943=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_78_85','Supervised premises transceivers',#7942,$,$);
+#7944=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_78_91','Television equalizers',#7942,$,$);
+#7945=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86','Surveillance cameras, monitors and ancillaries',#7905,$,$);
+#7946=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_01','Automatic number plate recognition (ANPR) cameras',#7945,$,$);
+#7947=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_02','Analogue box cameras',#7945,$,$);
+#7948=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_03','Analogue bullet cameras',#7945,$,$);
+#7949=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_04','Analogue covert cameras',#7945,$,$);
+#7950=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_05','Analogue fixed dome cameras',#7945,$,$);
+#7951=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_06','Analogue pan-tilt-zoom (PTZ) cameras',#7945,$,$);
+#7952=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_07','Internet protocol (IP) box cameras',#7945,$,$);
+#7953=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_08','Box camera lenses',#7945,$,$);
+#7954=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_09','Internet protocol (IP) bullet cameras',#7945,$,$);
+#7955=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_10','Camera junction boxes',#7945,$,$);
+#7956=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_11','Internet protocol (IP) covert cameras',#7945,$,$);
+#7957=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_21','Day and night cameras',#7945,$,$);
+#7958=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_24','Dome cameras',#7945,$,$);
+#7959=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_30','Fixed cameras',#7945,$,$);
+#7960=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_31','Internet protocol (IP) fixed dome cameras',#7945,$,$);
+#7961=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_40','Image processing units',#7945,$,$);
+#7962=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_41','Infrared cameras',#7945,$,$);
+#7963=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_42','Infrared illuminators',#7945,$,$);
+#7964=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_45','Integrated digital camera and infrared illuminators',#7945,$,$);
+#7965=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_47','Lenses',#7945,$,$);
+#7966=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_60','Pan-and-tilt units',#7945,$,$);
+#7967=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_65','Internet protocol (IP) high-speed pan-tilt-zoom (PTZ) cameras',#7945,$,$);
+#7968=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_79','Surveillance monitors',#7945,$,$);
+#7969=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_80','Survey cameras',#7945,$,$);
+#7970=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_90','Traffic enforcement cameras',#7945,$,$);
+#7971=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_92','Video distribution amplifiers',#7945,$,$);
+#7972=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_94','Video receiver hubs',#7945,$,$);
+#7973=IFCCLASSIFICATIONREFERENCE($,'Pr_60_75_86_99','Zoom lenses',#7945,$,$);
+#7974=IFCCLASSIFICATIONREFERENCE($,'Pr_65','Services and process distribution products',#8,$,$);
+#7975=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12','Chutes',#7974,$,$);
+#7976=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_47','Linen chutes and openings',#7975,$,$);
+#7977=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_47_24','Linen chute discharge outlets',#7976,$,$);
+#7978=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_47_37','Linen chute hoppers',#7976,$,$);
+#7979=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_47_40','Linen chute inlet doors',#7976,$,$);
+#7980=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_47_47','Linen chutes',#7976,$,$);
+#7981=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70','Refuse chutes and openings',#7975,$,$);
+#7982=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_24','Refuse chute discharge outlets',#7981,$,$);
+#7983=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_36','Refuse chute hoppers',#7981,$,$);
+#7984=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_40','Refuse chute inlet doors',#7981,$,$);
+#7985=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_42','Refuse chute inlets',#7981,$,$);
+#7986=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_72','Refuse and recycling separators',#7981,$,$);
+#7987=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_70_74','Refuse chutes',#7981,$,$);
+#7988=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_71','Chute accessories',#7975,$,$);
+#7989=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_71_10','Chute automatic fire doors',#7988,$,$);
+#7990=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_71_12','Chute cleaning mechanisms',#7988,$,$);
+#7991=IFCCLASSIFICATIONREFERENCE($,'Pr_65_12_71_21','Chute door interlocks',#7988,$,$);
+#7992=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50','Gutter and fitting products',#7974,$,$);
+#7993=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35','Gutters and accessories',#7992,$,$);
+#7994=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_02','Aluminium combined fascias, soffits and gutters',#7993,$,$);
+#7995=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_04','Aluminium composite valley gutters',#7993,$,$);
+#7996=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_06','Aluminium eaves gutters',#7993,$,$);
+#7997=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_08','Aluminium valley gutters',#7993,$,$);
+#7998=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_09','Box gutter sumps',#7993,$,$);
+#7999=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_11','Cast iron eaves gutters',#7993,$,$);
+#8000=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_15','Copper eaves gutters',#7993,$,$);
+#8001=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_26','Eaves gutter leaf guards',#7993,$,$);
+#8002=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_27','Galvanized steel valley gutters',#7993,$,$);
+#8003=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_28','Galvanized steel chambered gutters',#7993,$,$);
+#8004=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_29','Galvanized steel combined fascias, soffits and gutters',#7993,$,$);
+#8005=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_30','Galvanized steel composite gutters',#7993,$,$);
+#8006=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_31','Galvanized steel eaves gutters',#7993,$,$);
+#8007=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_33','Glass fibre-reinforced plastics (GRP) valley gutters',#7993,$,$);
+#8008=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_34','Glass fibre-reinforced plastics (GRP) composite valley gutters',#7993,$,$);
+#8009=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_35','Glass fibre-reinforced plastics (GRP) eaves gutters',#7993,$,$);
+#8010=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_36','Glass fibre-reinforced plastics (GRP) roof gutters',#7993,$,$);
+#8011=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_37','Gravity rainwater outlets',#7993,$,$);
+#8012=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_38','Gutter linings',#7993,$,$);
+#8013=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_40','Hot-dip pre-coated carbon steel combined fascias, soffits and gutters',#7993,$,$);
+#8014=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_42','Hot-dip pre-coated carbon steel eaves gutters',#7993,$,$);
+#8015=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_43','Hot-dip pre-coated carbon steel valley gutters',#7993,$,$);
+#8016=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_47','Lead rainwater chutes',#7993,$,$);
+#8017=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_68','Rainwater hoppers',#7993,$,$);
+#8018=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_70','Rainwater pipe diverter units',#7993,$,$);
+#8019=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_72','Rainwater weirs',#7993,$,$);
+#8020=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_74','Rainwater run-off control products',#7993,$,$);
+#8021=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_81','Siphonic rainwater outlets',#7993,$,$);
+#8022=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_82','Stainless steel eaves gutters',#7993,$,$);
+#8023=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_83','Stainless steel rainwater chutes',#7993,$,$);
+#8024=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_84','Stainless steel valley gutters',#7993,$,$);
+#8025=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_91','Unplasticized polyvinyl chloride (PVC-U) combined fascias, soffits and gutters',#7993,$,$);
+#8026=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_92','Unplasticized polyvinyl chloride (PVC-U) eaves gutters',#7993,$,$);
+#8027=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_98','Zinc eaves gutters',#7993,$,$);
+#8028=IFCCLASSIFICATIONREFERENCE($,'Pr_65_50_35_99','Zinc rainwater chutes',#7993,$,$);
+#8029=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52','Pipe, tube and fitting products',#7974,$,$);
+#8030=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01','Access and inspection chambers and gullies',#8029,$,$);
+#8031=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_01','Access and inspection chambers',#8030,$,$);
+#8032=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_02','Access covers, gratings and frames',#8030,$,$);
+#8033=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_03','Access gratings',#8030,$,$);
+#8034=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_04','Aluminium inspection chambers',#8030,$,$);
+#8035=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_08','Carbon steel edge strips and frames',#8030,$,$);
+#8036=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_09','Carbon steel inspection chambers',#8030,$,$);
+#8037=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_14','Concrete access cover seatings',#8030,$,$);
+#8038=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_16','Concrete inspection chamber sections',#8030,$,$);
+#8039=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_17','Concrete inspection chamber cover slabs',#8030,$,$);
+#8040=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_18','Concrete inspection chamber shaft sections',#8030,$,$);
+#8041=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_19','Concrete inspection chamber taper sections',#8030,$,$);
+#8042=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_20','Concrete manhole base units',#8030,$,$);
+#8043=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_21','Concrete manhole chamber sections',#8030,$,$);
+#8044=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_22','Concrete manhole shaft sections',#8030,$,$);
+#8045=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_23','Concrete manhole taper sections',#8030,$,$);
+#8046=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_24','Concrete manhole cover slabs',#8030,$,$);
+#8047=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_41','Inspection chamber wall plates',#8030,$,$);
+#8048=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_50','Manhole covers and frames',#8030,$,$);
+#8049=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_58','Orifice plate flow control units',#8030,$,$);
+#8050=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_59','Perforated concrete ring sections',#8030,$,$);
+#8051=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_60','Plastics access and inspection chambers',#8030,$,$);
+#8052=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_61','Plastics below-ground access or equipment chambers',#8030,$,$);
+#8053=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_62','Plastics access chamber channels',#8030,$,$);
+#8054=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_63','Plastics distribution and sampling chambers',#8030,$,$);
+#8055=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_64','Plastics access chambers',#8030,$,$);
+#8056=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_65','Plastics mini-inspection chambers',#8030,$,$);
+#8057=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_66','Plastics restricted access inspection shafts',#8030,$,$);
+#8058=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_67','Plastics sealed access fittings',#8030,$,$);
+#8059=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_68','Preformed access ducts',#8030,$,$);
+#8060=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_72','Recycled polyethylene (PE) inspection chambers',#8030,$,$);
+#8061=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_83','Stainless steel edge strips and frames',#8030,$,$);
+#8062=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_84','Stainless steel inspection chambers',#8030,$,$);
+#8063=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_86','Surface boxes',#8030,$,$);
+#8064=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_01_95','Vortex flow control units',#8030,$,$);
+#8065=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03','Above-ground drainage pipes and fittings',#8029,$,$);
+#8066=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_02','Acrylonitrile butadiene styrene (ABS) above-ground wastewater pipes and fittings',#8065,$,$);
+#8067=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_04','Aluminium rainwater pipes and fittings',#8065,$,$);
+#8068=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_08','Borosilicate glass above-ground wastewater pipes and fittings',#8065,$,$);
+#8069=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_10','Cast iron above-ground discharge and ventilation pipes',#8065,$,$);
+#8070=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_11','Cast iron rainwater pipes and fittings',#8065,$,$);
+#8071=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_12','Cast iron above-ground drainage pipes and fittings',#8065,$,$);
+#8072=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_13','Chlorinated polyvinyl chloride (PVC-C) above-ground wastewater pipes and fittings',#8065,$,$);
+#8073=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_19','Copper rainwater pipes and fittings',#8065,$,$);
+#8074=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_21','Copper above-ground drainage pipes and fittings',#8065,$,$);
+#8075=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_30','Hot-dip pre-coated carbon steel rainwater pipes and fittings',#8065,$,$);
+#8076=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_31','Galvanized steel rainwater pipes and fittings',#8065,$,$);
+#8077=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_32','Galvanized steel above-ground drainage pipes and fittings',#8065,$,$);
+#8078=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_34','Glass fibre-reinforced plastics (GRP) rainwater pipes and fittings',#8065,$,$);
+#8079=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_37','High-density polyethylene (HDPE) above-ground drainage pipes and fittings',#8065,$,$);
+#8080=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_52','Modified unplasticized polyvinyl chloride (MUPVC) above-ground wastewater pipes and fittings',#8065,$,$);
+#8081=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_66','Polypropylene (PP) above-ground wastewater pipes and fittings',#8065,$,$);
+#8082=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_80','Stainless steel rainwater pipes and fittings',#8065,$,$);
+#8083=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_81','Stainless steel above-ground drainage pipes and fittings',#8065,$,$);
+#8084=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_87','Unplasticized polyvinyl chloride (PVC-U) above-ground drainage pipes and fittings',#8065,$,$);
+#8085=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_88','Unplasticized polyvinyl chloride (PVC-U) rainwater pipes and fittings',#8065,$,$);
+#8086=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_03_99','Zinc rainwater pipes and fittings',#8065,$,$);
+#8087=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07','Below-ground and pressure drainage pipes and fittings',#8029,$,$);
+#8088=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_02','Adaptors for above-ground pipe connections to clay drainage pipelines',#8087,$,$);
+#8089=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_03','Adaptors for above-ground pipe connections to plastics drainage pipelines',#8087,$,$);
+#8090=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_13','Clay below-ground drainage pipes and fittings',#8087,$,$);
+#8091=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_15','Concrete perforated below-ground drainage pipes and fittings',#8087,$,$);
+#8092=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_16','Concrete plain wall below-ground drainage pipes and fittings',#8087,$,$);
+#8093=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_25','Ductile iron pressure pipes and fittings',#8087,$,$);
+#8094=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_27','Filtration drainage pipes and fittings',#8087,$,$);
+#8095=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_28','Flexible couplings between below-ground drainage pipes',#8087,$,$);
+#8096=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_34','Grey cast iron below-ground drainage pipes and fittings',#8087,$,$);
+#8097=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_36','High-density polyethylene (HDPE) below-ground drainage pressure pipes and fittings',#8087,$,$);
+#8098=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_38','High-density polyethylene (HDPE) structured wall below-ground drainage pipes and fittings',#8087,$,$);
+#8099=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_40','High-density polyethylene (HDPE) structured wall perforated below-ground drainage pipes and fittings for flexible jointing',#8087,$,$);
+#8100=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_58','Oriented unplasticized polyvinyl chloride (PVC-O) pressure pipes and fittings',#8087,$,$);
+#8101=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_63','Plastics flexible (coil) perforated wall below-ground drainage pipes and fittings',#8087,$,$);
+#8102=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_64','Polypropylene (PP) solid wall below-ground drainage pipes and fittings',#8087,$,$);
+#8103=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_65','Polypropylene (PP) structured wall below-ground drainage pipes and fittings',#8087,$,$);
+#8104=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_66','Polypropylene (PP) structured wall perforated below-ground drainage pipes and fittings',#8087,$,$);
+#8105=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_75','Saddle connectors to below-ground drainage pipes',#8087,$,$);
+#8106=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_84','Steel-reinforced polyethylene composite structured wall below-ground drainage pipelines',#8087,$,$);
+#8107=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_87','Unplasticized polyvinyl chloride (PVC-U) below-ground drainage pressure pipes and fittings',#8087,$,$);
+#8108=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_88','Unplasticized polyvinyl chloride (PVC-U) solid wall below-ground drainage pipes and fittings',#8087,$,$);
+#8109=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_89','Unplasticized polyvinyl chloride (PVC-U) solid wall perforated below-ground drainage pipes and fittings',#8087,$,$);
+#8110=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_90','Unplasticized polyvinyl chloride (PVC-U) structured wall below-ground drainage pipes and fittings',#8087,$,$);
+#8111=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_91','Unplasticized polyvinyl chloride (PVC-U) structured wall perforated below-ground drainage pipe and fittings',#8087,$,$);
+#8112=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_92','Unplasticized polyvinyl chloride alloy (PVC-A) pressure pipes and fittings',#8087,$,$);
+#8113=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_94','Vitrified clay perforated below-ground drainage pipes and fittings',#8087,$,$);
+#8114=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_96','Vitrified clay plain wall below-ground drainage open butt joint pipes and fittings',#8087,$,$);
+#8115=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_97','Vitrified clay plain wall below-ground drainage pipes and fittings for flexible jointing',#8087,$,$);
+#8116=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_07_98','Vitrified clay plain wall below-ground drainage pipes and fittings for rigid jointing',#8087,$,$);
+#8117=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20','Culverts',#8029,$,$);
+#8118=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_15','Concrete arch culverts',#8117,$,$);
+#8119=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_16','Concrete box culvert sections',#8117,$,$);
+#8120=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_17','Concrete bridge culverts',#8117,$,$);
+#8121=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_18','Concrete pipe arch culverts',#8117,$,$);
+#8122=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_19','Concrete pipe culverts',#8117,$,$);
+#8123=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_20','Corrugated steel pipe culverts',#8117,$,$);
+#8124=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_20_84','Structural plate corrugated steel pipe culverts',#8117,$,$);
+#8125=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_22','Deaerators',#8029,$,$);
+#8126=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_22_47','Liquid fuel deaerators',#8125,$,$);
+#8127=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_22_66','Pressure differential deaerators',#8125,$,$);
+#8128=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_22_88','Temperature differential deaerators',#8125,$,$);
+#8129=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24','Drainage gullies and channels',#8029,$,$);
+#8130=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_11','Carriageway kerb and drainage channels',#8129,$,$);
+#8131=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_12','Cast iron composite gullies',#8129,$,$);
+#8132=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_13','Cast iron one-piece gullies',#8129,$,$);
+#8133=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_14','Cast iron rodding eyes',#8129,$,$);
+#8134=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_15','Cast iron sealed access fittings',#8129,$,$);
+#8135=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_18','Concrete one-piece road gullies',#8129,$,$);
+#8136=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_24','Drainage channels with gratings',#8129,$,$);
+#8137=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_26','Filtration drainage channels',#8129,$,$);
+#8138=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_28','Floor channels',#8129,$,$);
+#8139=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_29','Floor channel covers and gratings',#8129,$,$);
+#8140=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_30','Floor gully covers and gratings',#8129,$,$);
+#8141=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_31','Floor gullies',#8129,$,$);
+#8142=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_47','Linear slot drainage channels',#8129,$,$);
+#8143=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_59','Plastics composite gullies',#8129,$,$);
+#8144=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_60','Plastics one-piece gullies',#8129,$,$);
+#8145=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_61','Plastics rodding eyes',#8129,$,$);
+#8146=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_64','Polypropylene (PP) composite gullies',#8129,$,$);
+#8147=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_65','Polypropylene (PP) one-piece gullies',#8129,$,$);
+#8148=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_73','Rat barrier pipes',#8129,$,$);
+#8149=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_85','Stainless steel rodding eyes',#8129,$,$);
+#8150=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_91','Vitrified clay access chamber channels',#8129,$,$);
+#8151=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_92','Vitrified clay composite gullies',#8129,$,$);
+#8152=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_94','Vitrified clay one-piece gullies',#8129,$,$);
+#8153=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_95','Vitrified clay rodding eyes',#8129,$,$);
+#8154=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_24_96','Vitrified clay sealed access fittings',#8129,$,$);
+#8155=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25','Drainage traps, separators and accessories',#8029,$,$);
+#8156=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_06','Below-ground grease separators and converters',#8155,$,$);
+#8157=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_15','Concrete catch pits',#8155,$,$);
+#8158=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_23','Depressurization sumps',#8155,$,$);
+#8159=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_24','Drainage flame traps',#8155,$,$);
+#8160=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_27','Enzyme dosing units',#8155,$,$);
+#8161=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_32','Free-standing grease separators and converters',#8155,$,$);
+#8162=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_60','Petrol interceptors',#8155,$,$);
+#8163=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_62','Plastics catch pits',#8155,$,$);
+#8164=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_72','Reverse action interceptors',#8155,$,$);
+#8165=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_75','Sanitary appliance traps',#8155,$,$);
+#8166=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_78','Silt buckets',#8155,$,$);
+#8167=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_93','Vitrified clay interceptor traps',#8155,$,$);
+#8168=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_96','Vitrified clay silt traps',#8155,$,$);
+#8169=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_25_98','Waste traps',#8155,$,$);
+#8170=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_28','Expansion compensators',#8029,$,$);
+#8171=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_28_03','Angular expansion compensators',#8170,$,$);
+#8172=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_28_05','Axial expansion compensators',#8170,$,$);
+#8173=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_28_46','Lateral expansion compensators',#8170,$,$);
+#8174=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34','Gauges and sight glasses',#8029,$,$);
+#8175=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_08','Bourdon tube pressure gauges',#8174,$,$);
+#8176=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_15','Combined steam sight glass and check valves',#8174,$,$);
+#8177=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_16','Contents gauges',#8174,$,$);
+#8178=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_18','Contents sight glasses',#8174,$,$);
+#8179=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_22','Differential pressure gauges',#8174,$,$);
+#8180=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_24','Double window steam sight glasses',#8174,$,$);
+#8181=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_46','Liquid petroleum gas (LPG) contents gauges',#8174,$,$);
+#8182=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_48','Manifold gauges',#8174,$,$);
+#8183=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_50','Manometers',#8174,$,$);
+#8184=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_55','Multi-window steam sight glasses',#8174,$,$);
+#8185=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_65','Pressure and altitude gauges',#8174,$,$);
+#8186=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_66','Pressure gauges',#8174,$,$);
+#8187=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_77','Single window steam sight glasses',#8174,$,$);
+#8188=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_34_88','Temperature gauges',#8174,$,$);
+#8189=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38','Hoses, hose reels and ancillaries',#8029,$,$);
+#8190=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_12','Carbon dioxide fire-extinguishing hose reels',#8189,$,$);
+#8191=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_14','Compressed air coil hoses',#8189,$,$);
+#8192=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_15','Compressed air hose couplings',#8189,$,$);
+#8193=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_16','Compressed air hose reel balancers',#8189,$,$);
+#8194=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_18','Compressed air hose reels',#8189,$,$);
+#8195=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_20','Crush-proof vehicle exhaust hoses',#8189,$,$);
+#8196=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_30','Fire hose reels',#8189,$,$);
+#8197=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_31','Flat irrigation hoses',#8189,$,$);
+#8198=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_32','Foam hose couplings',#8189,$,$);
+#8199=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_42','Irrigation hoses',#8189,$,$);
+#8200=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_48','Liquid petroleum gas (LPG) rubber hoses and hose assemblies',#8189,$,$);
+#8201=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_69','Quick-release couplings',#8189,$,$);
+#8202=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_71','Reinforced wall hoses',#8189,$,$);
+#8203=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_84','Spiral compressed air hoses',#8189,$,$);
+#8204=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_85','Spiral plastics hoses',#8189,$,$);
+#8205=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_86','Spring balancer vehicle exhaust hose supports',#8189,$,$);
+#8206=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_94','Vehicle exhaust hose reels',#8189,$,$);
+#8207=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_95','Water hose reels',#8189,$,$);
+#8208=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_96','Water hoses',#8189,$,$);
+#8209=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_97','Water fire-extinguishing hose couplings',#8189,$,$);
+#8210=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_38_98','WC washdown hoses',#8189,$,$);
+#8211=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61','Pipe accessories',#8029,$,$);
+#8212=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_04','Anti-climb pipe covers',#8211,$,$);
+#8213=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_06','Anti-vortex plates',#8211,$,$);
+#8214=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_15','Concealed intumescent pipe collars',#8211,$,$);
+#8215=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_22','Dirt pockets',#8211,$,$);
+#8216=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_23','Discharge and ventilating stack terminations',#8211,$,$);
+#8217=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_42','Insulated wrap pipe collars',#8211,$,$);
+#8218=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_48','Low loss headers',#8211,$,$);
+#8219=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_50','Masking plates',#8211,$,$);
+#8220=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_61','Pipe ducts',#8211,$,$);
+#8221=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_62','Pipeline supports',#8211,$,$);
+#8222=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_63','Pipe sleeves',#8211,$,$);
+#8223=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_64','Pipe sleeve seals',#8211,$,$);
+#8224=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_65','Plastics ducts for electric cables',#8211,$,$);
+#8225=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_68','Puddle flanges',#8211,$,$);
+#8226=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_72','Radiator pipe seals',#8211,$,$);
+#8227=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_86','Surface-mounted intumescent pipe collars',#8211,$,$);
+#8228=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_91','Tundishes',#8211,$,$);
+#8229=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_96','Wall collars',#8211,$,$);
+#8230=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_61_98','Water hammer arrestors',#8211,$,$);
+#8231=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62','Pipe jointing materials',#8029,$,$);
+#8232=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_03','Anaerobic sealants',#8231,$,$);
+#8233=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_09','Brazing compounds',#8231,$,$);
+#8234=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_11','Caulking ropes',#8231,$,$);
+#8235=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_25','Elastomeric pipe joint gaskets',#8231,$,$);
+#8236=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_27','Elastomeric ring seals',#8231,$,$);
+#8237=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_28','Flange adaptors',#8231,$,$);
+#8238=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_29','Flange jointing rings for copper flanges',#8231,$,$);
+#8239=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_30','Flange jointing rings for stainless steel flanges',#8231,$,$);
+#8240=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_31','Flange jointing rings for steel flanges',#8231,$,$);
+#8241=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_32','Flux',#8231,$,$);
+#8242=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_36','Hemps and pastes',#8231,$,$);
+#8243=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_50','Mechanical couplings',#8231,$,$);
+#8244=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_52','Molten lead caulking',#8231,$,$);
+#8245=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_62','Pipeline connectors',#8231,$,$);
+#8246=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_65','Polytetrafluoroethylene (PTFE) joint tapes',#8231,$,$);
+#8247=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_71','Resin-modified cements',#8231,$,$);
+#8248=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_81','Solders',#8231,$,$);
+#8249=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_62_82','Solvent welding cements',#8231,$,$);
+#8250=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63','Pipes and fittings',#8029,$,$);
+#8251=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_03','Acrylonitrile butadiene styrene (ABS) pipe',#8250,$,$);
+#8252=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_04','Acrylonitrile butadiene styrene (ABS) fittings',#8250,$,$);
+#8253=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_14','Chlorinated polyvinyl chloride (PVC-C) pipelines',#8250,$,$);
+#8254=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_17','Copper pipes',#8250,$,$);
+#8255=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_18','Copper pipe fittings',#8250,$,$);
+#8256=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_20','Copper refrigerant pipes',#8250,$,$);
+#8257=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_22','Corrugated stainless steel pipes and fittings',#8250,$,$);
+#8258=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_23','Cross-linked polyethylene (PE-X) pipes and fittings',#8250,$,$);
+#8259=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_25','Ductile iron pipes and fittings',#8250,$,$);
+#8260=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_29','Flexible composite pipes for liquid fuels',#8250,$,$);
+#8261=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_32','Glass pipes',#8250,$,$);
+#8262=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_33','Glass fibre-reinforced plastics (GRP) pressure pipes and fittings',#8250,$,$);
+#8263=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_35','Glass fibre-reinforced plastics (GRP) pipes and fittings for liquid fuels',#8250,$,$);
+#8264=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_46','Lead pipes and fittings',#8250,$,$);
+#8265=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_50','Medical gas copper tube',#8250,$,$);
+#8266=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_54','Multilayer pipes for gaseous fuels',#8250,$,$);
+#8267=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_55','Multilayer pipes for water',#8250,$,$);
+#8268=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_60','Polybutylene (PB) pipes and fittings',#8250,$,$);
+#8269=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_62','Polyethylene (PE) gaseous fuel pipes and fittings',#8250,$,$);
+#8270=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_63','Polyethylene (PE) water pipes and fittings',#8250,$,$);
+#8271=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_64','Polyethylene (PE) pipes for liquid fuels',#8250,$,$);
+#8272=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_65','Polypropylene (PP) pipes',#8250,$,$);
+#8273=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_68','Pre-insulated pipes',#8250,$,$);
+#8274=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_70','Propylene copolymer pressure pipes and fittings',#8250,$,$);
+#8275=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_78','Stainless steel pipes',#8250,$,$);
+#8276=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_79','Stainless steel pipe fittings',#8250,$,$);
+#8277=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_82','Steel pipes',#8250,$,$);
+#8278=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_83','Steel pipe fittings',#8250,$,$);
+#8279=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_84','Steel pipes and fittings for liquid fuels',#8250,$,$);
+#8280=IFCCLASSIFICATIONREFERENCE($,'Pr_65_52_63_89','Unplasticized polyvinyl chloride (PVC-U) pipes',#8250,$,$);
+#8281=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53','Pump products',#7974,$,$);
+#8282=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_24','Drainage pumps',#8281,$,$);
+#8283=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_24_80','Small bore discharge macerator and pumps',#8282,$,$);
+#8284=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_24_81','Small bore discharge pumps',#8282,$,$);
+#8285=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_24_86','Submersible pumps',#8282,$,$);
+#8286=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_65','Pump accessories',#8281,$,$);
+#8287=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_65_04','Auto-coupling sets',#8286,$,$);
+#8288=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_65_65','Pulsation dampers',#8286,$,$);
+#8289=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_65_94','Vertical extended spindles',#8286,$,$);
+#8290=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86','Supply and exhaust pumps',#8281,$,$);
+#8291=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_05','Automatic condensate pumps',#8290,$,$);
+#8292=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_07','Belt-driven end suction pumps',#8290,$,$);
+#8293=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_11','Canned rotor pumps',#8290,$,$);
+#8294=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_12','Centrifugal pumps',#8290,$,$);
+#8295=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_13','Close-coupled end suction pumps',#8290,$,$);
+#8296=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_15','Close-coupled in-line pumps',#8290,$,$);
+#8297=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_16','Combined booster pump set with break tank units',#8290,$,$);
+#8298=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_17','Condensate recovery units',#8290,$,$);
+#8299=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_22','Diesel engine-driven pumps',#8290,$,$);
+#8300=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_24','Dosing pump units',#8290,$,$);
+#8301=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_32','Fuel oil transfer pumps',#8290,$,$);
+#8302=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_33','Gas boosters',#8290,$,$);
+#8303=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_50','Medical gas exhauster units',#8290,$,$);
+#8304=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_51','Metering pumps',#8290,$,$);
+#8305=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_55','Multistage pumps',#8290,$,$);
+#8306=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_66','Pressure booster pumps',#8290,$,$);
+#8307=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_68','Pressurization units',#8290,$,$);
+#8308=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_78','Shower booster pumps',#8290,$,$);
+#8309=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_86','Suction pumps',#8290,$,$);
+#8310=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_86_94','Vapour pumps',#8290,$,$);
+#8311=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96','Water supply and wastewater pumps',#8281,$,$);
+#8312=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_02','Air lift pumps',#8311,$,$);
+#8313=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_03','Archimedes screw pumps',#8311,$,$);
+#8314=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_04','Axial flow pumps',#8311,$,$);
+#8315=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_05','Axially split casing pumps',#8311,$,$);
+#8316=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_06','Back pull-out end suction pumps',#8311,$,$);
+#8317=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_11','Canister-mounted submersible pumps',#8311,$,$);
+#8318=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_21','Double diaphragm pumps',#8311,$,$);
+#8319=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_23','Double disc pumps',#8311,$,$);
+#8320=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_27','Electromagnetic pumps',#8311,$,$);
+#8321=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_41','In-line multistage pumps',#8311,$,$);
+#8322=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_44','Jet pumps',#8311,$,$);
+#8323=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_50','Macerators',#8311,$,$);
+#8324=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_51','Magnetic drive pumps',#8311,$,$);
+#8325=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_55','Multistage centrifugal pumps',#8311,$,$);
+#8326=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_62','Pipe-mounted submersible pumps',#8311,$,$);
+#8327=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_63','Peristaltic pumps',#8311,$,$);
+#8328=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_64','Positive displacement pumps',#8311,$,$);
+#8329=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_65','Positive inlet pressure booster sets',#8311,$,$);
+#8330=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_66','Progressing cavity pumps',#8311,$,$);
+#8331=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_70','Ram pumps',#8311,$,$);
+#8332=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_72','Rotary gear pumps',#8311,$,$);
+#8333=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_73','Rotary lobe pumps',#8311,$,$);
+#8334=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_74','Rotary vane pumps',#8311,$,$);
+#8335=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_75','Screw pumps',#8311,$,$);
+#8336=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_78','Single diaphragm pumps',#8311,$,$);
+#8337=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_79','Single stage centrifugal pumps',#8311,$,$);
+#8338=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_80','Solids handling pumps',#8311,$,$);
+#8339=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_84','Submersible borehole pumps',#8311,$,$);
+#8340=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_85','Submersible axial pumps',#8311,$,$);
+#8341=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_86','Submersible centrifugal pumps',#8311,$,$);
+#8342=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_87','Submersible mixed flow pumps',#8311,$,$);
+#8343=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_94','Vertically suspended bowl type pumps',#8311,$,$);
+#8344=IFCCLASSIFICATIONREFERENCE($,'Pr_65_53_96_95','Volute casing dry well centrifugal sewage and sludge pumps',#8311,$,$);
+#8345=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54','Valve products',#7974,$,$);
+#8346=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_24','Drainage valves',#8345,$,$);
+#8347=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_24_02','Air admittance valves',#8346,$,$);
+#8348=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_24_04','Anti-flood valves',#8346,$,$);
+#8349=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30','Firefighting valves and devices',#8345,$,$);
+#8350=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_02','Alarm test valve assemblies',#8349,$,$);
+#8351=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_10','Caps and chains',#8349,$,$);
+#8352=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_11','Carbon dioxide odorizing devices',#8349,$,$);
+#8353=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_12','Gas fire-suppression check valves',#8349,$,$);
+#8354=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_15','Gas fire-suppression container valve assemblies',#8349,$,$);
+#8355=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_22','Deluge valves',#8349,$,$);
+#8356=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_23','Drain and test valves',#8349,$,$);
+#8357=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_24','Dry riser landing valves',#8349,$,$);
+#8358=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_25','Dry dropper outlet valves',#8349,$,$);
+#8359=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_32','Fusible links',#8349,$,$);
+#8360=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_33','Gas fire-suppression connectors',#8349,$,$);
+#8361=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_34','Gas fire suppression manifolds',#8349,$,$);
+#8362=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_35','Gas fire suppression pressure gauges',#8349,$,$);
+#8363=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_36','Gas fire suppression pressure switches',#8349,$,$);
+#8364=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_37','High and low-pressure selector gas fire-extinguishing valves',#8349,$,$);
+#8365=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_42','Inlet breechings',#8349,$,$);
+#8366=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_50','Multiple control valves',#8349,$,$);
+#8367=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_57','Gas fire-suppression non-return valves',#8349,$,$);
+#8368=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_63','Gas fire-extinguishing pneumatic alarm devices',#8349,$,$);
+#8369=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_85','Sprinkler system alarm valves',#8349,$,$);
+#8370=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_96','Fire suppression control valve sets',#8349,$,$);
+#8371=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_30_97','Wet riser landing valves',#8349,$,$);
+#8372=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33','Gas and liquid fuel valves',#8345,$,$);
+#8373=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_03','Anti-siphon liquid fuel supply valves',#8372,$,$);
+#8374=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_05','Automatic changeover liquid petroleum gas (LPG) valves',#8372,$,$);
+#8375=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_08','Back check liquid petroleum gas (LPG) valves',#8372,$,$);
+#8376=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_10','Chlorine gas injectors',#8372,$,$);
+#8377=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_11','Cast iron plug valves',#8372,$,$);
+#8378=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_12','Chlorine gas manifolds',#8372,$,$);
+#8379=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_13','Chlorine gas manifold pigtails',#8372,$,$);
+#8380=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_14','Compressed air manifolds',#8372,$,$);
+#8381=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_15','Compressed air pressure-reducing stations',#8372,$,$);
+#8382=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_17','Compressed air safety valves',#8372,$,$);
+#8383=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_28','Excess flow liquid petroleum gas (LPG) valves',#8372,$,$);
+#8384=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_29','Fuel oil disk check valves',#8372,$,$);
+#8385=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_30','Fuel oil ball valves',#8372,$,$);
+#8386=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_31','Fusible link drop weight valves',#8372,$,$);
+#8387=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_33','Gas ball valves',#8372,$,$);
+#8388=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_34','Gas burner safety devices',#8372,$,$);
+#8389=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_35','Gas butterfly valves',#8372,$,$);
+#8390=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_36','Gas pressure-reducing stations',#8372,$,$);
+#8391=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_37','Gas pressure switches',#8372,$,$);
+#8392=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_38','Gas solenoid valves',#8372,$,$);
+#8393=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_40','Gas vacuum regulators',#8372,$,$);
+#8394=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_43','Industrial vacuum flow regulating valves',#8372,$,$);
+#8395=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_44','Laboratory gas safety valves',#8372,$,$);
+#8396=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_45','Laboratory gas taps',#8372,$,$);
+#8397=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_46','Laboratory gas supply manifolds',#8372,$,$);
+#8398=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_47','Liquefied petroleum gas (LPG) pressure regulators',#8372,$,$);
+#8399=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_48','Liquefied petroleum gas (LPG) pressure relief valves',#8372,$,$);
+#8400=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_49','Liquefied petroleum gas (LPG) shut-off valves and emergency valves',#8372,$,$);
+#8401=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_50','Mechanical gas safety valves',#8372,$,$);
+#8402=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_51','Medical gas line valves',#8372,$,$);
+#8403=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_52','Medical gas pressure-reducing stations',#8372,$,$);
+#8404=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_53','Medical gas service modules',#8372,$,$);
+#8405=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_54','Medical gas supply manifolds',#8372,$,$);
+#8406=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_55','Medical gas valve service units',#8372,$,$);
+#8407=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_57','Medical vacuum flow regulating valves',#8372,$,$);
+#8408=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_58','Maximum level fill stop liquid petroleum gas (LPG) valves',#8372,$,$);
+#8409=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_65','Pressure vacuum valves',#8372,$,$);
+#8410=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_70','Refrigerant safety devices',#8372,$,$);
+#8411=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_71','Remote-acting fire safety liquid fuel supply valves',#8372,$,$);
+#8412=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_74','Rupture discs',#8372,$,$);
+#8413=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_76','Self-sealing liquid petroleum gas (LPG) couplers',#8372,$,$);
+#8414=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_78','Shear valves',#8372,$,$);
+#8415=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_84','Steel plug valves',#8372,$,$);
+#8416=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_87','Taper plug valves',#8372,$,$);
+#8417=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_93','Vacuum switches',#8372,$,$);
+#8418=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_33_94','Vapour connection adaptors',#8372,$,$);
+#8419=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40','Irrigation valves',#8345,$,$);
+#8420=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_02','Irrigation air valves',#8419,$,$);
+#8421=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_13','Irrigation check valves',#8419,$,$);
+#8422=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_16','Irrigation control valves',#8419,$,$);
+#8423=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_44','Irrigation isolating valves',#8419,$,$);
+#8424=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_62','Irrigation plastics isolating valves',#8419,$,$);
+#8425=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_40_94','Irrigation volumetric control valves',#8419,$,$);
+#8426=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_60','Pneumatic waste collection valves',#8345,$,$);
+#8427=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_60_02','Air inlet valves',#8426,$,$);
+#8428=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_60_20','Cut-off valves',#8426,$,$);
+#8429=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_60_22','Discharge valves',#8426,$,$);
+#8430=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_60_77','Sectioning valves',#8426,$,$);
+#8431=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85','Steam valves',#8345,$,$);
+#8432=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_06','Balanced pressure air vents',#8431,$,$);
+#8433=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_07','Bellows sealed stop valves',#8431,$,$);
+#8434=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_08','Blowdown valves',#8431,$,$);
+#8435=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_22','Direct-acting pressure-reducing valves',#8431,$,$);
+#8436=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_26','Electrically actuated control steam valves',#8431,$,$);
+#8437=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_60','Pilot-operated pressure-reducing valves',#8431,$,$);
+#8438=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_62','Piston stop valves',#8431,$,$);
+#8439=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_65','Pneumatically actuated control steam valves',#8431,$,$);
+#8440=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_77','Self-acting control steam valves',#8431,$,$);
+#8441=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_78','Self-acting steam temperature valves',#8431,$,$);
+#8442=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_79','Self-operating control valves',#8431,$,$);
+#8443=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_85','Steam parallel slide valves',#8431,$,$);
+#8444=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_85_88','Temperature and pressure control steam valves',#8431,$,$);
+#8445=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93','Valve accessories',#8345,$,$);
+#8446=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_05','Automatic air vents',#8445,$,$);
+#8447=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_06','Ball valve floats',#8445,$,$);
+#8448=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_50','Manual air vents',#8445,$,$);
+#8449=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_87','Test points',#8445,$,$);
+#8450=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_88','T-keys',#8445,$,$);
+#8451=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_93_94','Valve keys',#8445,$,$);
+#8452=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94','Water supply and wastewater valves',#8345,$,$);
+#8453=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_03','Anti-pollution check valves',#8452,$,$);
+#8454=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_11','Cast iron wedge gate valves',#8452,$,$);
+#8455=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_22','Direct-acting float-actuated automatic control valves',#8452,$,$);
+#8456=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_23','Direct spring-operated pressure relief valves',#8452,$,$);
+#8457=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_24','Double orifice air valves',#8452,$,$);
+#8458=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_26','Eccentric plug valves',#8452,$,$);
+#8459=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_29','Flap valves',#8452,$,$);
+#8460=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_30','Flexible rubber check valves',#8452,$,$);
+#8461=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_31','Free discharge valves',#8452,$,$);
+#8462=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_39','Hydrostatic bellmouth valves',#8452,$,$);
+#8463=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_45','Knife gate valves',#8452,$,$);
+#8464=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_47','Line pressure-driven automatic control valves',#8452,$,$);
+#8465=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_50','Metallic butterfly valves',#8452,$,$);
+#8466=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_55','Needle valves',#8452,$,$);
+#8467=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_56','Non-slam nozzle check valves',#8452,$,$);
+#8468=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_57','Non-slam twin plate check valves',#8452,$,$);
+#8469=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_60','Pallet-type pressure relief valves',#8452,$,$);
+#8470=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_62','Pilot-operated valves',#8452,$,$);
+#8471=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_63','Pinch-type pressure relief valves',#8452,$,$);
+#8472=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_65','Plunger valves',#8452,$,$);
+#8473=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_70','Recoil resilient hinge disc check valves',#8452,$,$);
+#8474=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_71','Recoil swing disc check valves',#8452,$,$);
+#8475=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_72','Reduced pressure zone valves',#8452,$,$);
+#8476=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_73','Resilient hinge disc check valves',#8452,$,$);
+#8477=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_77','Single large orifice air valves',#8452,$,$);
+#8478=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_78','Single small orifice air valves',#8452,$,$);
+#8479=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_84','Steel gate valves',#8452,$,$);
+#8480=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_87','Solenoid-operated valves',#8452,$,$);
+#8481=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_90','Triple orifice air valves',#8452,$,$);
+#8482=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_94','Vacuum breaker air valves',#8452,$,$);
+#8483=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_94_95','V-port ball valves',#8452,$,$);
+#8484=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95','Water services valves',#8345,$,$);
+#8485=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_05','Backflow prevention check valves',#8484,$,$);
+#8486=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_06','Ball valves',#8484,$,$);
+#8487=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_08','Butterfly valves',#8484,$,$);
+#8488=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_10','Cast iron ball valves',#8484,$,$);
+#8489=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_11','Cast iron check valves',#8484,$,$);
+#8490=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_12','Cast iron gate valves',#8484,$,$);
+#8491=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_13','Cast iron globe valves',#8484,$,$);
+#8492=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_14','Copper alloy check valves',#8484,$,$);
+#8493=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_15','Copper alloy gate valves',#8484,$,$);
+#8494=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_16','Copper alloy globe valves',#8484,$,$);
+#8495=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_17','Combined temperature and pressure relief valves',#8484,$,$);
+#8496=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_18','Copper alloy service stop valves',#8484,$,$);
+#8497=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_19','Copper alloy stop valves',#8484,$,$);
+#8498=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_20','Copper alloy underground stop valves',#8484,$,$);
+#8499=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_21','Commissioning manifolds',#8484,$,$);
+#8500=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_22','Constant flow valves',#8484,$,$);
+#8501=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_23','Draw-off taps',#8484,$,$);
+#8502=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_24','Diaphragm valves',#8484,$,$);
+#8503=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_25','Differential pressure control valves',#8484,$,$);
+#8504=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_26','Double regulating valves',#8484,$,$);
+#8505=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_27','Draining taps',#8484,$,$);
+#8506=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_28','Excess pressure valves',#8484,$,$);
+#8507=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_29','Float-operated valves',#8484,$,$);
+#8508=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_30','Flow-measuring valves',#8484,$,$);
+#8509=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_31','Flow-reducing servicing valves',#8484,$,$);
+#8510=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_33','Foot valves',#8484,$,$);
+#8511=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_34','Four-port valves',#8484,$,$);
+#8512=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_38','Hose union backflow prevention devices',#8484,$,$);
+#8513=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_42','In-line anti-vacuum backflow prevention devices',#8484,$,$);
+#8514=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_47','Low-pressure thermostatic mixing valves',#8484,$,$);
+#8515=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_48','High-performance thermostatic mixing valves',#8484,$,$);
+#8516=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_50','Metering valves',#8484,$,$);
+#8517=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_53','Motorized valves',#8484,$,$);
+#8518=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_63','Pressure-independent control valves',#8484,$,$);
+#8519=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_64','Pressure-regulating valves',#8484,$,$);
+#8520=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_65','Pressure relief valves',#8484,$,$);
+#8521=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_66','Pressure-reducing valves',#8484,$,$);
+#8522=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_67','Pressure-surplussing valves',#8484,$,$);
+#8523=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_70','Radiator valves',#8484,$,$);
+#8524=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_72','Rotary shoe valves',#8484,$,$);
+#8525=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_75','Safety valves',#8484,$,$);
+#8526=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_77','Seat valves',#8484,$,$);
+#8527=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_80','Steel alloy check valves',#8484,$,$);
+#8528=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_81','Steel ball valves',#8484,$,$);
+#8529=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_82','Steel globe valves',#8484,$,$);
+#8530=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_83','Steel globe stop and check valves',#8484,$,$);
+#8531=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_86','Thermostatic balancing valves',#8484,$,$);
+#8532=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_87','Tempering valves',#8484,$,$);
+#8533=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_88','Thermostatic mixing valves',#8484,$,$);
+#8534=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_89','Thermostatic radiator valves',#8484,$,$);
+#8535=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_90','Three-way vent cocks',#8484,$,$);
+#8536=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_91','Three-way valves',#8484,$,$);
+#8537=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_92','Underfloor heating and cooling manifolds',#8484,$,$);
+#8538=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_94','Verifiable backflow prevention devices',#8484,$,$);
+#8539=IFCCLASSIFICATIONREFERENCE($,'Pr_65_54_95_96','Waterworks gate valves',#8484,$,$);
+#8540=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55','Liquid and gas distribution products',#7974,$,$);
+#8541=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_62','Phase change distribution products',#8540,$,$);
+#8542=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_62_12','Chlorine catchpots',#8541,$,$);
+#8543=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_62_47','Liquefied petroleum gas (LPG) vaporizers',#8541,$,$);
+#8544=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76','Separators',#8540,$,$);
+#8545=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_04','Austenitic stainless steel steam separators',#8544,$,$);
+#8546=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_11','Carbon steel steam separators',#8544,$,$);
+#8547=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_12','Cast iron steam separators',#8544,$,$);
+#8548=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_13','Centrifugal air separators',#8544,$,$);
+#8549=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_15','Combined air and dirt separators',#8544,$,$);
+#8550=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_22','Dirt separators',#8544,$,$);
+#8551=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_58','Oil and petrol separators',#8544,$,$);
+#8552=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_59','Oil and water separators',#8544,$,$);
+#8553=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_77','SG iron steam separators',#8544,$,$);
+#8554=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_84','Stainless steel steam separators',#8544,$,$);
+#8555=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_76_96','Water separators',#8544,$,$);
+#8556=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_84','Steam and condensate distribution products',#8540,$,$);
+#8557=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_84_50','Steam manifolds',#8556,$,$);
+#8558=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_84_75','Sample coolers',#8556,$,$);
+#8559=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_84_94','Vacuum breakers',#8556,$,$);
+#8560=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_85','Steam and condensate recovery vessels',#8540,$,$);
+#8561=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_85_08','Blowdown vessels',#8560,$,$);
+#8562=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_85_30','Flash steam recovery vessels',#8560,$,$);
+#8563=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_85_85','Steam feedtanks',#8560,$,$);
+#8564=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86','Steam traps and strainers',#8540,$,$);
+#8565=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_05','Angle steam strainers',#8564,$,$);
+#8566=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_06','Balanced pressure steam traps',#8564,$,$);
+#8567=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_07','Ball float steam traps',#8564,$,$);
+#8568=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_08','Bimetallic steam traps',#8564,$,$);
+#8569=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_42','Inverted bucket steam traps',#8564,$,$);
+#8570=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_88','Thermodynamic steam traps',#8564,$,$);
+#8571=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_89','Thermostatic steam traps',#8564,$,$);
+#8572=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_86_99','Y-type steam strainers',#8564,$,$);
+#8573=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_96','Washing products',#8540,$,$);
+#8574=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_96_24','Drive-through wheel wash',#8573,$,$);
+#8575=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_96_72','Roller wheel wash',#8573,$,$);
+#8576=IFCCLASSIFICATIONREFERENCE($,'Pr_65_55_96_96','Wash plant',#8573,$,$);
+#8577=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57','Filter products',#7974,$,$);
+#8578=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02','Air filters',#8577,$,$);
+#8579=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_02','Activated carbon air filters',#8578,$,$);
+#8580=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_03','Air gas and vapour cleaners',#8578,$,$);
+#8581=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_04','Air particle cleaners',#8578,$,$);
+#8582=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_06','Baffle grease air filters',#8578,$,$);
+#8583=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_07','Bag air filters',#8578,$,$);
+#8584=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_11','Cartridge grease air filters',#8578,$,$);
+#8585=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_15','Cold water mist grease air filters',#8578,$,$);
+#8586=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_20','Cyclone filters',#8578,$,$);
+#8587=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_25','Duct-mounted modular electrostatic air filters',#8578,$,$);
+#8588=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_26','Efficient particulate arrestor (EPA) air filters',#8578,$,$);
+#8589=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_28','Electrostatic precipitators',#8578,$,$);
+#8590=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_29','Fabric filters',#8578,$,$);
+#8591=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_37','High efficiency particle arrestor (HEPA) air filters',#8578,$,$);
+#8592=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_52','Mesh air filters',#8578,$,$);
+#8593=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_53','Mesh impingement grease filters',#8578,$,$);
+#8594=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_66','Panel air filters',#8578,$,$);
+#8595=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_70','Safe change filter changing units',#8578,$,$);
+#8596=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_92','Ultra-low particle arrestor (ULPA) air filters',#8578,$,$);
+#8597=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_93','Ultraviolet light grease filters',#8578,$,$);
+#8598=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_96','Water wash grease air filters',#8578,$,$);
+#8599=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_02_97','Wet scrubber filters',#8578,$,$);
+#8600=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_33','Gas and air filters',#8577,$,$);
+#8601=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_33_02','Activated carbon compressed air filters',#8600,$,$);
+#8602=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_33_15','Coalescing compressed air filters',#8600,$,$);
+#8603=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_33_25','Dust compressed air filters',#8600,$,$);
+#8604=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_33_33','Gas filters',#8600,$,$);
+#8605=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_58','Oil filters and strainers',#8577,$,$);
+#8606=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_58_58','Oil filters',#8605,$,$);
+#8607=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_58_59','Oil strainers',#8605,$,$);
+#8608=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85','Swimming pool water filters and strainers',#8577,$,$);
+#8609=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_06','Basket filters',#8608,$,$);
+#8610=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_07','Basket strainers',#8608,$,$);
+#8611=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_12','Cartridge pool water filters',#8608,$,$);
+#8612=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_22','Diatomaceous earth water filters',#8608,$,$);
+#8613=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_33','Glass media water filters',#8608,$,$);
+#8614=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_65','Pressure water filters',#8608,$,$);
+#8615=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_70','Regenerative water filters',#8608,$,$);
+#8616=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_85_75','Sand water filters',#8608,$,$);
+#8617=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95','Water feature filters and strainers',#8577,$,$);
+#8618=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_07','Biological filters',#8617,$,$);
+#8619=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_11','Cartridge water filters',#8617,$,$);
+#8620=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_13','Centrifugal particle separators',#8617,$,$);
+#8621=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_22','Disc filters',#8617,$,$);
+#8622=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_42','In-line water filters',#8617,$,$);
+#8623=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_51','Media water filters',#8617,$,$);
+#8624=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_76','Screen filters',#8617,$,$);
+#8625=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_95_96','Water strainers',#8617,$,$);
+#8626=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96','Water filters and strainers',#8577,$,$);
+#8627=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_02','Activated carbon water filters',#8626,$,$);
+#8628=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_03','Active biological water filters',#8626,$,$);
+#8629=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_04','Angle water strainers',#8626,$,$);
+#8630=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_08','Basket water strainers',#8626,$,$);
+#8631=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_09','Bottle brush water filters',#8626,$,$);
+#8632=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_11','Canister water filters',#8626,$,$);
+#8633=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_13','Chlorine dioxide biological water filters',#8626,$,$);
+#8634=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_16','Conical water filters',#8626,$,$);
+#8635=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_29','Fast bed rapid sand water filters',#8626,$,$);
+#8636=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_30','Floating tank water filters',#8626,$,$);
+#8637=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_34','Granular activated carbon water filters',#8626,$,$);
+#8638=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_35','Gravel water filters',#8626,$,$);
+#8639=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_52','Membrane water filters',#8626,$,$);
+#8640=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_53','Mesh water filters',#8626,$,$);
+#8641=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_62','Pilot water filters',#8626,$,$);
+#8642=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_70','Rapid gravity water filters',#8626,$,$);
+#8643=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_72','Reed bed water filters',#8626,$,$);
+#8644=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_76','Side stream water filter and dosing units',#8626,$,$);
+#8645=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_77','Side stream water filters',#8626,$,$);
+#8646=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_79','Slow bed sand water filters',#8626,$,$);
+#8647=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_86','Subsurface vortex water filters',#8626,$,$);
+#8648=IFCCLASSIFICATIONREFERENCE($,'Pr_65_57_96_99','Y-type water strainers',#8626,$,$);
+#8649=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65','Ductwork products',#7974,$,$);
+#8650=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_23','Ductwork accessories',#8649,$,$);
+#8651=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_23_20','Duct access panels',#8650,$,$);
+#8652=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_23_25','Ductwork access doorsets',#8650,$,$);
+#8653=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_23_27','Ductwork security bars',#8650,$,$);
+#8654=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_23_69','Quench pipe bellows',#8650,$,$);
+#8655=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24','Duct dampers',#8649,$,$);
+#8656=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_16','Constant volume boxes',#8655,$,$);
+#8657=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_29','Fire and smoke dampers',#8655,$,$);
+#8658=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_30','Fire dampers',#8655,$,$);
+#8659=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_42','Intumescent fire and smoke dampers',#8655,$,$);
+#8660=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_56','Non-return dampers',#8655,$,$);
+#8661=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_66','Pressure control flaps',#8655,$,$);
+#8662=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_68','Pressure relief dampers',#8655,$,$);
+#8663=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_78','Shut-off dampers',#8655,$,$);
+#8664=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_80','Smoke dampers',#8655,$,$);
+#8665=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_93','Variable air volume boxes',#8655,$,$);
+#8666=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_24_95','Volume control dampers',#8655,$,$);
+#8667=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25','Ductwork and fittings',#8649,$,$);
+#8668=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_13','Circular plastics ductwork and fittings',#8667,$,$);
+#8669=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_14','Circular sheet metal ductwork and fittings',#8667,$,$);
+#8670=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_23','Domestic rigid ductwork and fittings',#8667,$,$);
+#8671=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_28','Fabric ductwork and fittings',#8667,$,$);
+#8672=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_30','Fire-resisting ductwork and fittings',#8667,$,$);
+#8673=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_31','Flat oval sheet metal ductwork and fittings',#8667,$,$);
+#8674=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_32','Flexible ductwork',#8667,$,$);
+#8675=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_34','Glass fibre ductwork and fittings',#8667,$,$);
+#8676=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_64','Pre-insulated ductwork and fittings',#8667,$,$);
+#8677=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_69','Quench pipe and fittings',#8667,$,$);
+#8678=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_71','Rectangular plastics ductwork and fittings',#8667,$,$);
+#8679=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_72','Rectangular sheet metal ductwork and fittings',#8667,$,$);
+#8680=IFCCLASSIFICATIONREFERENCE($,'Pr_65_65_25_77','Smoke extract ductwork',#8667,$,$);
+#8681=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67','Air and fume distribution products',#7974,$,$);
+#8682=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16','Compressed air products',#8681,$,$);
+#8683=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_02','Air compressors',#8682,$,$);
+#8684=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_03','Air-cooled aftercoolers',#8682,$,$);
+#8685=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_04','Air preparation units',#8682,$,$);
+#8686=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_05','Air receivers',#8682,$,$);
+#8687=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_08','Blow protectors',#8682,$,$);
+#8688=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_22','Desiccant air dryers',#8682,$,$);
+#8689=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_50','Medical gas compressors',#8682,$,$);
+#8690=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_71','Refrigerant air dryers',#8682,$,$);
+#8691=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_16_96','Water-cooled aftercoolers',#8682,$,$);
+#8692=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29','Fans',#8681,$,$);
+#8693=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_05','Axial flow fans',#8692,$,$);
+#8694=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_09','Bifurcated fans',#8692,$,$);
+#8695=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_12','Centrifugal fans',#8692,$,$);
+#8696=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_15','Corrosive fume fans',#8692,$,$);
+#8697=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_23','Domestic fan units',#8692,$,$);
+#8698=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_24','Domestic multipoint fan units',#8692,$,$);
+#8699=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_26','Explosion and flameproof fans',#8692,$,$);
+#8700=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_44','Jet fans',#8692,$,$);
+#8701=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_52','Mixed flow fans',#8692,$,$);
+#8702=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_62','Plug fans',#8692,$,$);
+#8703=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_64','Powered smoke and heat exhaust ventilators',#8692,$,$);
+#8704=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_67','Propeller fans',#8692,$,$);
+#8705=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_72','Roof-mounted fans',#8692,$,$);
+#8706=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_80','Smoke extract fans',#8692,$,$);
+#8707=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_88','Twin axial fans',#8692,$,$);
+#8708=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_89','Twin centrifugal fans',#8692,$,$);
+#8709=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_29_96','Whole dwelling fan units',#8692,$,$);
+#8710=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39','Humidifiers and dehumidifiers',#8681,$,$);
+#8711=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39_22','Desiccant dehumidifiers',#8710,$,$);
+#8712=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39_28','Evaporative humidifiers',#8710,$,$);
+#8713=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39_37','Heat pump dehumidifiers',#8710,$,$);
+#8714=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39_84','Steam humidifiers',#8710,$,$);
+#8715=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_39_96','Water atomizing humidifiers',#8710,$,$);
+#8716=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_46','Laboratory gas products',#8681,$,$);
+#8717=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_46_56','Nitrogen receivers',#8716,$,$);
+#8718=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78','Sound attenuators',#8681,$,$);
+#8719=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78_02','Acoustic duct linings',#8718,$,$);
+#8720=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78_05','Air transfer and crosstalk attenuators',#8718,$,$);
+#8721=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78_07','Attenuated openings',#8718,$,$);
+#8722=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78_12','Circular attenuators',#8718,$,$);
+#8723=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_78_72','Rectangular attenuators',#8718,$,$);
+#8724=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_94','Vehicle exhaust distribution products',#8681,$,$);
+#8725=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_94_25','Ducted rail tracks',#8724,$,$);
+#8726=IFCCLASSIFICATIONREFERENCE($,'Pr_65_67_94_76','Self-sealing floor plates',#8724,$,$);
+#8727=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70','Cables, conductors and fittings products',#7974,$,$);
+#8728=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11','Cable management and accessories',#8727,$,$);
+#8729=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_02','Cable assemblies',#8728,$,$);
+#8730=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_06','Bench trunking',#8728,$,$);
+#8731=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_09','Buried conduit',#8728,$,$);
+#8732=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_10','Cable brackets',#8728,$,$);
+#8733=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_11','Cable bands',#8728,$,$);
+#8734=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_12','Cable baskets',#8728,$,$);
+#8735=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_13','Cable cleats',#8728,$,$);
+#8736=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_14','Cable ladders',#8728,$,$);
+#8737=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_15','Cable ties',#8728,$,$);
+#8738=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_16','Cable troughs',#8728,$,$);
+#8739=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_17','Cable trays',#8728,$,$);
+#8740=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_18','Cable trunking',#8728,$,$);
+#8741=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_19','Channel cable supports',#8728,$,$);
+#8742=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_20','Conduit fittings',#8728,$,$);
+#8743=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_21','Cable jointing pits',#8728,$,$);
+#8744=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_25','Duct banks',#8728,$,$);
+#8745=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_29','Flexible electrical cable carriers',#8728,$,$);
+#8746=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_30','Flexible conduit',#8728,$,$);
+#8747=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_31','Floor-mounted cable trunking and ducting',#8728,$,$);
+#8748=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_34','Cable glands',#8728,$,$);
+#8749=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_41','Insulating cable trays',#8728,$,$);
+#8750=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_47','Lighting busbar trunking',#8728,$,$);
+#8751=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_61','Perimeter trunking',#8728,$,$);
+#8752=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_62','Plastics ducts for buried electric cables',#8728,$,$);
+#8753=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_63','Pliable conduit',#8728,$,$);
+#8754=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_64','Points heating harnesses',#8728,$,$);
+#8755=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_65','Polyvinyl chloride (PVC) trunking',#8728,$,$);
+#8756=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_70','Raised access floor service outlets',#8728,$,$);
+#8757=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_71','Rigid conduit',#8728,$,$);
+#8758=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_75','Service outlet boxes',#8728,$,$);
+#8759=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_76','Service outlet poles',#8728,$,$);
+#8760=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_78','Skirting trunking',#8728,$,$);
+#8761=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_79','Slotted cable trunking',#8728,$,$);
+#8762=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_80','Slotted insulating cable trays',#8728,$,$);
+#8763=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_90','Trunking fittings',#8728,$,$);
+#8764=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_11_96','Wall and ceiling-mounted cable trunking and ducting',#8728,$,$);
+#8765=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_12','Cable protection products',#8727,$,$);
+#8766=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_12_04','Anti-vandal cable guards',#8765,$,$);
+#8767=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_12_11','Cable capping',#8765,$,$);
+#8768=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_12_92','Underground concrete cable protection covers',#8765,$,$);
+#8769=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_12_94','Underground plastics cable protection covers',#8765,$,$);
+#8770=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13','Cathodic protection products',#8727,$,$);
+#8771=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13_08','Bulk anodes',#8770,$,$);
+#8772=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13_50','Mesh anodes',#8770,$,$);
+#8773=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13_72','Rod anodes',#8770,$,$);
+#8774=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13_85','Sheet anodes',#8770,$,$);
+#8775=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_13_98','Zinc core anodes',#8770,$,$);
+#8776=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15','Communications cables and accessories',#8727,$,$);
+#8777=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_03','Armoured coaxial communications cables',#8776,$,$);
+#8778=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_04','Armoured communications cables',#8776,$,$);
+#8779=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_06','Balanced twisted pair cables',#8776,$,$);
+#8780=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_13','Coaxial cables',#8776,$,$);
+#8781=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_15','Copper cable connectors',#8776,$,$);
+#8782=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_16','Copper cable terminations',#8776,$,$);
+#8783=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_17','Copper voice cables',#8776,$,$);
+#8784=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_18','Copper voice low-smoke halogen-free (LSHF) cables',#8776,$,$);
+#8785=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_32','Functional earth cables',#8776,$,$);
+#8786=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_47','Loose-tube gel-filled optical fibre cables',#8776,$,$);
+#8787=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_50','Microphone cables',#8776,$,$);
+#8788=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_53','Multicore alarm cables',#8776,$,$);
+#8789=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_58','Optical fibre cables',#8776,$,$);
+#8790=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_59','Optical fibre cable connectors',#8776,$,$);
+#8791=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_60','Optical fibre patch cords',#8776,$,$);
+#8792=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_62','Optical fibre splice boxes',#8776,$,$);
+#8793=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_63','Optical fibre cable terminations',#8776,$,$);
+#8794=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_70','Radio frequency (RF) transmission cables',#8776,$,$);
+#8795=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_71','Radiating leaky cables',#8776,$,$);
+#8796=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_80','Speaker cables',#8776,$,$);
+#8797=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_15_96','Work area and patch cord cables',#8776,$,$);
+#8798=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16','Conductor rail ancillaries',#8727,$,$);
+#8799=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_03','Anchor struts',#8798,$,$);
+#8800=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_08','Composite insulators',#8798,$,$);
+#8801=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_10','Conductor rail anchors',#8798,$,$);
+#8802=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_12','Conductor rail cover boards',#8798,$,$);
+#8803=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_15','Conductor rail guard boards',#8798,$,$);
+#8804=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_16','Conductor rail insulators',#8798,$,$);
+#8805=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_17','Conductor rail side ramps',#8798,$,$);
+#8806=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_18','Conductor rail ramps',#8798,$,$);
+#8807=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_20','Conductor rail supports',#8798,$,$);
+#8808=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_28','Eutectic strips',#8798,$,$);
+#8809=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_34','Glass fibre-reinforced nylon insulators',#8798,$,$);
+#8810=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_16_57','Nylon insulators',#8798,$,$);
+#8811=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_26','Electrostatic discharge protection',#8727,$,$);
+#8812=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_26_84','Static discharge plates',#8811,$,$);
+#8813=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36','High-voltage cables',#8727,$,$);
+#8814=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_34','High-voltage cold shrink cable joints',#8813,$,$);
+#8815=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_35','High-voltage extruded insulation cable terminations',#8813,$,$);
+#8816=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_36','High-voltage paper-insulated cable terminations',#8813,$,$);
+#8817=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_37','High-voltage power cables with extruded insulation',#8813,$,$);
+#8818=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_38','High-voltage power cables with low-smoke thermosetting insulation',#8813,$,$);
+#8819=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_39','High-voltage power cables with impregnated paper insulation lead alloy sheath',#8813,$,$);
+#8820=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_36_40','High-voltage power cables with thermosetting insulation',#8813,$,$);
+#8821=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42','Overhead line insulators',#8727,$,$);
+#8822=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_26','Deadend insulators',#8821,$,$);
+#8823=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_36','High-voltage pin insulators',#8821,$,$);
+#8824=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_46','Line post insulators',#8821,$,$);
+#8825=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_47','Longrod insulators',#8821,$,$);
+#8826=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_48','Low-voltage pin insulators',#8821,$,$);
+#8827=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_77','Shackle insulators',#8821,$,$);
+#8828=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_82','Spool insulators',#8821,$,$);
+#8829=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_83','Station post insulators',#8821,$,$);
+#8830=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_84','Stay insulators',#8821,$,$);
+#8831=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_85','Strain insulators',#8821,$,$);
+#8832=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_42_86','Suspension insulators',#8821,$,$);
+#8833=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46','Lightning protection and earthing components',#8727,$,$);
+#8834=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_01','Air terminals',#8833,$,$);
+#8835=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_03','Aluminium earth tapes',#8833,$,$);
+#8836=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_04','Aluminium rod lightning conductors',#8833,$,$);
+#8837=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_14','Copper earth tapes',#8833,$,$);
+#8838=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_15','Copper solid circular lightning conductors',#8833,$,$);
+#8839=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_24','Earth bars',#8833,$,$);
+#8840=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_25','Earth plates',#8833,$,$);
+#8841=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_26','Earth rod inspection pits',#8833,$,$);
+#8842=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_27','Earth rods',#8833,$,$);
+#8843=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_29','Earthing clamps',#8833,$,$);
+#8844=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_30','Earthing conductors',#8833,$,$);
+#8845=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_32','Flexible braids',#8833,$,$);
+#8846=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_46','Lightning protection conductor clamps',#8833,$,$);
+#8847=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_47','Lightning protection conductor metallic direct contact clips',#8833,$,$);
+#8848=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_48','Lightning protection conductor non-metallic direct contact clips',#8833,$,$);
+#8849=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_46_80','Soil conditioning conductive agents',#8833,$,$);
+#8850=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48','Low-voltage cables',#8727,$,$);
+#8851=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_13','Cross-linked ethylene vinyl acetate (EVA)-insulated non-sheathed single-core cables',#8850,$,$);
+#8852=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_14','Cross-linked silicone rubber-insulated single-core cables',#8850,$,$);
+#8853=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_15','Cross-linked polyolefin-insulated low-smoke halogen-free (LSHF) non-sheathed single-core cables',#8850,$,$);
+#8854=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_29','Fire-resistant screened low-smoke halogen-free (LSHF) cables',#8850,$,$);
+#8855=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_31','Cross-linked elastomeric-insulated flexible cables',#8850,$,$);
+#8856=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_32','Thermoplastic polyvinyl chloride (PVC)-insulated flexible cables',#8850,$,$);
+#8857=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_37','Cross-linked elastomeric-insulated heat-resistant single-core non-sheathed cables',#8850,$,$);
+#8858=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_38','Heavy-duty cross-linked elastomeric-insulated and sheathed flexible cables',#8850,$,$);
+#8859=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_39','Heavy-duty cross-linked elastomeric-insulated and sheathed heat-resistant flexible single-core cables',#8850,$,$);
+#8860=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_40','Heavy-duty low-smoke halogen-free (LSHF) insulated and sheathed heat-resistant flexible cables',#8850,$,$);
+#8861=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_41','Heavy-duty mineral-insulated cables',#8850,$,$);
+#8862=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_46','Light-duty polyvinyl chloride (PVC)-insulated and sheathed heat-resistant flexible cables',#8850,$,$);
+#8863=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_48','Light-duty mineral-insulated cables',#8850,$,$);
+#8864=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_49','Light-duty polyvinyl chloride (PVC)-insulated and sheathed flexible cables',#8850,$,$);
+#8865=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_50','Low-voltage cold shrink cable joints',#8850,$,$);
+#8866=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_54','Ordinary-duty cross-linked elastomeric-insulated thermoplastic polyurethane (TPU)-sheathed heat-resistant flexible cables',#8850,$,$);
+#8867=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_55','Cross-linked elastomeric-insulated and thermoplastic-sheathed low-smoke halogen-free (LSHF) screened multicore cables',#8850,$,$);
+#8868=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_56','Ordinary-duty cross-linked elastomeric-insulated and sheathed flexible cables',#8850,$,$);
+#8869=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_57','Ordinary-duty cross-linked elastomeric-insulated and sheathed heat-resistant flexible cables',#8850,$,$);
+#8870=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_58','Ordinary-duty polyvinyl chloride (PVC)-insulated and sheathed heat-resistant flexible cables',#8850,$,$);
+#8871=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_59','Ordinary-duty polyvinyl chloride (PVC)-insulated and sheathed low-temperature flexible cables',#8850,$,$);
+#8872=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_60','Ordinary-duty polyvinyl chloride (PVC)-insulated and sheathed flexible cables',#8850,$,$);
+#8873=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_61','Polyvinyl chloride (PVC)-insulated and sheathed cables',#8850,$,$);
+#8874=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_62','Polyvinyl chloride (PVC)-insulated flexible single-core cables for switchgear and controlgear wiring',#8850,$,$);
+#8875=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_63','Polyvinyl chloride (PVC)-insulated non-sheathed single-core cables',#8850,$,$);
+#8876=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_73','Heavy-duty cross-linked elastomeric-insulated and sheathed low-smoke halogen-free (LSHF) heat-resistant flexible single-core cables',#8850,$,$);
+#8877=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_74','Polyvinyl chloride (PVC)-insulated non-sheathed heat-resistant single-core cables',#8850,$,$);
+#8878=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_75','Low-smoke halogen-free (LSHF) insulated single-core non-sheathed cables',#8850,$,$);
+#8879=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_77','Polyvinyl chloride (PVC)-insulated single-core cables',#8850,$,$);
+#8880=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_79','Split concentric cables',#8850,$,$);
+#8881=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_88','Thermosetting insulated armoured fire-resistant low-smoke halogen-free (LSHF) cables',#8850,$,$);
+#8882=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_89','Thermosetting insulated polyvinyl chloride (PVC)-sheathed armoured cables',#8850,$,$);
+#8883=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_90','Thermosetting insulated thermoplastic-sheathed low-smoke halogen-free (LSHF) armoured cables',#8850,$,$);
+#8884=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_91','Thermosetting insulated thermoplastic-sheathed low-smoke halogen-free (LSHF) cables',#8850,$,$);
+#8885=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_92','Thermosetting insulated polyvinyl chloride (PVC)-sheathed non-armoured cables',#8850,$,$);
+#8886=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_93','Thermosetting insulated cross-linked polyethylene (XLPE) thermoplastic low-smoke halogen-free (LSHF) sheathed cables',#8850,$,$);
+#8887=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_94','Thermosetting insulated non-sheathed non-armoured fire-resistant single-core cables',#8850,$,$);
+#8888=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_48_95','Thermosetting insulated non-armoured fire-resistant single-core non-sheathed cables',#8850,$,$);
+#8889=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50','Low-voltage prefabricated cables',#8727,$,$);
+#8890=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_15','Connection cables',#8889,$,$);
+#8891=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_22','Distribution connectors',#8889,$,$);
+#8892=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_28','Extender cables',#8889,$,$);
+#8893=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_37','Home run cables',#8889,$,$);
+#8894=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_47','Lighting extender leads',#8889,$,$);
+#8895=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_49','Luminaire connection cables',#8889,$,$);
+#8896=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_64','Prefabricated low-smoke zero-halogen (LSZH) insulated and sheathed multicore cables',#8889,$,$);
+#8897=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_66','Prefabricated low-smoke zero-halogen (LSZH) insulated single cables in flexible conduit',#8889,$,$);
+#8898=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_72','RJ45 cables',#8889,$,$);
+#8899=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_84','Starter leads',#8889,$,$);
+#8900=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_86','Switch connection leads',#8889,$,$);
+#8901=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_50_88','''T'' connectors',#8889,$,$);
+#8902=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70','Railway rolling stock cables',#8727,$,$);
+#8903=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_53','Multicore, cross-linked elastomeric-insulated, reduced dimensions, special fire performance cables',#8902,$,$);
+#8904=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_55','Multicore, cross-linked elastomeric-insulated, special fire performance cables',#8902,$,$);
+#8905=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_57','Multicore and multi-pair, thin wall-insulated, special fire performance cables',#8902,$,$);
+#8906=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_83','Screened, multicore, cross-linked elastomeric-insulated, reduced dimensions, special fire performance cables',#8902,$,$);
+#8907=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_85','Single-core, cross-linked elastomeric-insulated, reduced dimensions, special fire performance cables',#8902,$,$);
+#8908=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_87','Single-core, cross-linked elastomeric-insulated, 600/ 1000 V, special fire performance cables',#8902,$,$);
+#8909=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_88','Single-core, cross-linked elastomeric-insulated, 1.8/ 3 kV, special fire performance cables',#8902,$,$);
+#8910=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_89','Single-core, silicone rubber-insulated, high-temperature, special fire performance cables',#8902,$,$);
+#8911=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_70_91','Single-core, thin wall-insulated, special fire performance cables',#8902,$,$);
+#8912=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80','Signalling cables',#8727,$,$);
+#8913=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_01','Two-core unscreened 1000 V low-smoke halogen-free (LSHF) cables',#8912,$,$);
+#8914=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_03','Abrasion-resistant single-core triple-insulated low-smoke halogen-free (LSHF) signalling equipment room cables',#8912,$,$);
+#8915=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_14','Concentric screened cables with screens separate',#8912,$,$);
+#8916=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_16','Concentric screened low-smoke halogen-free (LSHF) cables with screens separate',#8912,$,$);
+#8917=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_46','Multicore concentric screened low-smoke halogen-free (LSHF) track crossing cables with screens in contact',#8912,$,$);
+#8918=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_47','Multicore concentric screened track crossing cables with screens in contact',#8912,$,$);
+#8919=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_49','Multicore concentric screened track crossing cables with screens separate',#8912,$,$);
+#8920=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_51','Multicore screened low-smoke halogen-free (LSHF) cable run cables',#8912,$,$);
+#8921=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_52','Multicore screened low-smoke halogen-free (LSHF) track crossing cables',#8912,$,$);
+#8922=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_53','Multicore screened pair low-smoke halogen-free (LSHF) axle counter cables',#8912,$,$);
+#8923=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_55','Multi-pair screened low-smoke halogen-free (LSHF) cables with each pair screened',#8912,$,$);
+#8924=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_74','Single-core double-insulated inductive loop track cables',#8912,$,$);
+#8925=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_75','Single-core double-insulated (LSF) 600 V cables',#8912,$,$);
+#8926=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_76','Single-core double-insulated (LSF) 600 V track crossing cables',#8912,$,$);
+#8927=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_78','Single-core double-insulated (LSF) signalling equipment room cables',#8912,$,$);
+#8928=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_79','Single-core double-insulated (LSF) track crossing cables',#8912,$,$);
+#8929=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_81','Single-core (LSF) cables',#8912,$,$);
+#8930=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_83','Single-core screened pair axle counter cables',#8912,$,$);
+#8931=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_87','Triaxial, concentric cables',#8912,$,$);
+#8932=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_88','Triaxial concentric (LSF) cables',#8912,$,$);
+#8933=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_90','Twisted pair screened (LSF) cable run cables',#8912,$,$);
+#8934=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_91','Twisted pair screened (LSF) signalling equipment room cables',#8912,$,$);
+#8935=IFCCLASSIFICATIONREFERENCE($,'Pr_65_70_80_92','Twisted pair screened (LSF) track crossing cables',#8912,$,$);
+#8936=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72','Electrical power products and wiring accessories',#7974,$,$);
+#8937=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27','Electrical protective devices',#8936,$,$);
+#8938=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_02','Air circuit breakers',#8937,$,$);
+#8939=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_04','Arc fault detection devices',#8937,$,$);
+#8940=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_11','Cartridge fuses',#8937,$,$);
+#8941=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_23','Direct current (d.c.) surge protection devices',#8937,$,$);
+#8942=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_26','Earth continuity monitors',#8937,$,$);
+#8943=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_32','Fuse links',#8937,$,$);
+#8944=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_34','Fuse lock-off devices',#8937,$,$);
+#8945=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_37','High-speed circuit breakers',#8937,$,$);
+#8946=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_44','J-type feeder pillar fuses',#8937,$,$);
+#8947=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_47','Low-voltage fuses',#8937,$,$);
+#8948=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_48','Low-voltage power supply surge protection devices',#8937,$,$);
+#8949=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_50','Mains power supply transient overvoltage suppression devices',#8937,$,$);
+#8950=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_52','Miniature circuit breakers',#8937,$,$);
+#8951=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_53','Moulded case circuit breakers',#8937,$,$);
+#8952=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_54','Motor protection circuit breakers',#8937,$,$);
+#8953=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_62','Photovoltaic installation direct current (d.c.) surge protection devices',#8937,$,$);
+#8954=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_64','Plug-in mains power extensions with integral surge protection devices',#8937,$,$);
+#8955=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_72','Residual current circuit breakers',#8937,$,$);
+#8956=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_73','Residual current circuit breakers with integral overcurrent protection',#8937,$,$);
+#8957=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_74','Residual current monitors',#8937,$,$);
+#8958=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_75','Safety isolating transformers',#8937,$,$);
+#8959=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_27_88','Transient overvoltage surge suppression devices',#8937,$,$);
+#8960=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43','Power conditioning equipment',#8936,$,$);
+#8961=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_01','Active electrical filters',#8960,$,$);
+#8962=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_05','Automatic power factor correction equipment',#8960,$,$);
+#8963=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_07','Blocking diodes',#8960,$,$);
+#8964=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_39','Hybrid electrical filters',#8960,$,$);
+#8965=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_41','Inductive voltage transformers',#8960,$,$);
+#8966=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_42','Inverters',#8960,$,$);
+#8967=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_60','Passive electrical filters',#8960,$,$);
+#8968=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_64','Power conditioning units',#8960,$,$);
+#8969=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_71','Rectifiers',#8960,$,$);
+#8970=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_90','Transient electromagnetic pulse emanation standard (TEMPEST) filters',#8960,$,$);
+#8971=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_43_95','Voltage optimizers',#8960,$,$);
+#8972=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59','Overhead power supply line products',#8936,$,$);
+#8973=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_02','Anti-arcing devices',#8972,$,$);
+#8974=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_04','Autotransformer feeders (ATF)',#8972,$,$);
+#8975=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_06','Balance weight anchor tensioning devices',#8972,$,$);
+#8976=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_09','Butt splices',#8972,$,$);
+#8977=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_13','Compression splices',#8972,$,$);
+#8978=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_15','Cone-type termination fittings',#8972,$,$);
+#8979=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_17','Conical couplers',#8972,$,$);
+#8980=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_19','Cross contact bars',#8972,$,$);
+#8981=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_30','Flexible jumpers',#8972,$,$);
+#8982=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_32','Forked collar sockets',#8972,$,$);
+#8983=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_42','In span jumpers',#8972,$,$);
+#8984=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_57','Overhead line contact wires',#8972,$,$);
+#8985=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_71','Registration arms',#8972,$,$);
+#8986=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_72','Registration arm continuity jumpers',#8972,$,$);
+#8987=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_73','Registration tubes',#8972,$,$);
+#8988=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_80','Spring tensioning devices',#8972,$,$);
+#8989=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_59_90','Turnbuckle tensioning devices',#8972,$,$);
+#8990=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60','Overhead power supply line support products',#8936,$,$);
+#8991=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_08','Bridge arms',#8990,$,$);
+#8992=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_18','Cross droppers',#8990,$,$);
+#8993=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_25','Drop tubes',#8990,$,$);
+#8994=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_51','Midpoint anchors',#8990,$,$);
+#8995=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_55','Overhead line cable supports',#8990,$,$);
+#8996=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_56','Overhead line catenary wires',#8990,$,$);
+#8997=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_58','Overhead line droppers',#8990,$,$);
+#8998=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_59','Overhead line fixings',#8990,$,$);
+#8999=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_60','Overhead line mounting structures',#8990,$,$);
+#9000=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_61','Overhead line span wires',#8990,$,$);
+#9001=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_63','Overhead wiring splices',#8990,$,$);
+#9002=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_65','Portal midpoint anchors',#8990,$,$);
+#9003=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_79','Single insulator single cantilevers',#8990,$,$);
+#9004=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_80','Single insulator triple cantilevers',#8990,$,$);
+#9005=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_81','Single insulator twin cantilevers',#8990,$,$);
+#9006=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_83','Spring droppers',#8990,$,$);
+#9007=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_85','Swivel fasteners',#8990,$,$);
+#9008=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_88','Tie wire midpoint anchors',#8990,$,$);
+#9009=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_60_93','Uplift droppers',#8990,$,$);
+#9010=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97','Wiring accessories',#8936,$,$);
+#9011=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_03','Architrave switches',#9010,$,$);
+#9012=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_06','Bayonet batten lampholders',#9010,$,$);
+#9013=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_11','Cable couplers',#9010,$,$);
+#9014=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_12','Cable outlet plates',#9010,$,$);
+#9015=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_16','Ceiling light switches',#9010,$,$);
+#9016=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_17','Ceiling power switches',#9010,$,$);
+#9017=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_18','Ceiling roses',#9010,$,$);
+#9018=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_19','Combination socket outlet units',#9010,$,$);
+#9019=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_20','Cooker control units',#9010,$,$);
+#9020=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_21','Cooker connection units',#9010,$,$);
+#9021=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_22','Dimmer switches and controls',#9010,$,$);
+#9022=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_23','Double-pole switches',#9010,$,$);
+#9023=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_26','Edison screw batten lampholders',#9010,$,$);
+#9024=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_27','Electrical connection boxes',#9010,$,$);
+#9025=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_28','End brackets',#9010,$,$);
+#9026=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_29','Electric vehicle charging points',#9010,$,$);
+#9027=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_30','Fan isolators',#9010,$,$);
+#9028=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_31','Fused connection units',#9010,$,$);
+#9029=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_32','Fused stud terminals',#9010,$,$);
+#9030=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_34','Grid switches',#9010,$,$);
+#9031=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_40','Industrial plugs',#9010,$,$);
+#9032=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_41','Industrial socket outlets',#9010,$,$);
+#9033=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_45','Key-operated switches',#9010,$,$);
+#9034=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_46','Light switches',#9010,$,$);
+#9035=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_47','Luminaire supporting couplers',#9010,$,$);
+#9036=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_52','Multi-gang power outlets',#9010,$,$);
+#9037=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_63','Plate switches',#9010,$,$);
+#9038=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_66','Prefabricated wiring switches',#9010,$,$);
+#9039=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_72','Round pin socket outlets',#9010,$,$);
+#9040=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_75','Safety pendant lamp holders',#9010,$,$);
+#9041=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_76','Safety pendant sets',#9010,$,$);
+#9042=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_78','Shaver supply units',#9010,$,$);
+#9043=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_79','Single voltage shaver outlets',#9010,$,$);
+#9044=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_80','Socket outlet fire-stopping inserts',#9010,$,$);
+#9045=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_81','Socket outlet residual current devices (SRCD)',#9010,$,$);
+#9046=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_82','Specialist socket outlets',#9010,$,$);
+#9047=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_83','Surface and concealed wiring enclosures',#9010,$,$);
+#9048=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_84','Standard socket outlets',#9010,$,$);
+#9049=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_85','Stud terminal covers',#9010,$,$);
+#9050=IFCCLASSIFICATIONREFERENCE($,'Pr_65_72_97_86','Stud terminals',#9010,$,$);
+#9051=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80','Transport distribution products',#7974,$,$);
+#9052=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_06','Baggage handling conveyors',#9051,$,$);
+#9053=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_10','Conveyor components',#9051,$,$);
+#9054=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_10_07','Boat roller cylinders',#9053,$,$);
+#9055=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15','Cranes and lifting products',#9051,$,$);
+#9056=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_09','Cable slot channels',#9055,$,$);
+#9057=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_11','Cable slot covers',#9055,$,$);
+#9058=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_13','Cable turnover pits',#9055,$,$);
+#9059=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_16','Crane arrestors',#9055,$,$);
+#9060=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_18','Crane stow pin sockets',#9055,$,$);
+#9061=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_22','Detachable hooks',#9055,$,$);
+#9062=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_47','Lifting rings',#9055,$,$);
+#9063=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_48','Lifting trunnions',#9055,$,$);
+#9064=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_59','Overhead travelling cranes',#9055,$,$);
+#9065=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_71','Roof trolleys',#9055,$,$);
+#9066=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_73','Runway tracks',#9055,$,$);
+#9067=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_74','Runway trolleys',#9055,$,$);
+#9068=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_15_88','Tie-down slots',#9055,$,$);
+#9069=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_23','Dock levellers',#9051,$,$);
+#9070=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_23_06','Bascule dock bridges',#9069,$,$);
+#9071=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_23_38','Hydraulic hinged-lip dock levellers',#9069,$,$);
+#9072=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_23_39','Hydraulic telescopic-lip dock levellers',#9069,$,$);
+#9073=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_23_51','Mechanical dock levellers',#9069,$,$);
+#9074=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28','Escalator and moving walk products',#9051,$,$);
+#9075=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_04','Escalator and moving walk auxiliary brakes',#9074,$,$);
+#9076=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_06','Escalator and moving walk balustrades',#9074,$,$);
+#9077=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_07','Escalator and moving walk balustrade newels',#9074,$,$);
+#9078=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_09','Escalator and moving walk belts',#9074,$,$);
+#9079=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_12','Escalator and moving walk cladding',#9074,$,$);
+#9080=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_14','Escalator combs',#9074,$,$);
+#9081=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_16','Escalator comb plates',#9074,$,$);
+#9082=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_21','Escalators',#9074,$,$);
+#9083=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_22','Escalator and moving walk decking',#9074,$,$);
+#9084=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_24','Escalator and moving walk drive units',#9074,$,$);
+#9085=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_36','Escalator and moving walk handrails',#9074,$,$);
+#9086=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_38','Escalator hand winding devices',#9074,$,$);
+#9087=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_41','Escalator and moving walk inspection covers',#9074,$,$);
+#9088=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_46','Escalator and moving walk landing floor plates',#9074,$,$);
+#9089=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_52','Moving walks',#9074,$,$);
+#9090=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_58','Escalator and moving walk operational brakes',#9074,$,$);
+#9091=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_60','Escalator pallets',#9074,$,$);
+#9092=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_78','Escalator and moving walk skirtings',#9074,$,$);
+#9093=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_80','Escalator and moving walk skirt deflectors',#9074,$,$);
+#9094=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_84','Escalator step treads',#9074,$,$);
+#9095=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_89','Moving walk treadway belts',#9074,$,$);
+#9096=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_28_90','Moving walk treadway pallets',#9074,$,$);
+#9097=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42','Transport cars, platforms and chairs',#9051,$,$);
+#9098=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_11','Cable cars',#9097,$,$);
+#9099=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_15','Chairlifts',#9097,$,$);
+#9100=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_37','Homelifts',#9097,$,$);
+#9101=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_64','Platform lifts',#9097,$,$);
+#9102=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_77','Ski lift chairs',#9097,$,$);
+#9103=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_83','Step lifts',#9097,$,$);
+#9104=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_85','Standing platform stairlifts',#9097,$,$);
+#9105=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_42_97','Wheelchair platform stairlifts',#9097,$,$);
+#9106=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_46','Laundry conveyors',#9051,$,$);
+#9107=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_46_15','Laundry and garment conveyors',#9106,$,$);
+#9108=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_46_42','Inclined loading laundry conveyors',#9106,$,$);
+#9109=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_46_77','Shuttle lifting laundry conveyors',#9106,$,$);
+#9110=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47','Lifting gear',#9051,$,$);
+#9111=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_04','Assisted transfer hoists',#9110,$,$);
+#9112=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_12','Ceiling track hoists',#9110,$,$);
+#9113=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_31','Fixed hoists',#9110,$,$);
+#9114=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_47','Lifting chains and sprockets',#9110,$,$);
+#9115=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_48','Lifting ropes and drums',#9110,$,$);
+#9116=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_53','Moveable hoists',#9110,$,$);
+#9117=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_64','Poolside hoists',#9110,$,$);
+#9118=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_76','Service hoists',#9110,$,$);
+#9119=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_94','Vehicle hoists',#9110,$,$);
+#9120=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_95','Vertical lifting platforms',#9110,$,$);
+#9121=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_96','Vertical storage lifts',#9110,$,$);
+#9122=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_47_98','Winches',#9110,$,$);
+#9123=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_49','Lift products and components',#9051,$,$);
+#9124=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_49_08','Braking resistors',#9123,$,$);
+#9125=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_49_10','Lift buffers',#9123,$,$);
+#9126=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_49_15','Lift counterweights',#9123,$,$);
+#9127=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_49_16','Lift counterweight screens',#9123,$,$);
+#9128=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65','Pneumatic conveying products',#9051,$,$);
+#9129=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_63','Pneumatic document conveying blowers',#9128,$,$);
+#9130=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_64','Pneumatic document conveying carriers',#9128,$,$);
+#9131=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_65','Pneumatic document conveying diverters',#9128,$,$);
+#9132=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_66','Pneumatic document conveying pipes and fittings',#9128,$,$);
+#9133=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_67','Pneumatic document conveying stations',#9128,$,$);
+#9134=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_65_70','Pneumatic waste screw conveyors',#9128,$,$);
+#9135=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_89','Transport cables',#9051,$,$);
+#9136=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_89_11','Cable car cables',#9135,$,$);
+#9137=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_89_46','Lift cables',#9135,$,$);
+#9138=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_89_85','Ski lift cables',#9135,$,$);
+#9139=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96','Wastewater conveyor products',#9051,$,$);
+#9140=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96_07','Belt conveyors',#9139,$,$);
+#9141=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96_24','Drag or chain link conveyors',#9139,$,$);
+#9142=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96_76','Screw conveyors',#9139,$,$);
+#9143=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96_79','Shafted screw conveyors',#9139,$,$);
+#9144=IFCCLASSIFICATIONREFERENCE($,'Pr_65_80_96_80','Shaftless spiral conveyors',#9139,$,$);
+#9145=IFCCLASSIFICATIONREFERENCE($,'Pr_70','Services and process outlet products',#8,$,$);
+#9146=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50','Solid waste disposal products',#9145,$,$);
+#9147=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_71','Refuse disposal equipment',#9146,$,$);
+#9148=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_71_18','Crushers',#9147,$,$);
+#9149=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_71_42','Incinerators',#9147,$,$);
+#9150=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_71_60','Packagers',#9147,$,$);
+#9151=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_80','Solid waste balers',#9146,$,$);
+#9152=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_80_37','Horizontal balers',#9151,$,$);
+#9153=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_80_94','Vertical balers',#9151,$,$);
+#9154=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85','Solid waste compactor products',#9146,$,$);
+#9155=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_24','Dry waste compactors',#9154,$,$);
+#9156=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_37','High-density compaction extruders',#9154,$,$);
+#9157=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_65','Portable waste compactors',#9154,$,$);
+#9158=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_66','Portable waste compactor and bin lifts',#9154,$,$);
+#9159=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_78','Skip-portable waste compactors',#9154,$,$);
+#9160=IFCCLASSIFICATIONREFERENCE($,'Pr_70_50_85_96','Wet waste compactors',#9154,$,$);
+#9161=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55','Liquid and gas outlet products',#9145,$,$);
+#9162=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_33','Gas and foam nozzles and sprinklers',#9161,$,$);
+#9163=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_33_11','Carbon dioxide fire-extinguishing nozzles',#9162,$,$);
+#9164=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_33_28','Foam firefighting monitors',#9162,$,$);
+#9165=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_33_30','Foam sprinklers',#9162,$,$);
+#9166=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_33_36','Halocarbons and inert gas fire-extinguishing nozzles',#9162,$,$);
+#9167=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42','Irrigation water outlets',#9161,$,$);
+#9168=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_09','Bubblers',#9167,$,$);
+#9169=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_11','Capillary matting',#9167,$,$);
+#9170=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_22','Drippers',#9167,$,$);
+#9171=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_46','Lateral pipelines',#9167,$,$);
+#9172=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_47','Layered irrigation matting',#9167,$,$);
+#9173=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_52','Micro-distribution pipelines',#9167,$,$);
+#9174=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_53','Micro-perforated polyethylene sheet',#9167,$,$);
+#9175=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_54','Misters',#9167,$,$);
+#9176=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_58','Oscillating sprinklers',#9167,$,$);
+#9177=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_64','Porous pipelines',#9167,$,$);
+#9178=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_70','Rain guns',#9167,$,$);
+#9179=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_73','Rotary impact sprinklers',#9167,$,$);
+#9180=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_80','Spray jets',#9167,$,$);
+#9181=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_42_90','Tree irrigation rings',#9167,$,$);
+#9182=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51','Medical gases outlets',#9161,$,$);
+#9183=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_30','Flexible pendants',#9182,$,$);
+#9184=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_37','Headwall bedhead units',#9182,$,$);
+#9185=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_52','Terminal units',#9182,$,$);
+#9186=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_53','Medical trunking bedhead units',#9182,$,$);
+#9187=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_55','Multi-movement pendants',#9182,$,$);
+#9188=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_73','Retractable pendants',#9182,$,$);
+#9189=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_51_74','Rigid pendants',#9182,$,$);
+#9190=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58','Oil and grease lubricant supply products',#9161,$,$);
+#9191=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_34','Greases',#9190,$,$);
+#9192=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_48','Lubricator height adjustors',#9190,$,$);
+#9193=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_58','Oils',#9190,$,$);
+#9194=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_68','Rail friction modifier',#9190,$,$);
+#9195=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_70','Rail lubricators',#9190,$,$);
+#9196=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_72','Rail traction gels',#9190,$,$);
+#9197=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_58_80','Solid lubricants',#9190,$,$);
+#9198=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_62','Phase change outlet products',#9161,$,$);
+#9199=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_62_27','Foam chambers',#9198,$,$);
+#9200=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_62_29','Foam generators',#9198,$,$);
+#9201=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_62_31','Foam proportioners',#9198,$,$);
+#9202=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76','Sewage treatment plant',#9161,$,$);
+#9203=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76_62','Private packaged pumping stations',#9202,$,$);
+#9204=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76_64','Private packaged septic tank units',#9202,$,$);
+#9205=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76_66','Private packaged sewage treatment units',#9202,$,$);
+#9206=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76_72','Reed bed units',#9202,$,$);
+#9207=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_76_76','Sewage below-ground storage tanks',#9202,$,$);
+#9208=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96','Wastewater outlets and plugs',#9161,$,$);
+#9209=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_06','Bath wastes',#9208,$,$);
+#9210=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_09','Bidet wastes',#9208,$,$);
+#9211=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_76','Scrub up trough and wash trough wastes',#9208,$,$);
+#9212=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_83','Shower tray wastes',#9208,$,$);
+#9213=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_84','Sink wastes',#9208,$,$);
+#9214=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_93','Urinal wastes',#9208,$,$);
+#9215=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_97','Washbasin wastes',#9208,$,$);
+#9216=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_96_98','Wastewater plugs and chains',#9208,$,$);
+#9217=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97','Water fire-extinguishing outlets',#9161,$,$);
+#9218=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_01','Above-ground fire hydrants',#9217,$,$);
+#9219=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_23','Domestic sprinkler heads',#9217,$,$);
+#9220=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_37','High-velocity nozzles',#9217,$,$);
+#9221=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_51','Medium-velocity nozzles',#9217,$,$);
+#9222=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_57','Nozzles',#9217,$,$);
+#9223=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_84','Sprinkler heads',#9217,$,$);
+#9224=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_93','Underground fire hydrants',#9217,$,$);
+#9225=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_97_96','Water firefighting monitors',#9217,$,$);
+#9226=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98','Water inlets and outlets',#9161,$,$);
+#9227=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_07','Bellmouth outlets',#9226,$,$);
+#9228=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_30','Fountains',#9226,$,$);
+#9229=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_35','Green roof drainage outlets',#9226,$,$);
+#9230=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_37','High-pressure water hose connectors',#9226,$,$);
+#9231=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_46','Laminar jets',#9226,$,$);
+#9232=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_59','Overflows',#9226,$,$);
+#9233=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_60','Passive tank outlets',#9226,$,$);
+#9234=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_65','Pool water inlets',#9226,$,$);
+#9235=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_66','Pool water outlets',#9226,$,$);
+#9236=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_84','Sprinklers',#9226,$,$);
+#9237=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_85','Stand pipe outlets',#9226,$,$);
+#9238=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_87','Tape lines and drippers',#9226,$,$);
+#9239=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_92','Ultrasonic mist makers',#9226,$,$);
+#9240=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_94','Washout hydrants',#9226,$,$);
+#9241=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_95','Waterfalls and cascades',#9226,$,$);
+#9242=IFCCLASSIFICATIONREFERENCE($,'Pr_70_55_98_96','Water feature nozzles',#9226,$,$);
+#9243=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60','Space heating and cooling products',#9145,$,$);
+#9244=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14','Climatic beams and ceilings',#9243,$,$);
+#9245=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_02','Active climatic beams',#9244,$,$);
+#9246=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_10','Bulkhead active climatic beams',#9244,$,$);
+#9247=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_14','Climatic ceiling panels',#9244,$,$);
+#9248=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_47','Linear active climatic beams',#9244,$,$);
+#9249=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_53','Modular or cassette active climatic beams',#9244,$,$);
+#9250=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_55','Multi-service climatic beams',#9244,$,$);
+#9251=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_14_60','Passive climatic beams',#9244,$,$);
+#9252=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36','Heat emitters',#9243,$,$);
+#9253=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_02','Air curtains',#9252,$,$);
+#9254=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_06','Cabinet direct heaters',#9252,$,$);
+#9255=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_08','Cabinet indirect heaters',#9252,$,$);
+#9256=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_15','Constant wattage trace heating cables',#9252,$,$);
+#9257=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_22','Decorative fuel effect gas fires',#9252,$,$);
+#9258=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_26','Electric heated towel rails',#9252,$,$);
+#9259=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_27','Electric cable underfloor heating elements',#9252,$,$);
+#9260=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_28','Electric sheet underfloor heating elements',#9252,$,$);
+#9261=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_29','Equipment heaters',#9252,$,$);
+#9262=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_30','Fan convectors',#9252,$,$);
+#9263=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_32','Gas-fired radiant tube heaters',#9252,$,$);
+#9264=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_33','Gas-fired unit heaters',#9252,$,$);
+#9265=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_35','Gas fires',#9252,$,$);
+#9266=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_37','Heat pump driven air curtains',#9252,$,$);
+#9267=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_42','Inset live fuel effect gas fires',#9252,$,$);
+#9268=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_48','Low-temperature hot water heated towel rails',#9252,$,$);
+#9269=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_49','Low-temperature hot water underfloor heating',#9252,$,$);
+#9270=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_52','Mirror heaters',#9252,$,$);
+#9271=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_56','Natural convectors',#9252,$,$);
+#9272=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_60','Points heater cables',#9252,$,$);
+#9273=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_62','Points heating kits',#9252,$,$);
+#9274=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_64','Power-limiting trace heating cables',#9252,$,$);
+#9275=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_70','Radiant luminous heaters',#9252,$,$);
+#9276=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_71','Radiant panels',#9252,$,$);
+#9277=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_72','Radiant tube heaters',#9252,$,$);
+#9278=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_73','Radiators',#9252,$,$);
+#9279=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_74','Room heaters',#9252,$,$);
+#9280=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_76','Self-regulating trace heating cables',#9252,$,$);
+#9281=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_77','Series resistance trace heating cables and tapes',#9252,$,$);
+#9282=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_80','Solid fuel room heaters',#9252,$,$);
+#9283=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_88','Thermal storage heaters',#9252,$,$);
+#9284=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_90','Trench convectors',#9252,$,$);
+#9285=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_93','Unit heaters',#9252,$,$);
+#9286=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_36_97','Wood-burning stoves',#9252,$,$);
+#9287=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37','Heat pumps',#9243,$,$);
+#9288=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_02','Air-to-air heat pumps',#9287,$,$);
+#9289=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_04','Air-to-water heat pumps',#9287,$,$);
+#9290=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_08','Brine-to-water heat pumps',#9287,$,$);
+#9291=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_25','Dual-split gas-engine-driven heat pumps',#9287,$,$);
+#9292=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_33','Gas-engine-driven heat pumps',#9287,$,$);
+#9293=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_34','Gas-fired absorption heat pumps',#9287,$,$);
+#9294=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_36','Ground source heat pumps',#9287,$,$);
+#9295=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_47','Low-temperature air-to-water heat pumps',#9287,$,$);
+#9296=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_50','Medium or high-temperature air-to-water heat pumps',#9287,$,$);
+#9297=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_52','Multi-split air-to-air heat pumps',#9287,$,$);
+#9298=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_53','Multi-split gas-engine-driven heat pumps',#9287,$,$);
+#9299=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_54','Multi-split variable refrigerant flow (VRF) water-to-air heat pumps',#9287,$,$);
+#9300=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_78','Single-split air-to-air heat pumps',#9287,$,$);
+#9301=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_80','Single-split gas-engine-driven heat pumps',#9287,$,$);
+#9302=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_82','Single-split water-to-air heat pumps',#9287,$,$);
+#9303=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_94','Variable refrigerant flow (VRF) air-to-air heat pumps',#9287,$,$);
+#9304=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_95','Variable refrigerant flow (VRF) gas-engine-driven heat pumps',#9287,$,$);
+#9305=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_96','Water-to-air heat pumps',#9287,$,$);
+#9306=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_37_98','Water-to-water heat pumps',#9287,$,$);
+#9307=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_60','Pavement heating products',#9243,$,$);
+#9308=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_60_37','Pavement heating cables',#9307,$,$);
+#9309=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_60_38','Pavement heating mats',#9307,$,$);
+#9310=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82','Space heating fittings and equipment',#9243,$,$);
+#9311=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_29','Fenders',#9310,$,$);
+#9312=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_30','Fireplace hearths',#9310,$,$);
+#9313=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_31','Fireplace hoods',#9310,$,$);
+#9314=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_32','Fireplace surrounds',#9310,$,$);
+#9315=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_41','Inset open fireplace firebacks',#9310,$,$);
+#9316=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_42','Inset open fireplace surrounds and hearths',#9310,$,$);
+#9317=IFCCLASSIFICATIONREFERENCE($,'Pr_70_60_82_43','Inset open fires',#9310,$,$);
+#9318=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65','Air and fume outlet products',#9145,$,$);
+#9319=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03','Air conditioning units',#9318,$,$);
+#9320=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_01','Adiabatic coolers',#9319,$,$);
+#9321=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_02','Air-cooled condensing units',#9319,$,$);
+#9322=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_25','Dry air coolers',#9319,$,$);
+#9323=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_27','Evaporative cooling units',#9319,$,$);
+#9324=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_29','Fan coil units',#9319,$,$);
+#9325=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_41','Indirect evaporative cooling units',#9319,$,$);
+#9326=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_42','Indoor refrigeration units',#9319,$,$);
+#9327=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_43','Induction units',#9319,$,$);
+#9328=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_47','Local air conditioning units',#9319,$,$);
+#9329=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_72','Room air conditioning units',#9319,$,$);
+#9330=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_84','Split coil remote air-cooled condensing units',#9319,$,$);
+#9331=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_86','Split coil room air conditioning units',#9319,$,$);
+#9332=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_03_94','Variable refrigerant flow units',#9319,$,$);
+#9333=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04','Air terminals and diffusers',#9318,$,$);
+#9334=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_02','Air diffusers',#9333,$,$);
+#9335=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_03','Air grilles',#9333,$,$);
+#9336=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_04','Air plenum boxes',#9333,$,$);
+#9337=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_07','Bell mouth air terminals',#9333,$,$);
+#9338=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_20','Disc valve air terminals',#9333,$,$);
+#9339=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_22','Displacement ventilation diffusers',#9333,$,$);
+#9340=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_24','Domestic air diffusers and grilles',#9333,$,$);
+#9341=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_25','Dual duct variable air volume (VAV) terminal units',#9333,$,$);
+#9342=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_27','Eggcrate grilles',#9333,$,$);
+#9343=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_28','External wall grilles',#9333,$,$);
+#9344=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_30','Floor linear air diffusers',#9333,$,$);
+#9345=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_31','Floor-mounted air diffusers',#9333,$,$);
+#9346=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_32','Floor-mounted air plenum boxes',#9333,$,$);
+#9347=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_37','High-security air terminals',#9333,$,$);
+#9348=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_44','Jet diffusers',#9333,$,$);
+#9349=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_46','Laminar flow panels',#9333,$,$);
+#9350=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_48','Linear air diffusers',#9333,$,$);
+#9351=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_53','Modular cassette ventilated ceilings',#9333,$,$);
+#9352=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_56','Natural smoke and heat exhaust ventilators',#9333,$,$);
+#9353=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_57','Non-vision grilles',#9333,$,$);
+#9354=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_73','Roof ridge air terminals',#9333,$,$);
+#9355=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_75','Roof slope air terminals',#9333,$,$);
+#9356=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_76','Roof stack air terminals',#9333,$,$);
+#9357=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_77','Roof ventilator cowls',#9333,$,$);
+#9358=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_79','Saccardo nozzles',#9333,$,$);
+#9359=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_84','Specialist air terminals',#9333,$,$);
+#9360=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_86','Swirl air diffusers',#9333,$,$);
+#9361=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_88','Terminal fan units',#9333,$,$);
+#9362=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_91','Variable air volume (VAV) fan-assisted and heated terminal units',#9333,$,$);
+#9363=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_92','Variable air volume (VAV) heated terminal units',#9333,$,$);
+#9364=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_93','Variable air volume (VAV) fan-assisted terminal units',#9333,$,$);
+#9365=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_94','Variable air volume (VAV) terminal units',#9333,$,$);
+#9366=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_04_95','Ventilated ceilings',#9333,$,$);
+#9367=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30','Flues and chimneys',#9318,$,$);
+#9368=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_14','Clay chimney pots',#9367,$,$);
+#9369=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_15','Clay flue liner terminals',#9367,$,$);
+#9370=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_16','Concrete chimney pots',#9367,$,$);
+#9371=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_30','Flue liners',#9367,$,$);
+#9372=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_32','Fume extract discharge stacks',#9367,$,$);
+#9373=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_51','Metal flues and chimneys',#9367,$,$);
+#9374=IFCCLASSIFICATIONREFERENCE($,'Pr_70_65_30_84','Stainless steel chimney pots',#9367,$,$);
+#9375=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70','Power and lighting outlet products',#9145,$,$);
+#9376=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46','Lamps',#9375,$,$);
+#9377=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_15','Compact fluorescent lamps',#9376,$,$);
+#9378=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_24','Double-capped tubular LED lamps',#9376,$,$);
+#9379=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_30','Tubular fluorescent lamps',#9376,$,$);
+#9380=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_36','High-pressure mercury vapour lamps',#9376,$,$);
+#9381=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_37','High-pressure sodium vapour lamps',#9376,$,$);
+#9382=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_41','Induction lamps',#9376,$,$);
+#9383=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_42','Infrared lamps',#9376,$,$);
+#9384=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_44','Light-emitting diode (LED) lamps',#9376,$,$);
+#9385=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_45','Low-pressure sodium vapour lamps',#9376,$,$);
+#9386=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_52','Metal halide lamps',#9376,$,$);
+#9387=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_77','Self-ballasted compact fluorescent lamps',#9376,$,$);
+#9388=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_78','Self-ballasted LED lamps',#9376,$,$);
+#9389=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_80','Special lamps',#9376,$,$);
+#9390=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_89','Tungsten filament lamps',#9376,$,$);
+#9391=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_46_90','Tungsten halogen lamps',#9376,$,$);
+#9392=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47','Lighting controls and lighting distribution products',#9375,$,$);
+#9393=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_02','Automatic emergency lighting test panels',#9392,$,$);
+#9394=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_12','Centralized lighting controllers',#9392,$,$);
+#9395=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_16','Combined daylight and occupancy detectors',#9392,$,$);
+#9396=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_21','Daylight sensors',#9392,$,$);
+#9397=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_27','Extra-low-voltage lighting transformers',#9392,$,$);
+#9398=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_28','Extra-low-voltage occupancy detectors',#9392,$,$);
+#9399=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_45','Lighting control modules',#9392,$,$);
+#9400=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_46','Lighting remote controllers',#9392,$,$);
+#9401=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_47','Luminaire changeover relays',#9392,$,$);
+#9402=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_48','Luminaire hold-off relays',#9392,$,$);
+#9403=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_49','Luminaire inverter modules',#9392,$,$);
+#9404=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_50','Luminaire subcircuit relays',#9392,$,$);
+#9405=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_51','Mains voltage occupancy detectors',#9392,$,$);
+#9406=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_62','Photoelectric control units',#9392,$,$);
+#9407=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_71','Remote infrared lighting commissioning controllers',#9392,$,$);
+#9408=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_47_72','Remote infrared lighting user controllers',#9392,$,$);
+#9409=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48','Luminaires, lighting track and lighting accessories',#9375,$,$);
+#9410=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_01','Air-handling luminaires',#9409,$,$);
+#9411=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_02','Area floodlights',#9409,$,$);
+#9412=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_13','Chandeliers',#9409,$,$);
+#9413=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_15','Combined downlight and uplights',#9409,$,$);
+#9414=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_16','Combined emergency luminaires',#9409,$,$);
+#9415=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_23','Dedicated slave emergency luminaires',#9409,$,$);
+#9416=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_24','Downlights',#9409,$,$);
+#9417=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_25','Emergency luminaires',#9409,$,$);
+#9418=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_26','Electrical low-mounted way-guidance lighting module housings',#9409,$,$);
+#9419=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_27','Electrical low-mounted way-guidance lighting modules',#9409,$,$);
+#9420=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_28','Electrical low-mounted way-guidance lighting supply units',#9409,$,$);
+#9421=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_29','Electronic ballasts',#9409,$,$);
+#9422=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_30','Electronic starters',#9409,$,$);
+#9423=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_31','Fibre-optic end fittings',#9409,$,$);
+#9424=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_32','Free-standing luminaires',#9409,$,$);
+#9425=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_33','Fibre-optic light guides',#9409,$,$);
+#9426=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_34','Fibre-optic light sources',#9409,$,$);
+#9427=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_35','Ground-recessed luminaires',#9409,$,$);
+#9428=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_36','Hazardous area luminaires',#9409,$,$);
+#9429=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_38','High-bay luminaires',#9409,$,$);
+#9430=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_45','LED light panels',#9409,$,$);
+#9431=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_47','Lighting tracks',#9409,$,$);
+#9432=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_48','Luminaire smoke hoods',#9409,$,$);
+#9433=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_59','Optical fibre emergency luminaires',#9409,$,$);
+#9434=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_62','Pendant luminaires',#9409,$,$);
+#9435=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_65','Post top lanterns',#9409,$,$);
+#9436=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_70','Recessed downlights',#9409,$,$);
+#9437=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_71','Recessed luminaires',#9409,$,$);
+#9438=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_73','Road and amenity lighting luminaires',#9409,$,$);
+#9439=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_77','Self-contained emergency luminaires',#9409,$,$);
+#9440=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_80','Sockets for demountable lighting',#9409,$,$);
+#9441=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_82','Spotlights',#9409,$,$);
+#9442=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_85','Surface luminaires',#9409,$,$);
+#9443=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_86','Suspended luminaires',#9409,$,$);
+#9444=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_92','Underwater luminaires',#9409,$,$);
+#9445=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_48_93','Uplights',#9409,$,$);
+#9446=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_70','Rail power products',#9375,$,$);
+#9447=IFCCLASSIFICATIONREFERENCE($,'Pr_70_70_70_15','Conductor rail power connectors',#9446,$,$);
+#9448=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75','Communications products',#9145,$,$);
+#9449=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01','Aeronautical lighting products',#9448,$,$);
+#9450=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_01','Aeronautical ground lighting',#9449,$,$);
+#9451=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_02','Airfield guidance signs',#9449,$,$);
+#9452=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_03','Azimuth guidance for nose-in stand (AGNIS) lights',#9449,$,$);
+#9453=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_04','Approach elevated lights',#9449,$,$);
+#9454=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_05','Approach inset lights',#9449,$,$);
+#9455=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_06','Apron elevated lights',#9449,$,$);
+#9456=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_07','Apron inset lights',#9449,$,$);
+#9457=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_13','Constant current regulators',#9449,$,$);
+#9458=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_36','Heliport elevated lights',#9449,$,$);
+#9459=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_37','Heliport inset lights',#9449,$,$);
+#9460=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_38','Heliport lights',#9449,$,$);
+#9461=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_40','High-intensity rotating beacons',#9449,$,$);
+#9462=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_47','Lighting beacons',#9449,$,$);
+#9463=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_65','Precision approach path indicators (PAPI)',#9449,$,$);
+#9464=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_70','Runway elevated lights',#9449,$,$);
+#9465=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_71','Runway inset lights',#9449,$,$);
+#9466=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_90','Taxiway elevated lights',#9449,$,$);
+#9467=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_01_91','Taxiway inset lights',#9449,$,$);
+#9468=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04','Audio, data and visual outlet plates and controllers',#9448,$,$);
+#9469=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_03','Audio interface adaptors',#9468,$,$);
+#9470=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_06','Balanced twisted pair cable outlet plates',#9468,$,$);
+#9471=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_25','DVI outlet plates',#9468,$,$);
+#9472=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_29','Fibre optic cable outlet plates',#9468,$,$);
+#9473=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_37','HDMI outlet plates',#9468,$,$);
+#9474=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_42','Input and output control port expanders',#9468,$,$);
+#9475=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_52','Modular jacks',#9468,$,$);
+#9476=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_70','RCA outlet plates',#9468,$,$);
+#9477=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_71','RJ-45 to BT plug adaptors',#9468,$,$);
+#9478=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_85','SVGA outlet plates',#9468,$,$);
+#9479=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_88','Telecommunications outlet plates',#9468,$,$);
+#9480=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_90','Television outlet plates',#9468,$,$);
+#9481=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_94','Volume controllers',#9468,$,$);
+#9482=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_04_99','XLR outlet plates',#9468,$,$);
+#9483=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06','Audio output devices',#9448,$,$);
+#9484=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06_36','Headphones',#9483,$,$);
+#9485=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06_37','Headsets',#9483,$,$);
+#9486=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06_50','Loudspeakers',#9483,$,$);
+#9487=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06_51','Loudspeaker end-of-line units',#9483,$,$);
+#9488=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_06_80','Sound-masking devices',#9483,$,$);
+#9489=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15','Computers and peripherals',#9448,$,$);
+#9490=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_06','Barcode readers',#9489,$,$);
+#9491=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_11','Card printers',#9489,$,$);
+#9492=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_14','Combined photocopier-printer-scanners',#9489,$,$);
+#9493=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_15','Computer keyboards',#9489,$,$);
+#9494=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_16','Computer monitors',#9489,$,$);
+#9495=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_17','Computer mice',#9489,$,$);
+#9496=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_21','Desktop computers',#9489,$,$);
+#9497=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_22','Digital cameras',#9489,$,$);
+#9498=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_24','Display screen monitors',#9489,$,$);
+#9499=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_35','Handheld devices',#9489,$,$);
+#9500=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_36','Hard disk drives',#9489,$,$);
+#9501=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_45','Keyboard extenders',#9489,$,$);
+#9502=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_46','Laptop computers',#9489,$,$);
+#9503=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_63','Photocopiers',#9489,$,$);
+#9504=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_65','Portable data storage devices',#9489,$,$);
+#9505=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_66','Printers',#9489,$,$);
+#9506=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_76','Scanners',#9489,$,$);
+#9507=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_80','Servers',#9489,$,$);
+#9508=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_84','Slot card cages',#9489,$,$);
+#9509=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_87','Tablet computers',#9489,$,$);
+#9510=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_15_90','Touchscreen monitors',#9489,$,$);
+#9511=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_20','Data communication products',#9448,$,$);
+#9512=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_20_20','Data tags',#9511,$,$);
+#9513=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_20_22','Digitally enabled data tags',#9511,$,$);
+#9514=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36','Hearing and assisted listening products',#9448,$,$);
+#9515=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_08','Bodypack receivers',#9514,$,$);
+#9516=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_40','Induction loop amplifiers',#9514,$,$);
+#9517=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_41','Induction loop pads',#9514,$,$);
+#9518=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_42','Induction loop signal generators',#9514,$,$);
+#9519=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_43','Induction loop transformers',#9514,$,$);
+#9520=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_44','Induction neck loops',#9514,$,$);
+#9521=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_45','Induction loop monitor receivers',#9514,$,$);
+#9522=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_46','Induction loop reassurance indicators',#9514,$,$);
+#9523=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_47','Infrared listening modulators',#9514,$,$);
+#9524=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_48','Infrared listening radiators',#9514,$,$);
+#9525=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_49','Infrared listening portable receivers',#9514,$,$);
+#9526=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_36_84','Stethosets',#9514,$,$);
+#9527=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52','Computer network products',#9448,$,$);
+#9528=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_01','3G gateway modems',#9527,$,$);
+#9529=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_42','Intelligent access points (IAPs)',#9527,$,$);
+#9530=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_50','Mesh wireless routers',#9527,$,$);
+#9531=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_52','Modems',#9527,$,$);
+#9532=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_56','Network switches',#9527,$,$);
+#9533=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_64','Power over ethernet (POE) network switches',#9527,$,$);
+#9534=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_72','Routers',#9527,$,$);
+#9535=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_92','USB gateway modems',#9527,$,$);
+#9536=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_93','USB LiFi keys',#9527,$,$);
+#9537=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_52_96','Wireless sensor nodes',#9527,$,$);
+#9538=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_69','Radio communications products',#9448,$,$);
+#9539=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_69_36','Handheld transceivers (HT)',#9538,$,$);
+#9540=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_69_70','Radio base stations',#9538,$,$);
+#9541=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70','Rail signals, indicators and controls',#9448,$,$);
+#9542=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_03','Automatic warning signals',#9541,$,$);
+#9543=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_05','Axle counters',#9541,$,$);
+#9544=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_06','Banner repeater signals',#9541,$,$);
+#9545=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_07','Balises',#9541,$,$);
+#9546=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_14','Colour light signals',#9541,$,$);
+#9547=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_41','In-cab signalling displays',#9541,$,$);
+#9548=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_44','Junction indicators',#9541,$,$);
+#9549=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_46','Lever box connecting rods',#9541,$,$);
+#9550=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_47','Limit of shunt signals',#9541,$,$);
+#9551=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_48','Lineside electronic units (LEU)',#9541,$,$);
+#9552=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_50','Manual points operating equipment',#9541,$,$);
+#9553=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_60','Platform repeaters',#9541,$,$);
+#9554=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_61','Points detection equipment',#9541,$,$);
+#9555=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_62','Points converter devices',#9541,$,$);
+#9556=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_63','Points operating equipment',#9541,$,$);
+#9557=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_64','Position light signals',#9541,$,$);
+#9558=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_65','Possession limit boards',#9541,$,$);
+#9559=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_70','Rail gap indicator signals',#9541,$,$);
+#9560=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_72','Route indicators',#9541,$,$);
+#9561=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_76','Semaphore disc signals',#9541,$,$);
+#9562=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_77','Semaphore signals',#9541,$,$);
+#9563=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_78','Semaphore subsidiary signals',#9541,$,$);
+#9564=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_80','Signalling relays',#9541,$,$);
+#9565=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_88','Track circuit receivers',#9541,$,$);
+#9566=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_89','Track circuit transmitters',#9541,$,$);
+#9567=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_90','Train protection warning signals',#9541,$,$);
+#9568=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_91','Treadles',#9541,$,$);
+#9569=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_70_92','Trip stops',#9541,$,$);
+#9570=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72','Road traffic and pedestrian control signals',#9448,$,$);
+#9571=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_01','Above-ground vehicle detection products',#9570,$,$);
+#9572=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_07','Belisha beacons',#9570,$,$);
+#9573=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_22','Detector loops',#9570,$,$);
+#9574=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_30','Fixed vertical road traffic signs',#9570,$,$);
+#9575=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_48','Level crossing signals',#9570,$,$);
+#9576=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_49','Mass detectors',#9570,$,$);
+#9577=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_50','Motorway lane signals',#9570,$,$);
+#9578=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_60','Pedestrian signal controllers',#9570,$,$);
+#9579=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_61','Pedestrian crossing signals',#9570,$,$);
+#9580=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_80','Solar-powered illuminated bollards',#9570,$,$);
+#9581=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_87','Traffic signal controller units',#9570,$,$);
+#9582=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_89','Transilluminated traffic bollards',#9570,$,$);
+#9583=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_92','Urban traffic management signs',#9570,$,$);
+#9584=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_94','Variable message traffic signs',#9570,$,$);
+#9585=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_95','Vehicle-activated signs',#9570,$,$);
+#9586=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_96','Vehicular traffic signals',#9570,$,$);
+#9587=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_98','Wigwag signals',#9570,$,$);
+#9588=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_72_99','Wigwag signal control units',#9570,$,$);
+#9589=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80','Sports timing and scoring equipment',#9448,$,$);
+#9590=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_27','Electronic scoreboards',#9589,$,$);
+#9591=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_46','Lane boxes',#9589,$,$);
+#9592=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_48','Lane manual push-buttons',#9589,$,$);
+#9593=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_50','Manual scoreboards',#9589,$,$);
+#9594=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_72','Relay break detectors',#9589,$,$);
+#9595=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_82','Swimmers'' starting blocks',#9589,$,$);
+#9596=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_83','Swimmers'' touchpads',#9589,$,$);
+#9597=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_84','Swimming race start sound generators',#9589,$,$);
+#9598=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_80_85','Swimming timing controllers',#9589,$,$);
+#9599=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88','Telecoms equipment',#9448,$,$);
+#9600=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_01','Acoustic hoods',#9599,$,$);
+#9601=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_03','Analogue telephone handsets',#9599,$,$);
+#9602=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_16','Conference phones',#9599,$,$);
+#9603=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_21','Data and telecom transient overvoltage surge suppression devices',#9599,$,$);
+#9604=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_22','Digital enhanced cordless telecommunications (DECT) telephone handsets',#9599,$,$);
+#9605=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_24','Digital terminals',#9599,$,$);
+#9606=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_27','Emergency roadside telephones',#9599,$,$);
+#9607=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_52','Mobile phones',#9599,$,$);
+#9608=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_60','Payphones',#9599,$,$);
+#9609=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_83','Telecommunications system controllers',#9599,$,$);
+#9610=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_86','Telephone distribution frames',#9599,$,$);
+#9611=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_87','Telephone extension ringers',#9599,$,$);
+#9612=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_89','Telephone operator consoles',#9599,$,$);
+#9613=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_88_94','Voice over internet protocol (VOIP) terminals',#9599,$,$);
+#9614=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94','Visual and audible indicators',#9448,$,$);
+#9615=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_07','Bell boxes',#9614,$,$);
+#9616=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_27','Electric doorbells',#9614,$,$);
+#9617=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_28','Electronic sounders',#9614,$,$);
+#9618=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_29','Flashing filament warning beacons',#9614,$,$);
+#9619=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_30','Flood warning lights',#9614,$,$);
+#9620=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_31','Flood warning sirens',#9614,$,$);
+#9621=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_40','Indicator lights',#9614,$,$);
+#9622=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_42','Industrial bells',#9614,$,$);
+#9623=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_46','LED warning beacons',#9614,$,$);
+#9624=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_58','Overdoor indicator units',#9614,$,$);
+#9625=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_60','Panel mounting indicator lights',#9614,$,$);
+#9626=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_73','Rotating warning beacons',#9614,$,$);
+#9627=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_78','Starting strobe lights',#9614,$,$);
+#9628=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_80','Static filament warning beacons',#9614,$,$);
+#9629=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_94','Visual indicator lights',#9614,$,$);
+#9630=IFCCLASSIFICATIONREFERENCE($,'Pr_70_75_94_99','Xenon warning beacons',#9614,$,$);
+#9631=IFCCLASSIFICATIONREFERENCE($,'Pr_75','Services and process control products',#8,$,$);
+#9632=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30','Opening control products',#9631,$,$);
+#9633=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23','Door and gate-operating hardware',#9632,$,$);
+#9634=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_00','Articulated arm swing gate operators',#9633,$,$);
+#9635=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_01','Automatic door access control mats',#9633,$,$);
+#9636=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_02','Automatic door presence safety sensors',#9633,$,$);
+#9637=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_03','Automatic gate presence safety sensors',#9633,$,$);
+#9638=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_04','Automatic sliding door operator control panels',#9633,$,$);
+#9639=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_05','Automatic sliding door operators',#9633,$,$);
+#9640=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_06','Automatic sliding gate operator control panels',#9633,$,$);
+#9641=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_07','Automatic swing door operator control panels',#9633,$,$);
+#9642=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_08','Automatic swing gate operator control panels',#9633,$,$);
+#9643=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_09','Automatic swing-door operators',#9633,$,$);
+#9644=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_21','Dock leveller controllers',#9633,$,$);
+#9645=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_22','Door access control pushpads',#9633,$,$);
+#9646=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_26','Electromagnetic door holders',#9633,$,$);
+#9647=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_27','Electromagnetic door hold-open and swing-free devices',#9633,$,$);
+#9648=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_31','Folding gate automation mechanisms',#9633,$,$);
+#9649=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_33','Garage door operators',#9633,$,$);
+#9650=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_36','Handheld door and gate remote controllers',#9633,$,$);
+#9651=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_40','Hinged and swing gate automation mechanisms',#9633,$,$);
+#9652=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_42','Hydraulic automation mechanisms',#9633,$,$);
+#9653=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_70','Rack and pinion sliding gate operators',#9633,$,$);
+#9654=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_72','Rising arm automation mechanisms',#9633,$,$);
+#9655=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_76','Sliding gate automation mechanisms',#9633,$,$);
+#9656=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_92','Underground swing gate operators',#9633,$,$);
+#9657=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_94','Vehicle induction loop detectors',#9633,$,$);
+#9658=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_23_96','Worm drive swing gate operators',#9633,$,$);
+#9659=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27','Electric door-locking hardware',#9632,$,$);
+#9660=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_26','Electric strikes and faceplates',#9659,$,$);
+#9661=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_27','Electromechanical door locks',#9659,$,$);
+#9662=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_50','Magnetic locks',#9659,$,$);
+#9663=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_51','Magnetic shear locks and strike plates',#9659,$,$);
+#9664=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_77','Shear locks and strike plates',#9659,$,$);
+#9665=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_80','Solenoid bolts',#9659,$,$);
+#9666=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_27_81','Solenoid latches and locks',#9659,$,$);
+#9667=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30','Electronic access control and recording products',#9632,$,$);
+#9668=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_01','Access control digital keypads \X2\2013\X0\ stand-alone',#9667,$,$);
+#9669=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_03','Access control units',#9667,$,$);
+#9670=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_05','Active proximity devices',#9667,$,$);
+#9671=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_07','Biometric fingerprint readers',#9667,$,$);
+#9672=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_08','Biometric hand geometry readers',#9667,$,$);
+#9673=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_23','Door status monitoring devices',#9667,$,$);
+#9674=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_26','Electrically powered hold-open devices',#9667,$,$);
+#9675=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_27','Emergency door release break glass units',#9667,$,$);
+#9676=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_28','Emergency door release mechanisms',#9667,$,$);
+#9677=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_42','Intercom entrance panels',#9667,$,$);
+#9678=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_43','Intercom remote handsets',#9667,$,$);
+#9679=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_44','Intercom servers',#9667,$,$);
+#9680=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_50','Magnetic swipe card readers',#9667,$,$);
+#9681=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_51','Magnetic swipe cards',#9667,$,$);
+#9682=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_55','Multiple-technology cards',#9667,$,$);
+#9683=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_57','Multiple-technology readers',#9667,$,$);
+#9684=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_60','Passive proximity devices',#9667,$,$);
+#9685=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_67','Proximity card readers',#9667,$,$);
+#9686=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_68','Proximity cards',#9667,$,$);
+#9687=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_71','Request-to-exit buttons',#9667,$,$);
+#9688=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_72','Request-to-exit detectors',#9667,$,$);
+#9689=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_80','Smart card readers and writers',#9667,$,$);
+#9690=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_82','Smart devices',#9667,$,$);
+#9691=IFCCLASSIFICATIONREFERENCE($,'Pr_75_30_30_90','Time attendance recorders',#9667,$,$);
+#9692=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50','Mechanical and electrical services control products',#9631,$,$);
+#9693=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02','Actuators',#9692,$,$);
+#9694=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_13','Chain actuators',#9693,$,$);
+#9695=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_39','Hydraulic actuators',#9693,$,$);
+#9696=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_46','Linear actuators',#9693,$,$);
+#9697=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_53','Motor-driven damper actuators',#9693,$,$);
+#9698=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_54','Motor-driven valve actuators',#9693,$,$);
+#9699=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_64','Pneumatic damper actuators',#9693,$,$);
+#9700=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_65','Pneumatic valve actuators',#9693,$,$);
+#9701=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_02_88','Thermal actuators',#9693,$,$);
+#9702=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18','Control and indicator panels',#9692,$,$);
+#9703=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_04','Automatic sprinkler system indicator panels',#9702,$,$);
+#9704=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_06','Automatic fire suppression pump control panels',#9702,$,$);
+#9705=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_10','Bus section control panels',#9702,$,$);
+#9706=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_11','Cableways section panels',#9702,$,$);
+#9707=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_16','Control circuit supplies panels',#9702,$,$);
+#9708=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_17','Control panels',#9702,$,$);
+#9709=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_26','Electric trace heating control and monitoring panels',#9702,$,$);
+#9710=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_27','Emergency assistance call control panels',#9702,$,$);
+#9711=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_28','Feeder section control panels',#9702,$,$);
+#9712=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_30','Flow sample gas detection control panels',#9702,$,$);
+#9713=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_31','Fire-suppression system indicator panels',#9702,$,$);
+#9714=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_32','Fire electric pump control panels',#9702,$,$);
+#9715=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_33','Gas detection control panels',#9702,$,$);
+#9716=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_37','Help point control panels',#9702,$,$);
+#9717=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_40','Incoming supply control panels',#9702,$,$);
+#9718=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_41','Instrumentation, automation and control panels',#9702,$,$);
+#9719=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_42','Irrigation control panels',#9702,$,$);
+#9720=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_45','Lift control panels',#9702,$,$);
+#9721=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_47','Liquid leak detection control panels',#9702,$,$);
+#9722=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_48','Liquid presence detection programmable control units',#9702,$,$);
+#9723=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_51','Mechanical services control panels',#9702,$,$);
+#9724=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_53','Motor starters control panels',#9702,$,$);
+#9725=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_65','Pneumatic document conveyor control panels',#9702,$,$);
+#9726=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_66','Points heating control panels',#9702,$,$);
+#9727=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_67','Power factor correction control panels',#9702,$,$);
+#9728=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_69','Power quality filter section panels',#9702,$,$);
+#9729=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_80','Smoke and heat exhaust control panels',#9702,$,$);
+#9730=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_82','Solar collector control units',#9702,$,$);
+#9731=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_90','Telemetry control panels',#9702,$,$);
+#9732=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_92','Uninterruptible power supply control panels',#9702,$,$);
+#9733=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_18_93','Utility supply control panels',#9702,$,$);
+#9734=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20','Controllers and control components',#9692,$,$);
+#9735=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_02','Alarms',#9734,$,$);
+#9736=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_12','Central processor units',#9734,$,$);
+#9737=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_14','Communications interface modules',#9734,$,$);
+#9738=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_15','Compressed air master controllers',#9734,$,$);
+#9739=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_22','Differential pressure switches',#9734,$,$);
+#9740=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_25','Electronic pressure controllers',#9734,$,$);
+#9741=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_29','Field controllers',#9734,$,$);
+#9742=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_30','Firefighting alarm devices',#9734,$,$);
+#9743=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_34','Gas dose regulators',#9734,$,$);
+#9744=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_40','Input cards',#9734,$,$);
+#9745=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_41','Input modules',#9734,$,$);
+#9746=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_42','Input and output cards',#9734,$,$);
+#9747=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_43','Input and output modules',#9734,$,$);
+#9748=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_52','Modular programmable logic controllers',#9734,$,$);
+#9749=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_58','Output cards',#9734,$,$);
+#9750=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_59','Output modules',#9734,$,$);
+#9751=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_61','Pneumatic relays',#9734,$,$);
+#9752=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_62','Proportional derivative (PD) controllers',#9734,$,$);
+#9753=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_64','Proportional integral (PI) controllers',#9734,$,$);
+#9754=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_66','Proportional integral derivative (PID) controllers',#9734,$,$);
+#9755=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_68','Programmable logic controllers',#9734,$,$);
+#9756=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_70','Programmers',#9734,$,$);
+#9757=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_74','Remote terminal units',#9734,$,$);
+#9758=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_88','Temperature controllers',#9734,$,$);
+#9759=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_96','Water display controls',#9734,$,$);
+#9760=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_98','Water quality controllers',#9734,$,$);
+#9761=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_20_99','Wind-operated water display control devices',#9734,$,$);
+#9762=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33','Gas fire-extinguishing controls',#9692,$,$);
+#9763=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_24','Electrical automatic control and delay devices',#9762,$,$);
+#9764=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_25','Electrical actuation devices',#9762,$,$);
+#9765=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_26','Gas fire-suppression emergency abort devices',#9762,$,$);
+#9766=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_27','Emergency hold devices',#9762,$,$);
+#9767=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_33','Gas fire-extinguishing control panels',#9762,$,$);
+#9768=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_50','Gas fire-suppression manual triggering devices',#9762,$,$);
+#9769=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_55','Non-electrical automatic control and delay devices',#9762,$,$);
+#9770=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_56','Non-electrical gas fire-extinguishing disable devices',#9762,$,$);
+#9771=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_64','Pneumatic heat actuators',#9762,$,$);
+#9772=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_33_88','Thermal links',#9762,$,$);
+#9773=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46','Liquid level controllers and switches',#9692,$,$);
+#9774=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_27','Electronic liquid level controllers',#9773,$,$);
+#9775=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_29','Float liquid level controllers',#9773,$,$);
+#9776=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_30','Float switches',#9773,$,$);
+#9777=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_31','Flush control devices',#9773,$,$);
+#9778=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_42','Infrared flush controllers',#9773,$,$);
+#9779=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_46','Level controls and alarms',#9773,$,$);
+#9780=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_46_68','Push-button flush controllers',#9773,$,$);
+#9781=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47','Liquid level sensors',#9692,$,$);
+#9782=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_08','Buoyancy level sensors and switches',#9781,$,$);
+#9783=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_11','Capacitance and inductance sensors',#9781,$,$);
+#9784=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_15','Conductivity probes',#9781,$,$);
+#9785=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_34','Gravimetric and load cell sensors',#9781,$,$);
+#9786=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_35','Guided wave radar sensors',#9781,$,$);
+#9787=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_39','Hydrostatic sensors',#9781,$,$);
+#9788=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_50','Magnetic level gauge switches',#9781,$,$);
+#9789=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_51','Magnetorestrictive level transmitters',#9781,$,$);
+#9790=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_53','Maximum water level recorders',#9781,$,$);
+#9791=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_70','Radar sensors',#9781,$,$);
+#9792=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_73','Rotary paddle sensors',#9781,$,$);
+#9793=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_85','Stilling tubes',#9781,$,$);
+#9794=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_88','Thermal dispersion level switches',#9781,$,$);
+#9795=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_92','Ultrasonic sensors',#9781,$,$);
+#9796=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_94','Vibrating sensors',#9781,$,$);
+#9797=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_47_97','Water level sensors',#9781,$,$);
+#9798=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48','Liquid-sensing devices',#9692,$,$);
+#9799=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_15','Chemical-sensing cables',#9798,$,$);
+#9800=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_31','Fuel-sensing cables',#9798,$,$);
+#9801=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_34','Ground water monitors',#9798,$,$);
+#9802=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_47','Leak-sensing tapes',#9798,$,$);
+#9803=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_60','Pad leak sensors',#9798,$,$);
+#9804=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_67','Probe leak sensors',#9798,$,$);
+#9805=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_71','Remote sampling equipment',#9798,$,$);
+#9806=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_90','Transportable monitors',#9798,$,$);
+#9807=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_48_96','Water-sensing cables',#9798,$,$);
+#9808=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_50','Measuring and monitoring products',#9692,$,$);
+#9809=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_50_31','Fluoride analyzers',#9808,$,$);
+#9810=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_50_63','Phase monitoring relays',#9808,$,$);
+#9811=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_51','Medical gases controls',#9692,$,$);
+#9812=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_51_52','Medical gas area alarm panels',#9811,$,$);
+#9813=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_51_54','Medical gases central alarms',#9811,$,$);
+#9814=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_51_71','Remote start medical gas switch panels',#9811,$,$);
+#9815=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_51_94','Vacuum insulated evaporator (VIE) control panels',#9811,$,$);
+#9816=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52','Meteorological instrumentation',#9692,$,$);
+#9817=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_03','Anemometers',#9816,$,$);
+#9818=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_06','Barometers',#9816,$,$);
+#9819=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_12','Ceilometers',#9816,$,$);
+#9820=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_39','Humidity and temperature probes',#9816,$,$);
+#9821=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_65','Present weather sensors',#9816,$,$);
+#9822=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_85','Storage rain gauges',#9816,$,$);
+#9823=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_90','Tipping bucket rain gauges',#9816,$,$);
+#9824=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_94','Visibility sensors',#9816,$,$);
+#9825=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_97','Weather stations',#9816,$,$);
+#9826=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_52_98','Weighing rain gauges',#9816,$,$);
+#9827=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76','Sensors and detectors',#9692,$,$);
+#9828=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_02','Air quality sensors',#9827,$,$);
+#9829=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_03','Air temperature sensors',#9827,$,$);
+#9830=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_04','Ambient noise level sensors',#9827,$,$);
+#9831=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_05','Air velocity sensors',#9827,$,$);
+#9832=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_10','Carbon dioxide sensors',#9827,$,$);
+#9833=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_12','Carbon monoxide detectors',#9827,$,$);
+#9834=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_16','Combined electronic current and voltage transducers',#9827,$,$);
+#9835=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_17','Combustion gas detectors',#9827,$,$);
+#9836=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_18','Current sensors',#9827,$,$);
+#9837=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_23','Disinfectant sensors',#9827,$,$);
+#9838=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_24','Dissolved oxygen sensors',#9827,$,$);
+#9839=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_25','Dry rot sensor sticks',#9827,$,$);
+#9840=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_27','Electronic trace heating thermostats',#9827,$,$);
+#9841=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_29','Floor temperature sensors',#9827,$,$);
+#9842=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_30','Flow-in duct sensors',#9827,$,$);
+#9843=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_31','Flow-in pipe sensors',#9827,$,$);
+#9844=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_33','Gas detectors',#9827,$,$);
+#9845=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_47','Liquid temperature sensors',#9827,$,$);
+#9846=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_51','Mechanical trace heating thermostats',#9827,$,$);
+#9847=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_53','Microseismic sensors',#9827,$,$);
+#9848=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_57','Overheight vehicle detection (OHVD) sensors',#9827,$,$);
+#9849=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_58','Occupancy detectors',#9827,$,$);
+#9850=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_59','Passive infrared (PIR) sensors',#9827,$,$);
+#9851=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_60','pH value sensors',#9827,$,$);
+#9852=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_61','pH sensors',#9827,$,$);
+#9853=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_63','Photoelectric sensors',#9827,$,$);
+#9854=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_65','Point carbon monoxide detectors',#9827,$,$);
+#9855=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_68','Pressure sensors',#9827,$,$);
+#9856=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_71','Relative humidity sensors',#9827,$,$);
+#9857=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_72','Residual chlorine sensors',#9827,$,$);
+#9858=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_73','Room temperature sensors',#9827,$,$);
+#9859=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_77','Salinity sensors',#9827,$,$);
+#9860=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_80','Sludge density sensors',#9827,$,$);
+#9861=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_83','Steam and condensate sensor chambers',#9827,$,$);
+#9862=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_84','Steam and condensate sensors',#9827,$,$);
+#9863=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_86','Suspended solids sensors',#9827,$,$);
+#9864=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_87','Tilt sensor nodes',#9827,$,$);
+#9865=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_88','Toxic and combustible gas detectors',#9827,$,$);
+#9866=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_90','Turbidity sensors',#9827,$,$);
+#9867=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_95','Voltage sensors',#9827,$,$);
+#9868=IFCCLASSIFICATIONREFERENCE($,'Pr_75_50_76_97','Water pressure sensors',#9827,$,$);
+#9869=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51','Motors, motor controls, control circuit devices and timeswitches',#9631,$,$);
+#9870=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17','Control circuit devices and timeswitches',#9869,$,$);
+#9871=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_27','Emergency stop buttons',#9870,$,$);
+#9872=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_50','Manual control switches',#9870,$,$);
+#9873=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_63','Pendant control stations',#9870,$,$);
+#9874=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_66','Push-button switches',#9870,$,$);
+#9875=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_75','Safety limit switches',#9870,$,$);
+#9876=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_78','Selector switches',#9870,$,$);
+#9877=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_87','Tariff and load control radio teleswitches',#9870,$,$);
+#9878=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_88','Tariff and load control time switches',#9870,$,$);
+#9879=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_17_89','Time switches',#9870,$,$);
+#9880=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26','Electric motors',#9869,$,$);
+#9881=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_00','Alternating current (a.c.) capacitor start capacitor run motors',#9880,$,$);
+#9882=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_01','Alternating current (a.c.) capacitor motors',#9880,$,$);
+#9883=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_02','Alternating current (a.c.) split phase motors',#9880,$,$);
+#9884=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_03','Alternating current (a.c.) squirrel cage induction motors',#9880,$,$);
+#9885=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_04','Alternating current (a.c.) wound rotor induction motors',#9880,$,$);
+#9886=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_05','Alternating current (a.c.) motors with integrated variable speed drive',#9880,$,$);
+#9887=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_21','Direct current (d.c.) compound wound motors',#9880,$,$);
+#9888=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_22','Direct current (d.c.) permanent magnet motors',#9880,$,$);
+#9889=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_23','Direct current (d.c.) separately excited motors',#9880,$,$);
+#9890=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_24','Direct current (d.c.) series wound motors',#9880,$,$);
+#9891=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_25','Direct current (d.c.) shunt wound motors',#9880,$,$);
+#9892=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_26_92','Universal motors',#9880,$,$);
+#9893=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35','Gearboxes',#9869,$,$);
+#9894=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_10','Bevel gearboxes',#9893,$,$);
+#9895=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_35','Helical gearboxes',#9893,$,$);
+#9896=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_65','Planetary gearboxes',#9893,$,$);
+#9897=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_80','Spur gearboxes',#9893,$,$);
+#9898=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_94','Variable speed hydraulic gearboxes',#9893,$,$);
+#9899=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_35_97','Worm gearboxes',#9893,$,$);
+#9900=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52','Motor starters, variable frequency drives and contactors',#9869,$,$);
+#9901=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_01','Alternating current (a.c.) drives',#9900,$,$);
+#9902=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_02','Alternating current (a.c.) semiconductor motor controllers and starters',#9900,$,$);
+#9903=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_15','Control and protective switching devices',#9900,$,$);
+#9904=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_22','Direct-on-line starters',#9900,$,$);
+#9905=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_26','Electromechanical contactors',#9900,$,$);
+#9906=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_27','Electromechanical control circuit devices',#9900,$,$);
+#9907=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_58','Overload relays',#9900,$,$);
+#9908=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_82','Star-delta starters',#9900,$,$);
+#9909=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_52_94','Variable speed drives',#9900,$,$);
+#9910=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_65','Pneumatic motors',#9869,$,$);
+#9911=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_65_05','Axial piston motors',#9910,$,$);
+#9912=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_65_70','Radial piston motors',#9910,$,$);
+#9913=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_65_73','Rotary vane motors',#9910,$,$);
+#9914=IFCCLASSIFICATIONREFERENCE($,'Pr_75_51_65_90','Turbine air motors',#9910,$,$);
+#9915=IFCCLASSIFICATIONREFERENCE($,'Pr_75_70','Power and lighting control products',#9631,$,$);
+#9916=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75','Communications control products',#9631,$,$);
+#9917=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04','Emergency call and nurse call devices and control equipment',#9916,$,$);
+#9918=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_08','Baby protection units',#9917,$,$);
+#9919=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_25','Emergency assistance call indicator units',#9917,$,$);
+#9920=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_26','Emergency call power supply units',#9917,$,$);
+#9921=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_27','Emergency assistance call press-button units',#9917,$,$);
+#9922=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_28','Emergency assistance call pull cord units',#9917,$,$);
+#9923=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_29','Emergency assistance call reset units',#9917,$,$);
+#9924=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_57','Nurse call units',#9917,$,$);
+#9925=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_58','Nurse call cardiac alarm switches',#9917,$,$);
+#9926=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_60','Nurse call overdoor indicators',#9917,$,$);
+#9927=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_61','Nurse call patient handsets',#9917,$,$);
+#9928=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_62','Nurse call patient pull cord units',#9917,$,$);
+#9929=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_63','Nurse call power supply units',#9917,$,$);
+#9930=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_64','Nurse call reset units',#9917,$,$);
+#9931=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_65','Nurse call indicator panels',#9917,$,$);
+#9932=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_66','Nurse call staff emergency switches',#9917,$,$);
+#9933=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_70','Passenger assistance help points',#9917,$,$);
+#9934=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_71','Passenger assistance intercom handsets',#9917,$,$);
+#9935=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_04_73','Portable communicators',#9917,$,$);
+#9936=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_47','Lift control products',#9916,$,$);
+#9937=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_47_41','Illuminated landing indicators',#9936,$,$);
+#9938=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_47_43','Infrared landing controls',#9936,$,$);
+#9939=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_47_46','Landing call stations',#9936,$,$);
+#9940=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90','Transmission control products',#9916,$,$);
+#9941=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_16','Converter receivers',#9940,$,$);
+#9942=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_17','Converter senders',#9940,$,$);
+#9943=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_27','Encoders and decoders',#9940,$,$);
+#9944=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_30','Fibre receivers',#9940,$,$);
+#9945=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_31','Fibre transmitters',#9940,$,$);
+#9946=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_41','Infrared receivers',#9940,$,$);
+#9947=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_42','Infrared transmitters',#9940,$,$);
+#9948=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_50','Microwave transmission beacons',#9940,$,$);
+#9949=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_52','Microwave transmitters',#9940,$,$);
+#9950=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_65','Protocol converters',#9940,$,$);
+#9951=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_70','Radio interface units',#9940,$,$);
+#9952=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_71','Radio receivers',#9940,$,$);
+#9953=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_78','Sender modules',#9940,$,$);
+#9954=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_88','Telemetry receivers',#9940,$,$);
+#9955=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_89','Telemetry senders',#9940,$,$);
+#9956=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_90','Telemetry transmitters',#9940,$,$);
+#9957=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_91','Transmission modules',#9940,$,$);
+#9958=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_94','Video receivers',#9940,$,$);
+#9959=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_90_95','Video transmitters',#9940,$,$);
+#9960=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94','Voice alarm and emergency voice communication equipment',#9916,$,$);
+#9961=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_03','Ambient noise sensing controllers',#9960,$,$);
+#9962=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_11','Cabinet voice alarm loudspeakers',#9960,$,$);
+#9963=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_15','Ceiling-mounted voice alarm loudspeakers',#9960,$,$);
+#9964=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_19','Column voice alarm loudspeakers',#9960,$,$);
+#9965=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_22','Disabled refuge master stations',#9960,$,$);
+#9966=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_23','Disabled refuge outstations',#9960,$,$);
+#9967=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_27','Emergency call radio-based equipment',#9960,$,$);
+#9968=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_37','Horn voice alarm loudspeakers',#9960,$,$);
+#9969=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_41','Voice communications input cards',#9960,$,$);
+#9970=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_58','Voice communications output cards',#9960,$,$);
+#9971=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_60','Paging microphones',#9960,$,$);
+#9972=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_70','Radio microphones',#9960,$,$);
+#9973=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_72','Radio public address interface boards',#9960,$,$);
+#9974=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_74','Refuge point master stations',#9960,$,$);
+#9975=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_76','Refuge point outstations',#9960,$,$);
+#9976=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_93','Voice alarm control console',#9960,$,$);
+#9977=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_94','Voice alarm controller microphones',#9960,$,$);
+#9978=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_95','Voice alarm controllers',#9960,$,$);
+#9979=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_96','Voice alarm emergency microphones',#9960,$,$);
+#9980=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_97','Voice alarm power amplifiers',#9960,$,$);
+#9981=IFCCLASSIFICATIONREFERENCE($,'Pr_75_75_94_98','Voice alarm power supply units',#9960,$,$);
+#9982=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80','Protection and security control products',#9631,$,$);
+#9983=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30','Fire detection and alarm devices and control equipment',#9982,$,$);
+#9984=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_01','Aspirating sampling pipes',#9983,$,$);
+#9985=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_02','Aspirating sampling points',#9983,$,$);
+#9986=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_03','Aspirating smoke detectors',#9983,$,$);
+#9987=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_04','Aspirating smoke detector units',#9983,$,$);
+#9988=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_13','Carbon monoxide and heat multi-sensor detectors',#9983,$,$);
+#9989=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_15','Combined smoke and heat detectors',#9983,$,$);
+#9990=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_20','Domestic smoke and carbon monoxide alarms',#9983,$,$);
+#9991=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_22','Duct smoke detectors',#9983,$,$);
+#9992=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_27','Fire and smoke detector bases',#9983,$,$);
+#9993=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_28','Fire alarm input and output modules',#9983,$,$);
+#9994=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_29','Fire alarm panels',#9983,$,$);
+#9995=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_30','Fire alarm sounders',#9983,$,$);
+#9996=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_31','Fire detection and alarm power supply equipment',#9983,$,$);
+#9997=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_32','Fire detection electric hob safety cut-off devices',#9983,$,$);
+#9998=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_33','Fire detection electric hob safety cut-off and fire suppression devices',#9983,$,$);
+#9999=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_37','Heat alarms',#9983,$,$);
+#10000=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_41','Interface panels',#9983,$,$);
+#10001=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_47','Linear heat detectors',#9983,$,$);
+#10002=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_50','Manual call points',#9983,$,$);
+#10003=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_52','Mimic fire alarm panels',#9983,$,$);
+#10004=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_55','Multi-sensor detectors',#9983,$,$);
+#10005=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_59','Optical beam smoke detectors',#9983,$,$);
+#10006=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_63','Point flame detectors',#9983,$,$);
+#10007=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_64','Point heat detectors',#9983,$,$);
+#10008=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_65','Point smoke detectors',#9983,$,$);
+#10009=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_70','Radio-linked interface modules',#9983,$,$);
+#10010=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_71','Remote indicators',#9983,$,$);
+#10011=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_77','Short circuit isolators',#9983,$,$);
+#10012=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_80','Smoke alarms',#9983,$,$);
+#10013=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_81','Smoke and carbon monoxide multi-sensor detectors',#9983,$,$);
+#10014=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_82','Smoke and heat multi-sensor detectors',#9983,$,$);
+#10015=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_94','Vibrating pillow pads',#9983,$,$);
+#10016=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_95','Vibrating radio pager transmitters',#9983,$,$);
+#10017=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_96','Vibrating radio pagers',#9983,$,$);
+#10018=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_97','Visual alarm signal devices',#9983,$,$);
+#10019=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_30_98','Voice alarm control panels',#9983,$,$);
+#10020=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_32','Foreign object debris (FOD) detection equipment',#9982,$,$);
+#10021=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_32_27','Electro-optical FOD detection equipment',#10020,$,$);
+#10022=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_32_39','Hybrid FOD detection equipment',#10020,$,$);
+#10023=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_32_70','Radar FOD detection equipment',#10020,$,$);
+#10024=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42','Intrusion and hold-up alarm devices and control equipment',#9982,$,$);
+#10025=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_02','Glass break detectors',#10024,$,$);
+#10026=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_08','Beam interruption detectors',#10024,$,$);
+#10027=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_11','Capacitive proximity detectors',#10024,$,$);
+#10028=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_16','Combined passive infrared and microwave movement detectors',#10024,$,$);
+#10029=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_17','Combined passive infrared and ultrasonic movement detectors',#10024,$,$);
+#10030=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_22','Deliberately operated intrusion and hold-up alarm devices',#10024,$,$);
+#10031=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_24','Door beam intruder detectors',#10024,$,$);
+#10032=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_28','Intrusion and hold-up alarm external warning devices',#10024,$,$);
+#10033=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_40','Intrusion and hold-up alarm internal warning devices',#10024,$,$);
+#10034=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_41','Intrusion and hold-up alarm panels',#10024,$,$);
+#10035=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_42','Intrusion and hold-up alarm remote keypads',#10024,$,$);
+#10036=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_52','Microwave movement detectors',#10024,$,$);
+#10037=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_60','Passive infrared movement detectors',#10024,$,$);
+#10038=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_67','Protective switches',#10024,$,$);
+#10039=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_77','Security fog devices',#10024,$,$);
+#10040=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_92','Ultrasonic movement detectors',#10024,$,$);
+#10041=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_94','Vibrating intruder alarm pagers',#10024,$,$);
+#10042=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_95','Vibration detectors',#10024,$,$);
+#10043=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_96','Volumetric capacitive detectors',#10024,$,$);
+#10044=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_42_98','Intrusion and hold-up alarm wireless pagers',#10024,$,$);
+#10045=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50','Monitoring system control products',#9982,$,$);
+#10046=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_02','Alarm interface units',#10045,$,$);
+#10047=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_11','Camera control units',#10045,$,$);
+#10048=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_14','Camera power supply units',#10045,$,$);
+#10049=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_22','Demagnetizers',#10045,$,$);
+#10050=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_55','Multiplexers',#10045,$,$);
+#10051=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_60','Patch panels',#10045,$,$);
+#10052=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_70','Radio frequency (RF) modulators',#10045,$,$);
+#10053=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_72','Radio frequency identification (RFID) tags',#10045,$,$);
+#10054=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_94','Video input cards',#10045,$,$);
+#10055=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_95','Video matrix switch controllers',#10045,$,$);
+#10056=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_50_96','Video output cards',#10045,$,$);
+#10057=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_60','Passport control products',#9982,$,$);
+#10058=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_60_07','Biometric facial recognition products',#10057,$,$);
+#10059=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_60_08','Biometric iris recognition products',#10057,$,$);
+#10060=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_60_60','Passport readers',#10057,$,$);
+#10061=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_70','Rail vehicle safety control products',#9982,$,$);
+#10062=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_70_94','Vigilance control devices (VCD)',#10061,$,$);
+#10063=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75','Security screening products',#9982,$,$);
+#10064=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_01','Advanced cabin baggage x-ray scanners',#10063,$,$);
+#10065=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_06','Back scatter x-ray security scanners',#10063,$,$);
+#10066=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_28','Explosive trace detection equipment',#10063,$,$);
+#10067=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_47','Liquid explosive detection equipment',#10063,$,$);
+#10068=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_52','Millimetre wave security scanners',#10063,$,$);
+#10069=IFCCLASSIFICATIONREFERENCE($,'Pr_75_80_75_96','Walk-through metal detectors',#10063,$,$);
+#10070=IFCCLASSIFICATIONREFERENCE($,'Pr_80','Services and process general products',#8,$,$);
+#10071=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51','Measuring and metering products',#10070,$,$);
+#10072=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30','Measuring flumes',#10071,$,$);
+#10073=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_20','Cut-throat flumes',#10072,$,$);
+#10074=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_38','HS/ H/ HL flumes',#10072,$,$);
+#10075=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_52','Montana flumes',#10072,$,$);
+#10076=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_60','Palmer-Bowlus flumes',#10072,$,$);
+#10077=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_61','Parshall flumes',#10072,$,$);
+#10078=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_70','RBC flumes',#10072,$,$);
+#10079=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_90','Trapezoidal flumes',#10072,$,$);
+#10080=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_30_94','Venturi flumes',#10072,$,$);
+#10081=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46','Flowmeters',#10071,$,$);
+#10082=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_15','Coriolis flowmeters',#10081,$,$);
+#10083=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_21','Differential pressure flowmeters',#10081,$,$);
+#10084=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_27','Electromagnetic flowmeters',#10081,$,$);
+#10085=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_50','Mass flowmeters',#10081,$,$);
+#10086=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_55','Multiphase flowmeters',#10081,$,$);
+#10087=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_59','Orifice plate flowmeters',#10081,$,$);
+#10088=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_66','Primary flow differential pressure flowmeters',#10081,$,$);
+#10089=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_73','Rotary piston flowmeters',#10081,$,$);
+#10090=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_85','Swirl flowmeters',#10081,$,$);
+#10091=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_88','Thermal mass flowmeters',#10081,$,$);
+#10092=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_92','Ultrasonic flowmeters',#10081,$,$);
+#10093=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_94','Variable area flowmeters',#10081,$,$);
+#10094=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_46_96','Vortex flowmeters',#10081,$,$);
+#10095=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51','Metering and test products',#10071,$,$);
+#10096=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_04','Analogue metering equipment',#10095,$,$);
+#10097=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_05','Ammeters',#10095,$,$);
+#10098=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_06','Audio frequency induction loop field strength meters',#10095,$,$);
+#10099=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_11','Call information logging equipment',#10095,$,$);
+#10100=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_13','Circuit meters',#10095,$,$);
+#10101=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_15','Corrosion monitors',#10095,$,$);
+#10102=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_19','Current transformers',#10095,$,$);
+#10103=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_22','Digital metering equipment',#10095,$,$);
+#10104=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_23','Digital multifunction metering equipment',#10095,$,$);
+#10105=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_28','Energy meters',#10095,$,$);
+#10106=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_30','Frequency meters',#10095,$,$);
+#10107=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_32','Fuel meters',#10095,$,$);
+#10108=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_33','Gas meters',#10095,$,$);
+#10109=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_37','Heat meters',#10095,$,$);
+#10110=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_57','Ohmmeters',#10095,$,$);
+#10111=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_58','Oil meters',#10095,$,$);
+#10112=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_60','Phase meters',#10095,$,$);
+#10113=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_62','Piezometers',#10095,$,$);
+#10114=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_63','Power factor meters',#10095,$,$);
+#10115=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_64','Portable gas monitors',#10095,$,$);
+#10116=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_65','Portable leak monitors',#10095,$,$);
+#10117=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_66','Portable moisture monitors',#10095,$,$);
+#10118=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_67','Pressure meters',#10095,$,$);
+#10119=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_80','Soil moisture monitors',#10095,$,$);
+#10120=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_85','Turbidity inspection pipes',#10095,$,$);
+#10121=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_93','Vapour meters',#10095,$,$);
+#10122=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_95','Voltmeters',#10095,$,$);
+#10123=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_97','Water meters',#10095,$,$);
+#10124=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_51_98','Wattmeters',#10095,$,$);
+#10125=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70','Measuring products',#10071,$,$);
+#10126=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_22','Digital straight edge gauges',#10125,$,$);
+#10127=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_33','Gauge boards',#10125,$,$);
+#10128=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_44','Junction work gauges',#10125,$,$);
+#10129=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_51','Measurement scales',#10125,$,$);
+#10130=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_64','Platform gauges',#10125,$,$);
+#10131=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_85','Straight edge gauges',#10125,$,$);
+#10132=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_88','Track geometry trolleys',#10125,$,$);
+#10133=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_89','Track gauges',#10125,$,$);
+#10134=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_90','Tunnel gauges',#10125,$,$);
+#10135=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_70_96','Water level gauge boards',#10125,$,$);
+#10136=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85','Structural instrumentation and monitoring products',#10071,$,$);
+#10137=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_01','Accelerometers',#10136,$,$);
+#10138=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_17','Crack detection sensors',#10136,$,$);
+#10139=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_18','Crack gauges',#10136,$,$);
+#10140=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_21','Data loggers',#10136,$,$);
+#10141=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_27','Electrolevel sensor and microelectromechanical units',#10136,$,$);
+#10142=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_28','Extensometers',#10136,$,$);
+#10143=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_41','Inclinometers',#10136,$,$);
+#10144=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_45','Linear movement detectors',#10136,$,$);
+#10145=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_46','Liquid level gauges',#10136,$,$);
+#10146=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_47','Load cells',#10136,$,$);
+#10147=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_48','Logger box and read-out box',#10136,$,$);
+#10148=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_66','Precise levels',#10136,$,$);
+#10149=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_84','Strain gauges',#10136,$,$);
+#10150=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_87','Tape extensometers',#10136,$,$);
+#10151=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_88','Tilt meters',#10136,$,$);
+#10152=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_85_90','Total stations',#10136,$,$);
+#10153=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96','Weighbridge products',#10071,$,$);
+#10154=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_00','Above-ground weighbridges',#10153,$,$);
+#10155=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_32','Fully in-ground weighbridges',#10153,$,$);
+#10156=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_55','Multiple deck weighbridges',#10153,$,$);
+#10157=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_71','Relocatable weighbridges',#10153,$,$);
+#10158=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_77','Semi-pit weighbridges',#10153,$,$);
+#10159=IFCCLASSIFICATIONREFERENCE($,'Pr_80_51_96_96','Wheel weigh pads',#10153,$,$);
+#10160=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77','Services support and containment products',#10070,$,$);
+#10161=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23','Dock shelters',#10160,$,$);
+#10162=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_30','Flap dock shelters',#10161,$,$);
+#10163=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_31','Foam pad (cushion) dock seals',#10161,$,$);
+#10164=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_42','Inflatable dock shelters',#10161,$,$);
+#10165=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_70','Retractable dock shelters',#10161,$,$);
+#10166=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_71','Rigid dock shelters',#10161,$,$);
+#10167=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_23_72','Rigid dock shelters with inflatable seals',#10161,$,$);
+#10168=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27','Equipment boards, racks and supports',#10160,$,$);
+#10169=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_04','Audiovisual equipment racks',#10168,$,$);
+#10170=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_07','Ballasted mounting frames for solar modules',#10168,$,$);
+#10171=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_08','Battery shelving racks',#10168,$,$);
+#10172=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_15','Channel supports',#10168,$,$);
+#10173=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_27','Fish egg hatchery trays',#10168,$,$);
+#10174=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_31','Free-standing mounting frames for solar modules',#10168,$,$);
+#10175=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_33','Gauge mounting boards',#10168,$,$);
+#10176=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_42','IT and telecommunications equipment racks',#10168,$,$);
+#10177=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_51','Metal cladding solar module clamps',#10168,$,$);
+#10178=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_53','Mounting plates',#10168,$,$);
+#10179=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_54','Multi-service transit seals',#10168,$,$);
+#10180=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_55','Multiple services riser plates',#10168,$,$);
+#10181=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_72','Roof anchors for solar modules',#10168,$,$);
+#10182=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_73','Roof equipment supports',#10168,$,$);
+#10183=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_77','Services wire rope hangers',#10168,$,$);
+#10184=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_80','Solar module support rails',#10168,$,$);
+#10185=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_27_91','Turbine support structures',#10168,$,$);
+#10186=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28','Equipment enclosures, cabinets, boxes and housings',#10160,$,$);
+#10187=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_06','Balanced twisted pair cabling patch panels',#10186,$,$);
+#10188=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_07','Boundary boxes',#10186,$,$);
+#10189=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_08','Cable junction boxes',#10186,$,$);
+#10190=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_09','Cable termination boxes',#10186,$,$);
+#10191=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_10','Camera brackets',#10186,$,$);
+#10192=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_11','Camera housings',#10186,$,$);
+#10193=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_13','Central battery enclosures',#10186,$,$);
+#10194=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_14','Chemical safety enclosures',#10186,$,$);
+#10195=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_15','Component support rails',#10186,$,$);
+#10196=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_16','Control circuit device enclosures',#10186,$,$);
+#10197=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_21','Data equipment cabinets',#10186,$,$);
+#10198=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_22','Display monitor housings',#10186,$,$);
+#10199=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_24','Dry riser landing boxes',#10186,$,$);
+#10200=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_25','Electrical safety matting',#10186,$,$);
+#10201=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_26','Fibre joint enclosures',#10186,$,$);
+#10202=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_27','Fibre-optic patch panels',#10186,$,$);
+#10203=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_28','Fire equipment cabinets',#10186,$,$);
+#10204=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_29','Fire extinguisher cabinets',#10186,$,$);
+#10205=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_30','Fire hose cabinets',#10186,$,$);
+#10206=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_32','Fuse holders',#10186,$,$);
+#10207=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_33','Generator enclosures',#10186,$,$);
+#10208=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_46','Fire hydrant surface boxes',#10186,$,$);
+#10209=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_47','Loudspeaker protective cages',#10186,$,$);
+#10210=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_48','Loudspeaker rear protective enclosures',#10186,$,$);
+#10211=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_49','Low-voltage switchgear and controlgear assembly enclosures',#10186,$,$);
+#10212=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_52','Meter cabinets',#10186,$,$);
+#10213=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_60','Padlock and key cabinets',#10186,$,$);
+#10214=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_65','Power factor correction equipment enclosures',#10186,$,$);
+#10215=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_66','Equipment protection cabinets',#10186,$,$);
+#10216=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_67','Equipment protection cages',#10186,$,$);
+#10217=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_68','Equipment protection enclosures',#10186,$,$);
+#10218=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_70','Rack cabinets',#10186,$,$);
+#10219=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_74','Roof penetration boxes',#10186,$,$);
+#10220=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_77','Switchgear enclosures',#10186,$,$);
+#10221=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_78','Switchgear extension frames',#10186,$,$);
+#10222=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_84','Surveillance camera brackets',#10186,$,$);
+#10223=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_85','Surveillance camera housings',#10186,$,$);
+#10224=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_86','Telephone enclosures',#10186,$,$);
+#10225=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_88','Terminal air filter housings',#10186,$,$);
+#10226=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_94','Valve boxes',#10186,$,$);
+#10227=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_95','Video recorder cabinets',#10186,$,$);
+#10228=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_96','Water fire-extinguishing inlet boxes',#10186,$,$);
+#10229=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_97','Water fire-extinguishing surface boxes',#10186,$,$);
+#10230=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_28_98','Weatherproof equipment enclosures',#10186,$,$);
+#10231=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_46','Lift enclosures, access and supports',#10160,$,$);
+#10232=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_46_32','Free-standing self-supporting lift shafts',#10231,$,$);
+#10233=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_46_46','Lift cars',#10231,$,$);
+#10234=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48','Lighting columns, brackets and bollards',#10160,$,$);
+#10235=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_01','Aluminium column luminaire brackets',#10234,$,$);
+#10236=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_02','Aluminium lighting bollards',#10234,$,$);
+#10237=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_03','Aluminium lighting columns',#10234,$,$);
+#10238=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_04','Aluminium luminaire brackets',#10234,$,$);
+#10239=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_05','Aluminium base-hinged lighting columns',#10234,$,$);
+#10240=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_15','Concrete lighting bollards',#10234,$,$);
+#10241=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_16','Concrete lighting columns',#10234,$,$);
+#10242=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_23','Double luminaires lighting columns',#10234,$,$);
+#10243=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_55','Multiple luminaires lighting columns',#10234,$,$);
+#10244=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_63','Plastics lighting bollards',#10234,$,$);
+#10245=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_64','Plastics lighting columns',#10234,$,$);
+#10246=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_76','Stainless steel base-hinged lighting columns',#10234,$,$);
+#10247=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_78','Steel column luminaire brackets',#10234,$,$);
+#10248=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_79','Steel lighting bollards',#10234,$,$);
+#10249=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_80','Steel lighting columns',#10234,$,$);
+#10250=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_81','Steel luminaire brackets',#10234,$,$);
+#10251=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_82','Steel base-hinged lighting columns',#10234,$,$);
+#10252=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_48_88','Timber lighting columns',#10234,$,$);
+#10253=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76','Services insulation and protection products',#10160,$,$);
+#10254=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_03','Aluminium sheet insulation casing',#10253,$,$);
+#10255=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_11','Calcium silicate preformed section and slab insulation',#10253,$,$);
+#10256=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_12','Canvas insulation protection',#10253,$,$);
+#10257=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_13','Carbon steel sheet insulation casing',#10253,$,$);
+#10258=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_25','Ethylene propylene diene monomer (EPDM) rubber insulation',#10253,$,$);
+#10259=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_29','Flexible elastomeric foam insulation',#10253,$,$);
+#10260=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_34','Glass wool cloth insulation protection',#10253,$,$);
+#10261=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_47','Loadbearing pipeline support insulation',#10253,$,$);
+#10262=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_52','Mineral wool duct metal-mesh-faced mattress insulation',#10253,$,$);
+#10263=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_53','Mineral wool duct slab insulation',#10253,$,$);
+#10264=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_54','Mineral wool pipe section insulation',#10253,$,$);
+#10265=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_58','Nitrile rubber insulation',#10253,$,$);
+#10266=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_62','Phenolic foam insulation',#10253,$,$);
+#10267=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_64','Polyisobutylene insulation protection',#10253,$,$);
+#10268=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_65','Polyisocyanurate (PIR) insulation',#10253,$,$);
+#10269=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_76','Self-adhesive insulation casing',#10253,$,$);
+#10270=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_85','Stainless steel sheet insulation casing',#10253,$,$);
+#10271=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_92','Unplasticized polyvinyl chloride (PVC-U) sheet insulation casing',#10253,$,$);
+#10272=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_94','Valve and flange insulation',#10253,$,$);
+#10273=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_76_95','Valve and flange insulation casing',#10253,$,$);
+#10274=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94','Vibration isolation products',#10160,$,$);
+#10275=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_15','Compression isolators',#10274,$,$);
+#10276=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_30','Flexible vibration isolation hoses',#10274,$,$);
+#10277=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_40','Inertia bases',#10274,$,$);
+#10278=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_42','Isolation hangers',#10274,$,$);
+#10279=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_50','Mat mountings',#10274,$,$);
+#10280=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_60','Pad mountings',#10274,$,$);
+#10281=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_65','Pneumatic isolation mounts',#10274,$,$);
+#10282=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_74','Rubber bellows',#10274,$,$);
+#10283=IFCCLASSIFICATIONREFERENCE($,'Pr_80_77_94_84','Spring isolators',#10274,$,$);
+#10284=IFCCLASSIFICATIONREFERENCE($,'Pr_82','Vehicle products',#8,$,$);
+#10285=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70','Railway vehicle products',#10284,$,$);
+#10286=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09','Braking equipment',#10285,$,$);
+#10287=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_09','Brake control units',#10286,$,$);
+#10288=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_17','Combined power/ brake controllers (PBC)',#10286,$,$);
+#10289=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_25','Dynamic brakes',#10286,$,$);
+#10290=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_26','Electropneumatic (EP) brakes',#10286,$,$);
+#10291=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_27','Emergency brakes',#10286,$,$);
+#10292=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_61','Parking brakes',#10286,$,$);
+#10293=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_73','Roll-back prevention devices',#10286,$,$);
+#10294=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_79','Service brakes',#10286,$,$);
+#10295=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_90','Tripcocks',#10286,$,$);
+#10296=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_09_97','Wheel slide protection (WSP) equipment',#10286,$,$);
+#10297=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_24','Drivetrain components',#10285,$,$);
+#10298=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_24_30','Final drive units',#10297,$,$);
+#10299=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_24_90','Torque converters',#10297,$,$);
+#10300=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41','Inter-carriage connections',#10285,$,$);
+#10301=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_05','Automatic couplers',#10300,$,$);
+#10302=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_27','Emergency couplers',#10300,$,$);
+#10303=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_41','Inter-carriage connectors',#10300,$,$);
+#10304=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_42','Inter-carriage gangways',#10300,$,$);
+#10305=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_43','Inter-carriage jumper cables',#10300,$,$);
+#10306=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_77','Semi-automatic couplers',#10300,$,$);
+#10307=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_41_78','Semi-permanent couplers',#10300,$,$);
+#10308=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_65','Power supply equipment',#10285,$,$);
+#10309=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_65_60','Pantographs',#10308,$,$);
+#10310=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_65_61','Pantograph monitors',#10308,$,$);
+#10311=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_70','Railway vehicle doors',#10285,$,$);
+#10312=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_70_07','Bi-parting passenger doors',#10311,$,$);
+#10313=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_70_22','Detrainment devices',#10311,$,$);
+#10314=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_90','Train operating and control products',#10285,$,$);
+#10315=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_90_25','Driver consoles',#10314,$,$);
+#10316=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_90_26','Dynamic route maps (DRM)',#10314,$,$);
+#10317=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_90_58','On-train monitoring recorders (OTMR)',#10314,$,$);
+#10318=IFCCLASSIFICATIONREFERENCE($,'Pr_82_70_90_59','Operator enable pedals (OEP)',#10314,$,$);
+#10319=IFCCLASSIFICATIONREFERENCE($,'Pr_85','Process engineering products',#8,$,$);
+#10320=IFCCLASSIFICATIONREFERENCE($,'Pr_85_30','Environmental process products',#10319,$,$);
+#10321=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50','Mechanical power products',#10319,$,$);
+#10322=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_25','Electrical power components',#10321,$,$);
+#10323=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_25_90','Traction motors',#10322,$,$);
+#10324=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27','Engines and components',#10321,$,$);
+#10325=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_08','Brakes',#10324,$,$);
+#10326=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_11','Camshafts',#10324,$,$);
+#10327=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_15','Couplings',#10324,$,$);
+#10328=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_24','Drive shafts',#10324,$,$);
+#10329=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_40','Internal combustion engines',#10324,$,$);
+#10330=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_84','Steering assemblies',#10324,$,$);
+#10331=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_89','Transmission belts',#10324,$,$);
+#10332=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_90','Transmission chains',#10324,$,$);
+#10333=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_27_92','Universal joints',#10324,$,$);
+#10334=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_39','Hydraulic power components',#10321,$,$);
+#10335=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_39_38','Hydraulic power units',#10334,$,$);
+#10336=IFCCLASSIFICATIONREFERENCE($,'Pr_85_50_39_39','Hydraulic rams',#10334,$,$);
+#10337=IFCCLASSIFICATIONREFERENCE($,'Pr_85_51','Milling products',#10319,$,$);
+#10338=IFCCLASSIFICATIONREFERENCE($,'Pr_85_51_34','Grain milling products',#10337,$,$);
+#10339=IFCCLASSIFICATIONREFERENCE($,'Pr_85_51_34_51','Millstones',#10338,$,$);
+#10340=IFCCLASSIFICATIONREFERENCE($,'Pr_85_51_51','Mineral milling products',#10337,$,$);
+#10341=IFCCLASSIFICATIONREFERENCE($,'Pr_85_51_88','Timber milling products',#10337,$,$);
+#10342=IFCCLASSIFICATIONREFERENCE($,'Pr_85_73','Robotic products',#10319,$,$);
+#10343=IFCCLASSIFICATIONREFERENCE($,'Pr_90','Soft facility management products',#8,$,$);
+#10344=IFCCLASSIFICATIONREFERENCE($,'Ro_10','Management roles',#12,$,$);
+#10345=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10','Organization roles',#10344,$,$);
+#10346=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_05','Associate',#10345,$,$);
+#10347=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_12','Chairman',#10345,$,$);
+#10348=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_14','Chief executive officer',#10345,$,$);
+#10349=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_16','Chief financial officer',#10345,$,$);
+#10350=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_18','Chief operating officer',#10345,$,$);
+#10351=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_20','Coordinator',#10345,$,$);
+#10352=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_25','Director',#10345,$,$);
+#10353=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_30','Executive director',#10345,$,$);
+#10354=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_50','Manager',#10345,$,$);
+#10355=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_53','Managing director',#10345,$,$);
+#10356=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_58','Non-executive director',#10345,$,$);
+#10357=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_60','Partner',#10345,$,$);
+#10358=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_65','President',#10345,$,$);
+#10359=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_70','Principal',#10345,$,$);
+#10360=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_88','Technician',#10345,$,$);
+#10361=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_94','Vice chairman',#10345,$,$);
+#10362=IFCCLASSIFICATIONREFERENCE($,'Ro_10_10_95','Vice president',#10345,$,$);
+#10363=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20','Client roles',#10344,$,$);
+#10364=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_14','Client',#10363,$,$);
+#10365=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_15','Client advisor',#10363,$,$);
+#10366=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_16','Client representative',#10363,$,$);
+#10367=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_26','Employer',#10363,$,$);
+#10368=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_28','End user',#10363,$,$);
+#10369=IFCCLASSIFICATIONREFERENCE($,'Ro_10_20_88','Technical advisor',#10363,$,$);
+#10370=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30','Asset management roles',#10344,$,$);
+#10371=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_02','Asset assurance manager',#10370,$,$);
+#10372=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_10','Built asset security manager',#10370,$,$);
+#10373=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_14','Chief information officer',#10370,$,$);
+#10374=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_21','Asset data governance manager',#10370,$,$);
+#10375=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_27','Education consultant',#10370,$,$);
+#10376=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_42','Investment consultant',#10370,$,$);
+#10377=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_50','Asset manager',#10370,$,$);
+#10378=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_78','Soft landings champion',#10370,$,$);
+#10379=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_80','Asset standards manager',#10370,$,$);
+#10380=IFCCLASSIFICATIONREFERENCE($,'Ro_10_30_88','Technology consultant',#10370,$,$);
+#10381=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40','Operation management roles',#10344,$,$);
+#10382=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_01','Access manager',#10381,$,$);
+#10383=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_11','Catering manager',#10381,$,$);
+#10384=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_20','Configuration change manager',#10381,$,$);
+#10385=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_22','Cost manager',#10381,$,$);
+#10386=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_24','Demand manager',#10381,$,$);
+#10387=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_28','Energy manager',#10381,$,$);
+#10388=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_30','Facilities manager',#10381,$,$);
+#10389=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_32','Fleet manager',#10381,$,$);
+#10390=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_36','Health and safety manager',#10381,$,$);
+#10391=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_43','IT business analyst',#10381,$,$);
+#10392=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_47','Legal representative',#10381,$,$);
+#10393=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_48','Logistics manager',#10381,$,$);
+#10394=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_49','Maintenance planner',#10381,$,$);
+#10395=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_50','Maintenance provider',#10381,$,$);
+#10396=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_52','Management consultant',#10381,$,$);
+#10397=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_53','Marketing consultant',#10381,$,$);
+#10398=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_65','Procurement consultant',#10381,$,$);
+#10399=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_74','Safety manager',#10381,$,$);
+#10400=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_76','Security consultant',#10381,$,$);
+#10401=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_86','Timetable assurance coordinator',#10381,$,$);
+#10402=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_88','Traffic consultant',#10381,$,$);
+#10403=IFCCLASSIFICATIONREFERENCE($,'Ro_10_40_90','Transportation manager',#10381,$,$);
+#10404=IFCCLASSIFICATIONREFERENCE($,'Ro_10_80','Support roles',#10344,$,$);
+#10405=IFCCLASSIFICATIONREFERENCE($,'Ro_10_80_25','Editor',#10404,$,$);
+#10406=IFCCLASSIFICATIONREFERENCE($,'Ro_10_80_90','Technical author',#10404,$,$);
+#10407=IFCCLASSIFICATIONREFERENCE($,'Ro_30','Delivery roles',#12,$,$);
+#10408=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10','Delivery team roles',#10407,$,$);
+#10409=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_13','Clerk of works',#10408,$,$);
+#10410=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_17','Commissioning engineer',#10408,$,$);
+#10411=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_19','Contract administrator',#10408,$,$);
+#10412=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_20','Contractor',#10408,$,$);
+#10413=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_22','Cost consultant',#10408,$,$);
+#10414=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_27','Employer''s agent',#10408,$,$);
+#10415=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_36','Health and safety consultant',#10408,$,$);
+#10416=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_42','Information manager',#10408,$,$);
+#10417=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_43','Insurance consultant',#10408,$,$);
+#10418=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_47','Legal consultant',#10408,$,$);
+#10419=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_67','Project manager',#10408,$,$);
+#10420=IFCCLASSIFICATIONREFERENCE($,'Ro_30_10_85','Subcontractor',#10408,$,$);
+#10421=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30','Official roles',#10407,$,$);
+#10422=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_09','Building control officer',#10421,$,$);
+#10423=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_16','Conservation officer',#10421,$,$);
+#10424=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_20','Development control officer',#10421,$,$);
+#10425=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_22','Dispute resolution officer',#10421,$,$);
+#10426=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_26','Environmental officer',#10421,$,$);
+#10427=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_27','Fire services officer',#10421,$,$);
+#10428=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_28','Fire risk assessor',#10421,$,$);
+#10429=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_29','Flood and coastal risk management officer',#10421,$,$);
+#10430=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_36','Heritage officer',#10421,$,$);
+#10431=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_42','Independent third-party assessor',#10421,$,$);
+#10432=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_60','Party wall surveyor',#10421,$,$);
+#10433=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_65','Planning officer',#10421,$,$);
+#10434=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_67','Principal contractor',#10421,$,$);
+#10435=IFCCLASSIFICATIONREFERENCE($,'Ro_30_30_68','Principal designer',#10421,$,$);
+#10436=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40','Supplier roles',#10407,$,$);
+#10437=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_36','Hardware vendor',#10436,$,$);
+#10438=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_40','Importer',#10436,$,$);
+#10439=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_54','Manufacturer',#10436,$,$);
+#10440=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_56','Nominated supplier',#10436,$,$);
+#10441=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_79','Software vendor',#10436,$,$);
+#10442=IFCCLASSIFICATIONREFERENCE($,'Ro_30_40_86','Supplier',#10436,$,$);
+#10443=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50','Team lead roles',#10407,$,$);
+#10444=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_04','Asset management lead',#10443,$,$);
+#10445=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_19','Construction lead',#10443,$,$);
+#10446=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_25','Design lead',#10443,$,$);
+#10447=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_61','Operation lead',#10443,$,$);
+#10448=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_69','Programme lead',#10443,$,$);
+#10449=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_70','Project lead',#10443,$,$);
+#10450=IFCCLASSIFICATIONREFERENCE($,'Ro_30_50_90','Task team lead',#10443,$,$);
+#10451=IFCCLASSIFICATIONREFERENCE($,'Ro_50','Design roles',#12,$,$);
+#10452=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10','Building design roles',#10451,$,$);
+#10453=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_01','Access consultant',#10452,$,$);
+#10454=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_03','Architect',#10452,$,$);
+#10455=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_04','Architectural designer',#10452,$,$);
+#10456=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_05','Architectural technologist',#10452,$,$);
+#10457=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_08','Building envelope consultant',#10452,$,$);
+#10458=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_10','Building designer',#10452,$,$);
+#10459=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_11','Catering consultant',#10452,$,$);
+#10460=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_14','Cladding designer',#10452,$,$);
+#10461=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_30','Fittings, furniture and equipment (FF&E) consultant',#10452,$,$);
+#10462=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_43','Interior designer',#10452,$,$);
+#10463=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_45','Kitchen designer',#10452,$,$);
+#10464=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_50','Lighting designer',#10452,$,$);
+#10465=IFCCLASSIFICATIONREFERENCE($,'Ro_50_10_80','Signage designer',#10452,$,$);
+#10466=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20','Engineering design roles',#10451,$,$);
+#10467=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_02','Acoustic engineer',#10466,$,$);
+#10468=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_04','Audiovisual consultant',#10466,$,$);
+#10469=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_06','Bridge engineer',#10466,$,$);
+#10470=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_08','Building services engineer',#10466,$,$);
+#10471=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_11','Civil engineer',#10466,$,$);
+#10472=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_24','Demolition engineer',#10466,$,$);
+#10473=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_28','Drainage engineer',#10466,$,$);
+#10474=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_30','Electrical services engineer',#10466,$,$);
+#10475=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_31','Electronics engineer',#10466,$,$);
+#10476=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_33','Fire engineer',#10466,$,$);
+#10477=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_37','Geotechnical engineer',#10466,$,$);
+#10478=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_40','Heating, ventilation and air conditioning engineer',#10466,$,$);
+#10479=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_41','Highways engineer',#10466,$,$);
+#10480=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_42','Hydraulic engineer',#10466,$,$);
+#10481=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_53','Mechanical, electrical, instrumentation, control and automation (MEICA) engineer',#10466,$,$);
+#10482=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_54','Mechanical services engineer',#10466,$,$);
+#10483=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_59','Overhead wires engineer',#10466,$,$);
+#10484=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_65','Process engineer',#10466,$,$);
+#10485=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_68','Public health engineer',#10466,$,$);
+#10486=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_70','Rail engineer',#10466,$,$);
+#10487=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_72','Reliability engineer',#10466,$,$);
+#10488=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_74','Rolling stock engineer',#10466,$,$);
+#10489=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_79','Signalling engineer',#10466,$,$);
+#10490=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_83','Structural engineer',#10466,$,$);
+#10491=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_86','Systems engineer',#10466,$,$);
+#10492=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_88','Telecommunication engineer',#10466,$,$);
+#10493=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_90','Traffic engineer',#10466,$,$);
+#10494=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_91','Tunnel engineer',#10466,$,$);
+#10495=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_94','Vertical transportation consultant',#10466,$,$);
+#10496=IFCCLASSIFICATIONREFERENCE($,'Ro_50_20_96','Water services engineer',#10466,$,$);
+#10497=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30','Environmental design roles',#10451,$,$);
+#10498=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_04','Arboriculturalist',#10497,$,$);
+#10499=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_25','Ecologist',#10497,$,$);
+#10500=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_33','Garden designer',#10497,$,$);
+#10501=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_47','Landscape architect',#10497,$,$);
+#10502=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_48','Landscape designer',#10497,$,$);
+#10503=IFCCLASSIFICATIONREFERENCE($,'Ro_50_30_94','Urban designer',#10497,$,$);
+#10504=IFCCLASSIFICATIONREFERENCE($,'Ro_70','Site roles',#12,$,$);
+#10505=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10','Surveyor and planner roles',#10504,$,$);
+#10506=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_10','Building inspector',#10505,$,$);
+#10507=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_11','Building surveyor',#10505,$,$);
+#10508=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_16','Conservation surveyor',#10505,$,$);
+#10509=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_33','Geotechnical surveyor',#10505,$,$);
+#10510=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_36','Heritage surveyor',#10505,$,$);
+#10511=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_46','Land surveyor',#10505,$,$);
+#10512=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_64','Planning consultant',#10505,$,$);
+#10513=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_75','Quantity surveyor',#10505,$,$);
+#10514=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_80','Site investigation consultant',#10505,$,$);
+#10515=IFCCLASSIFICATIONREFERENCE($,'Ro_70_10_93','Utilities surveyor',#10505,$,$);
+#10516=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30','Environmental and geological roles',#10504,$,$);
+#10517=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_04','Archaeologist',#10516,$,$);
+#10518=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_27','Environmental assessor',#10516,$,$);
+#10519=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_28','Environmental consultant',#10516,$,$);
+#10520=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_35','Geographic information system consultant',#10516,$,$);
+#10521=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_39','Hydrologist',#10516,$,$);
+#10522=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_85','Sustainability consultant',#10516,$,$);
+#10523=IFCCLASSIFICATIONREFERENCE($,'Ro_70_30_94','Visual impact assessor',#10516,$,$);
+#10524=IFCCLASSIFICATIONREFERENCE($,'Ro_70_40','Conservation and restoration roles',#10504,$,$);
+#10525=IFCCLASSIFICATIONREFERENCE($,'Ro_70_40_16','Conservator',#10524,$,$);
+#10526=IFCCLASSIFICATIONREFERENCE($,'Ro_70_40_71','Restorer',#10524,$,$);
+#10527=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50','Building trades',#10504,$,$);
+#10528=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_02','Access floor installer',#10527,$,$);
+#10529=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_07','Bricklayer',#10527,$,$);
+#10530=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_09','Builder''s labourer',#10527,$,$);
+#10531=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_10','Building insulation installer',#10527,$,$);
+#10532=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_12','Carpenter',#10527,$,$);
+#10533=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_14','Carpet fitter',#10527,$,$);
+#10534=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_16','Ceiling installer',#10527,$,$);
+#10535=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_17','Cement renderer',#10527,$,$);
+#10536=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_18','Cladding installer',#10527,$,$);
+#10537=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_20','Construction rigger',#10527,$,$);
+#10538=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_22','Crane operator',#10527,$,$);
+#10539=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_26','Earth moving labourer',#10527,$,$);
+#10540=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_30','Fencing installer',#10527,$,$);
+#10541=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_32','Flooring installer',#10527,$,$);
+#10542=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_34','Glazier',#10527,$,$);
+#10543=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_37','Hoist operator',#10527,$,$);
+#10544=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_44','Joiner',#10527,$,$);
+#10545=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_45','Landscape installer',#10527,$,$);
+#10546=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_46','Landscape maintenance operative',#10527,$,$);
+#10547=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_47','Lift operator',#10527,$,$);
+#10548=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_60','Painter and decorator',#10527,$,$);
+#10549=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_61','Partition installer',#10527,$,$);
+#10550=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_62','Paving and surfacing installer',#10527,$,$);
+#10551=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_65','Plasterer',#10527,$,$);
+#10552=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_72','Roofer',#10527,$,$);
+#10553=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_76','Scaffolder',#10527,$,$);
+#10554=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_83','Steel erector',#10527,$,$);
+#10555=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_84','Steel fixer',#10527,$,$);
+#10556=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_85','Stonemason',#10527,$,$);
+#10557=IFCCLASSIFICATIONREFERENCE($,'Ro_70_50_88','Tiler',#10527,$,$);
+#10558=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60','Services trades',#10504,$,$);
+#10559=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_10','Cable layer',#10558,$,$);
+#10560=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_12','CCTV installer',#10558,$,$);
+#10561=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_25','Ductwork installer',#10558,$,$);
+#10562=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_27','Electrician',#10558,$,$);
+#10563=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_30','Fire detection and alarm system installer',#10558,$,$);
+#10564=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_33','Gas fitter',#10558,$,$);
+#10565=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_47','Lift installer',#10558,$,$);
+#10566=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_63','Pipe fitter',#10558,$,$);
+#10567=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_66','Plumber',#10558,$,$);
+#10568=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_77','Security alarm system installer',#10558,$,$);
+#10569=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_78','Services insulation installer',#10558,$,$);
+#10570=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_81','Sprinkler system installer',#10558,$,$);
+#10571=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_87','Telecommunications installer',#10558,$,$);
+#10572=IFCCLASSIFICATIONREFERENCE($,'Ro_70_60_96','Welder',#10558,$,$);
+#10573=IFCCLASSIFICATIONREFERENCE($,'Ro_70_65','Site management roles',#10504,$,$);
+#10574=IFCCLASSIFICATIONREFERENCE($,'Ro_70_65_66','Protection officer',#10573,$,$);
+#10575=IFCCLASSIFICATIONREFERENCE($,'Ro_70_65_79','Signalling technician',#10573,$,$);
+#10576=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70','Rail and road roles',#10504,$,$);
+#10577=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70_37','Highways operative',#10576,$,$);
+#10578=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70_68','Rail labourer',#10576,$,$);
+#10579=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70_70','Rail track layer',#10576,$,$);
+#10580=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70_72','Rail traction technician',#10576,$,$);
+#10581=IFCCLASSIFICATIONREFERENCE($,'Ro_70_70_85','Street works operative',#10576,$,$);
+#10582=IFCCLASSIFICATIONREFERENCE($,'Co_20','Administrative, commercial and protective service complexes',#3,$,$);
+#10583=IFCCLASSIFICATIONREFERENCE($,'Co_20_10','Legislative complexes',#10582,$,$);
+#10584=IFCCLASSIFICATIONREFERENCE($,'Co_20_10_60','Governmental complexes',#10583,$,$);
+#10585=IFCCLASSIFICATIONREFERENCE($,'Co_20_15','Administrative complexes',#10582,$,$);
+#10586=IFCCLASSIFICATIONREFERENCE($,'Co_20_15_08','Business parks',#10585,$,$);
+#10587=IFCCLASSIFICATIONREFERENCE($,'Co_20_15_58','Office complexes',#10585,$,$);
+#10588=IFCCLASSIFICATIONREFERENCE($,'Co_20_20','Secular representative complexes',#10582,$,$);
+#10589=IFCCLASSIFICATIONREFERENCE($,'Co_20_20_15','Complexes for representatives of nation states abroad',#10588,$,$);
+#10590=IFCCLASSIFICATIONREFERENCE($,'Co_20_20_40','Local government complexes',#10588,$,$);
+#10591=IFCCLASSIFICATIONREFERENCE($,'Co_20_20_50','National government complexes',#10588,$,$);
+#10592=IFCCLASSIFICATIONREFERENCE($,'Co_20_20_70','Regional government complexes',#10588,$,$);
+#10593=IFCCLASSIFICATIONREFERENCE($,'Co_20_45','Motor vehicle maintenance and fuelling complexes',#10582,$,$);
+#10594=IFCCLASSIFICATIONREFERENCE($,'Co_20_45_50','Motor vehicle fuelling and charging stations',#10593,$,$);
+#10595=IFCCLASSIFICATIONREFERENCE($,'Co_20_45_54','Motor vehicle servicing complexes',#10593,$,$);
+#10596=IFCCLASSIFICATIONREFERENCE($,'Co_20_50','Commercial complexes',#10582,$,$);
+#10597=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_05','Auction complexes',#10596,$,$);
+#10598=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_50','Market complexes',#10596,$,$);
+#10599=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_53','Mixed use complexes',#10596,$,$);
+#10600=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_60','Parades of shops',#10596,$,$);
+#10601=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_71','Retail parks',#10596,$,$);
+#10602=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_78','Shopping complexes',#10596,$,$);
+#10603=IFCCLASSIFICATIONREFERENCE($,'Co_20_50_94','Vehicle sales complexes',#10596,$,$);
+#10604=IFCCLASSIFICATIONREFERENCE($,'Co_20_55','Postal complexes',#10582,$,$);
+#10605=IFCCLASSIFICATIONREFERENCE($,'Co_20_55_10','Postal communications complexes',#10604,$,$);
+#10606=IFCCLASSIFICATIONREFERENCE($,'Co_20_60','Military complexes',#10582,$,$);
+#10607=IFCCLASSIFICATIONREFERENCE($,'Co_20_60_02','Air force complexes',#10606,$,$);
+#10608=IFCCLASSIFICATIONREFERENCE($,'Co_20_60_10','Army complexes',#10606,$,$);
+#10609=IFCCLASSIFICATIONREFERENCE($,'Co_20_60_56','Navy complexes',#10606,$,$);
+#10610=IFCCLASSIFICATIONREFERENCE($,'Co_20_65','Law enforcement complexes',#10582,$,$);
+#10611=IFCCLASSIFICATIONREFERENCE($,'Co_20_65_56','Law enforcement agency complexes',#10610,$,$);
+#10612=IFCCLASSIFICATIONREFERENCE($,'Co_20_70','Judicial complexes',#10582,$,$);
+#10613=IFCCLASSIFICATIONREFERENCE($,'Co_20_70_18','Court complexes',#10612,$,$);
+#10614=IFCCLASSIFICATIONREFERENCE($,'Co_20_70_65','Probation complexes',#10612,$,$);
+#10615=IFCCLASSIFICATIONREFERENCE($,'Co_20_75','Detention complexes',#10582,$,$);
+#10616=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_13','Closed female estates',#10615,$,$);
+#10617=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_15','Closed male estates',#10615,$,$);
+#10618=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_42','Immigrant detention complexes',#10615,$,$);
+#10619=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_58','Open female estates',#10615,$,$);
+#10620=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_59','Open male estates',#10615,$,$);
+#10621=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_64','Prison complexes',#10615,$,$);
+#10622=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_71','Refugee detention complexes',#10615,$,$);
+#10623=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_77','Secure training centres (STC)',#10615,$,$);
+#10624=IFCCLASSIFICATIONREFERENCE($,'Co_20_75_99','Young offender institutions',#10615,$,$);
+#10625=IFCCLASSIFICATIONREFERENCE($,'Co_20_80','Weapons training complexes',#10582,$,$);
+#10626=IFCCLASSIFICATIONREFERENCE($,'Co_20_80_04','Artillery firing range complexes',#10625,$,$);
+#10627=IFCCLASSIFICATIONREFERENCE($,'Co_20_80_80','Small arms firing range complexes',#10625,$,$);
+#10628=IFCCLASSIFICATIONREFERENCE($,'Co_20_90','Incident support complexes',#10582,$,$);
+#10629=IFCCLASSIFICATIONREFERENCE($,'Co_20_90_02','Air and sea rescue complexes',#10628,$,$);
+#10630=IFCCLASSIFICATIONREFERENCE($,'Co_20_90_16','Coastguard stations',#10628,$,$);
+#10631=IFCCLASSIFICATIONREFERENCE($,'Co_20_90_27','Fire brigade complexes',#10628,$,$);
+#10632=IFCCLASSIFICATIONREFERENCE($,'Co_20_90_47','Lifeboat stations',#10628,$,$);
+#10633=IFCCLASSIFICATIONREFERENCE($,'Co_20_90_53','Mountain rescue complexes',#10628,$,$);
+#10634=IFCCLASSIFICATIONREFERENCE($,'Co_25','Cultural, educational, scientific and information complexes',#3,$,$);
+#10635=IFCCLASSIFICATIONREFERENCE($,'Co_25_05','Commemorative complexes',#10634,$,$);
+#10636=IFCCLASSIFICATIONREFERENCE($,'Co_25_10','Educational complexes',#10634,$,$);
+#10637=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_32','Further education colleges',#10636,$,$);
+#10638=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_41','Infant schools',#10636,$,$);
+#10639=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_45','Kindergartens, nurseries and preschools',#10636,$,$);
+#10640=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_66','Primary schools',#10636,$,$);
+#10641=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_77','Secondary schools',#10636,$,$);
+#10642=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_88','Tertiary colleges',#10636,$,$);
+#10643=IFCCLASSIFICATIONREFERENCE($,'Co_25_10_92','Universities',#10636,$,$);
+#10644=IFCCLASSIFICATIONREFERENCE($,'Co_25_30','Scientific complexes',#10634,$,$);
+#10645=IFCCLASSIFICATIONREFERENCE($,'Co_25_30_04','Astronomical observatory complexes',#10644,$,$);
+#10646=IFCCLASSIFICATIONREFERENCE($,'Co_25_30_08','Botanical gardens',#10644,$,$);
+#10647=IFCCLASSIFICATIONREFERENCE($,'Co_25_30_45','Laboratory complexes',#10644,$,$);
+#10648=IFCCLASSIFICATIONREFERENCE($,'Co_25_30_70','Research complexes',#10644,$,$);
+#10649=IFCCLASSIFICATIONREFERENCE($,'Co_25_50','Exhibition complexes',#10634,$,$);
+#10650=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_03','Art installations',#10649,$,$);
+#10651=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_33','Galleries',#10649,$,$);
+#10652=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_34','Gardens and arboretums',#10649,$,$);
+#10653=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_50','Memorial complexes',#10649,$,$);
+#10654=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_52','Monument complexes',#10649,$,$);
+#10655=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_54','Multi-purpose exhibition complexes',#10649,$,$);
+#10656=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_55','Museums',#10649,$,$);
+#10657=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_58','Open-air museums',#10649,$,$);
+#10658=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_59','Open-air sculpture parks',#10649,$,$);
+#10659=IFCCLASSIFICATIONREFERENCE($,'Co_25_50_99','Zoos',#10649,$,$);
+#10660=IFCCLASSIFICATIONREFERENCE($,'Co_25_70','Information complexes',#10634,$,$);
+#10661=IFCCLASSIFICATIONREFERENCE($,'Co_25_70_16','Conference complexes',#10660,$,$);
+#10662=IFCCLASSIFICATIONREFERENCE($,'Co_25_70_23','Document archives',#10660,$,$);
+#10663=IFCCLASSIFICATIONREFERENCE($,'Co_25_70_30','Film archives',#10660,$,$);
+#10664=IFCCLASSIFICATIONREFERENCE($,'Co_25_70_41','Information centres',#10660,$,$);
+#10665=IFCCLASSIFICATIONREFERENCE($,'Co_25_70_47','Library complexes',#10660,$,$);
+#10666=IFCCLASSIFICATIONREFERENCE($,'Co_25_90','Worship complexes',#10634,$,$);
+#10667=IFCCLASSIFICATIONREFERENCE($,'Co_25_90_30','Faith worship complexes',#10666,$,$);
+#10668=IFCCLASSIFICATIONREFERENCE($,'Co_30','Industrial complexes',#3,$,$);
+#10669=IFCCLASSIFICATIONREFERENCE($,'Co_30_10','Mineral extraction complexes',#10668,$,$);
+#10670=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_22','Deep mines',#10669,$,$);
+#10671=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_24','Drift mines',#10669,$,$);
+#10672=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_51','Methane hydrates extraction complexes',#10669,$,$);
+#10673=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_61','Opencast mines',#10669,$,$);
+#10674=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_69','Quarries',#10669,$,$);
+#10675=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_77','Shale gas extraction complexes',#10669,$,$);
+#10676=IFCCLASSIFICATIONREFERENCE($,'Co_30_10_78','Shale oil extraction complexes',#10669,$,$);
+#10677=IFCCLASSIFICATIONREFERENCE($,'Co_30_20','Nuclear and chemical management complexes',#10668,$,$);
+#10678=IFCCLASSIFICATIONREFERENCE($,'Co_30_20_80','Surface radioactive waste management complexes',#10677,$,$);
+#10679=IFCCLASSIFICATIONREFERENCE($,'Co_30_20_95','Underground radioactive waste management complexes',#10677,$,$);
+#10680=IFCCLASSIFICATIONREFERENCE($,'Co_30_30','Mineral processing complexes',#10668,$,$);
+#10681=IFCCLASSIFICATIONREFERENCE($,'Co_30_30_30','Gas processing complexes',#10680,$,$);
+#10682=IFCCLASSIFICATIONREFERENCE($,'Co_30_30_50','Oil processing complexes',#10680,$,$);
+#10683=IFCCLASSIFICATIONREFERENCE($,'Co_30_30_55','Ore processing complexes',#10680,$,$);
+#10684=IFCCLASSIFICATIONREFERENCE($,'Co_30_40','Animal and plant products processing complexes',#10668,$,$);
+#10685=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_01','Abattoirs',#10684,$,$);
+#10686=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_03','Animal product processing complexes',#10684,$,$);
+#10687=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_04','Arable crop processing complexes',#10684,$,$);
+#10688=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_06','Bakeries',#10684,$,$);
+#10689=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_08','Breweries',#10684,$,$);
+#10690=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_11','Canneries',#10684,$,$);
+#10691=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_22','Distilleries',#10684,$,$);
+#10692=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_30','Fish processing complexes',#10684,$,$);
+#10693=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_40','Horticultural crop processing complexes',#10684,$,$);
+#10694=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_55','Mills',#10684,$,$);
+#10695=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_60','Livestock processing complexes',#10684,$,$);
+#10696=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_90','Timber processing complexes',#10684,$,$);
+#10697=IFCCLASSIFICATIONREFERENCE($,'Co_30_40_96','Wineries',#10684,$,$);
+#10698=IFCCLASSIFICATIONREFERENCE($,'Co_30_50','Manufacturing complexes',#10668,$,$);
+#10699=IFCCLASSIFICATIONREFERENCE($,'Co_30_50_37','Heavy manufacturing complexes',#10698,$,$);
+#10700=IFCCLASSIFICATIONREFERENCE($,'Co_30_50_41','Industrial parks',#10698,$,$);
+#10701=IFCCLASSIFICATIONREFERENCE($,'Co_30_50_47','Light manufacturing complexes',#10698,$,$);
+#10702=IFCCLASSIFICATIONREFERENCE($,'Co_30_50_77','Ship and boat building yards',#10698,$,$);
+#10703=IFCCLASSIFICATIONREFERENCE($,'Co_30_60','Cleaning and maintenance complexes',#10668,$,$);
+#10704=IFCCLASSIFICATIONREFERENCE($,'Co_30_60_15','Commercial laundries',#10703,$,$);
+#10705=IFCCLASSIFICATIONREFERENCE($,'Co_30_60_94','Vehicle-cleaning complexes',#10703,$,$);
+#10706=IFCCLASSIFICATIONREFERENCE($,'Co_30_80','Mechanical power generation complexes',#10668,$,$);
+#10707=IFCCLASSIFICATIONREFERENCE($,'Co_30_80_10','Kinetic power generation complexes',#10706,$,$);
+#10708=IFCCLASSIFICATIONREFERENCE($,'Co_30_85','Marine and water maintenance complexes',#10668,$,$);
+#10709=IFCCLASSIFICATIONREFERENCE($,'Co_30_90','Warehousing and distribution complexes',#10668,$,$);
+#10710=IFCCLASSIFICATIONREFERENCE($,'Co_32','Water and land management complexes',#3,$,$);
+#10711=IFCCLASSIFICATIONREFERENCE($,'Co_32_10','Agricultural and horticultural complexes',#10710,$,$);
+#10712=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_02','Arable farms',#10711,$,$);
+#10713=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_15','Crofts',#10711,$,$);
+#10714=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_28','Fish farms',#10711,$,$);
+#10715=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_30','Fish hatcheries',#10711,$,$);
+#10716=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_39','Horticultural nurseries',#10711,$,$);
+#10717=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_46','Livestock farms',#10711,$,$);
+#10718=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_50','Managed forests',#10711,$,$);
+#10719=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_58','Orchards',#10711,$,$);
+#10720=IFCCLASSIFICATIONREFERENCE($,'Co_32_10_94','Vineyards',#10711,$,$);
+#10721=IFCCLASSIFICATIONREFERENCE($,'Co_32_15','Dam complexes',#10710,$,$);
+#10722=IFCCLASSIFICATIONREFERENCE($,'Co_32_15_05','Arch dams',#10721,$,$);
+#10723=IFCCLASSIFICATIONREFERENCE($,'Co_32_15_10','Buttress dams',#10721,$,$);
+#10724=IFCCLASSIFICATIONREFERENCE($,'Co_32_15_26','Earth dams',#10721,$,$);
+#10725=IFCCLASSIFICATIONREFERENCE($,'Co_32_15_35','Gravity dams',#10721,$,$);
+#10726=IFCCLASSIFICATIONREFERENCE($,'Co_32_15_73','Rock fill dams',#10721,$,$);
+#10727=IFCCLASSIFICATIONREFERENCE($,'Co_32_20','Designated land areas',#10710,$,$);
+#10728=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_04','Areas of special architectural or historical interest',#10727,$,$);
+#10729=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_17','Commons',#10727,$,$);
+#10730=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_22','Designated archaeological sites',#10727,$,$);
+#10731=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_23','Designated nature reserves',#10727,$,$);
+#10732=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_57','National parks',#10727,$,$);
+#10733=IFCCLASSIFICATIONREFERENCE($,'Co_32_20_65','Planning zones',#10727,$,$);
+#10734=IFCCLASSIFICATIONREFERENCE($,'Co_32_50','Marine ways and waterway complexes',#10710,$,$);
+#10735=IFCCLASSIFICATIONREFERENCE($,'Co_32_50_11','Causeways',#10734,$,$);
+#10736=IFCCLASSIFICATIONREFERENCE($,'Co_32_50_48','Lighthouse complexes',#10734,$,$);
+#10737=IFCCLASSIFICATIONREFERENCE($,'Co_32_50_94','Vessel berthing complexes',#10734,$,$);
+#10738=IFCCLASSIFICATIONREFERENCE($,'Co_32_50_95','Vessel launching complexes',#10734,$,$);
+#10739=IFCCLASSIFICATIONREFERENCE($,'Co_32_55','Marine and water protection complexes',#10710,$,$);
+#10740=IFCCLASSIFICATIONREFERENCE($,'Co_32_55_20','Coastal protection complexes',#10739,$,$);
+#10741=IFCCLASSIFICATIONREFERENCE($,'Co_32_55_27','Erosion protection complexes',#10739,$,$);
+#10742=IFCCLASSIFICATIONREFERENCE($,'Co_32_55_30','Flood protection complexes',#10739,$,$);
+#10743=IFCCLASSIFICATIONREFERENCE($,'Co_32_65','Natural areas',#10710,$,$);
+#10744=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_04','Aquifers',#10743,$,$);
+#10745=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_15','Cliffs',#10743,$,$);
+#10746=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_16','Coastal zones',#10743,$,$);
+#10747=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_22','Deserts',#10743,$,$);
+#10748=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_27','Estuaries',#10743,$,$);
+#10749=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_30','Forests',#10743,$,$);
+#10750=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_38','Hills',#10743,$,$);
+#10751=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_46','Lakes',#10743,$,$);
+#10752=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_54','Mountains',#10743,$,$);
+#10753=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_64','Ponds',#10743,$,$);
+#10754=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_72','Rivers',#10743,$,$);
+#10755=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_75','Salt marshes',#10743,$,$);
+#10756=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_79','Seasonal wetlands',#10743,$,$);
+#10757=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_82','Springs',#10743,$,$);
+#10758=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_85','Streams, brooks and burns',#10743,$,$);
+#10759=IFCCLASSIFICATIONREFERENCE($,'Co_32_65_96','Woodlands',#10743,$,$);
+#10760=IFCCLASSIFICATIONREFERENCE($,'Co_32_85','Water control and retaining complexes',#10710,$,$);
+#10761=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_50','Lock complexes',#10760,$,$);
+#10762=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_70','Reservoirs',#10760,$,$);
+#10763=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_88','Tidal barriers',#10760,$,$);
+#10764=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_96','Water control complexes',#10760,$,$);
+#10765=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_97','Water level and flow monitoring complexes',#10760,$,$);
+#10766=IFCCLASSIFICATIONREFERENCE($,'Co_32_85_98','Water pumping complexes',#10760,$,$);
+#10767=IFCCLASSIFICATIONREFERENCE($,'Co_35','Medical, health, welfare and sanitary complexes',#3,$,$);
+#10768=IFCCLASSIFICATIONREFERENCE($,'Co_35_10','Medical complexes',#10767,$,$);
+#10769=IFCCLASSIFICATIONREFERENCE($,'Co_35_10_02','Air ambulance complexes',#10768,$,$);
+#10770=IFCCLASSIFICATIONREFERENCE($,'Co_35_10_03','Ambulance complexes',#10768,$,$);
+#10771=IFCCLASSIFICATIONREFERENCE($,'Co_35_10_15','Clinical complexes',#10768,$,$);
+#10772=IFCCLASSIFICATIONREFERENCE($,'Co_35_10_37','Hospital complexes',#10768,$,$);
+#10773=IFCCLASSIFICATIONREFERENCE($,'Co_35_50','Welfare complexes',#10767,$,$);
+#10774=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_30','Fitness and detox complexes',#10773,$,$);
+#10775=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_37','Hospices',#10773,$,$);
+#10776=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_58','Nursing homes',#10773,$,$);
+#10777=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_69','Quarantine stations',#10773,$,$);
+#10778=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_82','Spa complexes',#10773,$,$);
+#10779=IFCCLASSIFICATIONREFERENCE($,'Co_35_50_90','Turkish baths',#10773,$,$);
+#10780=IFCCLASSIFICATIONREFERENCE($,'Co_35_70','Funerary complexes',#10767,$,$);
+#10781=IFCCLASSIFICATIONREFERENCE($,'Co_35_70_13','Cemeteries',#10780,$,$);
+#10782=IFCCLASSIFICATIONREFERENCE($,'Co_35_70_16','Crematoriums',#10780,$,$);
+#10783=IFCCLASSIFICATIONREFERENCE($,'Co_35_70_32','Funeral complexes',#10780,$,$);
+#10784=IFCCLASSIFICATIONREFERENCE($,'Co_35_85','Animal complexes',#10767,$,$);
+#10785=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_02','Animal cage complexes',#10784,$,$);
+#10786=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_03','Animal pen complexes',#10784,$,$);
+#10787=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_04','Aquariums',#10784,$,$);
+#10788=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_05','Aviary complexes',#10784,$,$);
+#10789=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_45','Kennel complexes',#10784,$,$);
+#10790=IFCCLASSIFICATIONREFERENCE($,'Co_35_85_85','Stable complexes',#10784,$,$);
+#10791=IFCCLASSIFICATIONREFERENCE($,'Co_35_90','Animal medical, health, welfare, funerary and sanitary complexes',#10767,$,$);
+#10792=IFCCLASSIFICATIONREFERENCE($,'Co_35_90_02','Animal funerary complexes',#10791,$,$);
+#10793=IFCCLASSIFICATIONREFERENCE($,'Co_35_90_03','Animal quarantine stations',#10791,$,$);
+#10794=IFCCLASSIFICATIONREFERENCE($,'Co_35_90_95','Veterinary complexes',#10791,$,$);
+#10795=IFCCLASSIFICATIONREFERENCE($,'Co_40','Recreational complexes',#3,$,$);
+#10796=IFCCLASSIFICATIONREFERENCE($,'Co_40_05','Amusement complexes',#10795,$,$);
+#10797=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_02','Amphitheatres',#10796,$,$);
+#10798=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_03','Amusement parks',#10796,$,$);
+#10799=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_27','E-sport complexes',#10796,$,$);
+#10800=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_30','Fairground complexes',#10796,$,$);
+#10801=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_63','Pleasure piers',#10796,$,$);
+#10802=IFCCLASSIFICATIONREFERENCE($,'Co_40_05_89','Theme parks',#10796,$,$);
+#10803=IFCCLASSIFICATIONREFERENCE($,'Co_40_35','Historic complexes',#10795,$,$);
+#10804=IFCCLASSIFICATIONREFERENCE($,'Co_40_35_06','Battle sites',#10803,$,$);
+#10805=IFCCLASSIFICATIONREFERENCE($,'Co_40_35_39','Historic sites',#10803,$,$);
+#10806=IFCCLASSIFICATIONREFERENCE($,'Co_40_35_78','Sites of antiquity',#10803,$,$);
+#10807=IFCCLASSIFICATIONREFERENCE($,'Co_40_35_94','Visible earthworks',#10803,$,$);
+#10808=IFCCLASSIFICATIONREFERENCE($,'Co_40_60','Performing arts complexes',#10795,$,$);
+#10809=IFCCLASSIFICATIONREFERENCE($,'Co_40_60_13','Cinema complexes',#10808,$,$);
+#10810=IFCCLASSIFICATIONREFERENCE($,'Co_40_60_14','Circuses',#10808,$,$);
+#10811=IFCCLASSIFICATIONREFERENCE($,'Co_40_60_16','Concert hall complexes',#10808,$,$);
+#10812=IFCCLASSIFICATIONREFERENCE($,'Co_40_60_30','Film and television studio complexes',#10808,$,$);
+#10813=IFCCLASSIFICATIONREFERENCE($,'Co_40_60_88','Theatre complexes',#10808,$,$);
+#10814=IFCCLASSIFICATIONREFERENCE($,'Co_40_75','Social recreation complexes',#10795,$,$);
+#10815=IFCCLASSIFICATIONREFERENCE($,'Co_40_75_15','Community centres',#10814,$,$);
+#10816=IFCCLASSIFICATIONREFERENCE($,'Co_40_75_17','Country parks',#10814,$,$);
+#10817=IFCCLASSIFICATIONREFERENCE($,'Co_40_75_68','Public parks',#10814,$,$);
+#10818=IFCCLASSIFICATIONREFERENCE($,'Co_40_75_71','Recreation grounds',#10814,$,$);
+#10819=IFCCLASSIFICATIONREFERENCE($,'Co_42','Sport and activity complexes',#3,$,$);
+#10820=IFCCLASSIFICATIONREFERENCE($,'Co_42_40','Indoor activity complexes',#10819,$,$);
+#10821=IFCCLASSIFICATIONREFERENCE($,'Co_42_40_10','Indoor athletics stadiums',#10820,$,$);
+#10822=IFCCLASSIFICATIONREFERENCE($,'Co_42_40_40','Indoor sports complexes',#10820,$,$);
+#10823=IFCCLASSIFICATIONREFERENCE($,'Co_42_50','Outdoor activity complexes',#10819,$,$);
+#10824=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_10','Outdoor stadiums',#10823,$,$);
+#10825=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_25','Equine sports complexes',#10823,$,$);
+#10826=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_30','Golf courses',#10823,$,$);
+#10827=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_50','Motor sports complexes',#10823,$,$);
+#10828=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_60','Outdoor sports complexes',#10823,$,$);
+#10829=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_70','Racehorse gallops',#10823,$,$);
+#10830=IFCCLASSIFICATIONREFERENCE($,'Co_42_50_95','Winter sport complexes',#10823,$,$);
+#10831=IFCCLASSIFICATIONREFERENCE($,'Co_42_85','Swimming complexes',#10819,$,$);
+#10832=IFCCLASSIFICATIONREFERENCE($,'Co_42_85_40','Indoor swimming pool complexes',#10831,$,$);
+#10833=IFCCLASSIFICATIONREFERENCE($,'Co_42_85_60','Outdoor swimming pool complexes',#10831,$,$);
+#10834=IFCCLASSIFICATIONREFERENCE($,'Co_42_85_96','Water parks',#10831,$,$);
+#10835=IFCCLASSIFICATIONREFERENCE($,'Co_45','Residential complexes',#3,$,$);
+#10836=IFCCLASSIFICATIONREFERENCE($,'Co_45_10','Living complexes',#10835,$,$);
+#10837=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_11','Campsites',#10836,$,$);
+#10838=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_12','Caravan parks',#10836,$,$);
+#10839=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_15','Convents and monasteries',#10836,$,$);
+#10840=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_27','Emergency camps',#10836,$,$);
+#10841=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_35','Halls of residence',#10836,$,$);
+#10842=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_36','High-rise residential complexes',#10836,$,$);
+#10843=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_37','Hostels',#10836,$,$);
+#10844=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_38','Hotels',#10836,$,$);
+#10845=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_40','Houses in multiple occupation',#10836,$,$);
+#10846=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_41','Housing estates',#10836,$,$);
+#10847=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_51','Military camps',#10836,$,$);
+#10848=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_54','Motels',#10836,$,$);
+#10849=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_72','Religious retreats',#10836,$,$);
+#10850=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_74','Residential properties',#10836,$,$);
+#10851=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_78','Sheltered housing',#10836,$,$);
+#10852=IFCCLASSIFICATIONREFERENCE($,'Co_45_10_98','Youth group camps',#10836,$,$);
+#10853=IFCCLASSIFICATIONREFERENCE($,'Co_50','Waste disposal complexes',#3,$,$);
+#10854=IFCCLASSIFICATIONREFERENCE($,'Co_50_20','Non-aqueous waste collection and distribution complexes',#10853,$,$);
+#10855=IFCCLASSIFICATIONREFERENCE($,'Co_50_30','Drainage collection complexes',#10853,$,$);
+#10856=IFCCLASSIFICATIONREFERENCE($,'Co_50_30_25','Drainage collection networks',#10855,$,$);
+#10857=IFCCLASSIFICATIONREFERENCE($,'Co_50_35','Wastewater collection complexes',#10853,$,$);
+#10858=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_15','Combined wastewater collection networks',#10857,$,$);
+#10859=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_17','Combined wastewater transfer complexes',#10857,$,$);
+#10860=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_85','Surface water collection networks',#10857,$,$);
+#10861=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_87','Surface water transfer complexes',#10857,$,$);
+#10862=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_96','Wastewater collection networks',#10857,$,$);
+#10863=IFCCLASSIFICATIONREFERENCE($,'Co_50_35_98','Wastewater transfer complexes',#10857,$,$);
+#10864=IFCCLASSIFICATIONREFERENCE($,'Co_50_40','Dry waste collection and distribution complexes',#10853,$,$);
+#10865=IFCCLASSIFICATIONREFERENCE($,'Co_50_40_10','Dry waste collection complexes',#10864,$,$);
+#10866=IFCCLASSIFICATIONREFERENCE($,'Co_50_40_50','Dry waste distribution complexes',#10864,$,$);
+#10867=IFCCLASSIFICATIONREFERENCE($,'Co_50_60','Non-aqueous waste treatment and disposal complexes',#10853,$,$);
+#10868=IFCCLASSIFICATIONREFERENCE($,'Co_50_70','Drainage storage, treatment and disposal complexes',#10853,$,$);
+#10869=IFCCLASSIFICATIONREFERENCE($,'Co_50_70_25','Drainage disposal networks',#10868,$,$);
+#10870=IFCCLASSIFICATIONREFERENCE($,'Co_50_75','Wastewater treatment and disposal complexes',#10853,$,$);
+#10871=IFCCLASSIFICATIONREFERENCE($,'Co_50_75_25','Wastewater disposal complexes',#10870,$,$);
+#10872=IFCCLASSIFICATIONREFERENCE($,'Co_50_75_90','Wastewater treatment complexes',#10870,$,$);
+#10873=IFCCLASSIFICATIONREFERENCE($,'Co_50_80','Dry waste storage, treatment and disposal complexes',#10853,$,$);
+#10874=IFCCLASSIFICATIONREFERENCE($,'Co_50_80_24','Dry waste storage complexes',#10873,$,$);
+#10875=IFCCLASSIFICATIONREFERENCE($,'Co_50_80_40','Dry waste treatment complexes',#10873,$,$);
+#10876=IFCCLASSIFICATIONREFERENCE($,'Co_50_80_70','Dry waste disposal complexes',#10873,$,$);
+#10877=IFCCLASSIFICATIONREFERENCE($,'Co_55','Piped supply complexes',#3,$,$);
+#10878=IFCCLASSIFICATIONREFERENCE($,'Co_55_05','Gas extraction, storage and treatment complexes',#10877,$,$);
+#10879=IFCCLASSIFICATIONREFERENCE($,'Co_55_05_30','Gas extraction complexes',#10878,$,$);
+#10880=IFCCLASSIFICATIONREFERENCE($,'Co_55_05_34','Gas storage complexes',#10878,$,$);
+#10881=IFCCLASSIFICATIONREFERENCE($,'Co_55_05_70','Gas treatment complexes',#10878,$,$);
+#10882=IFCCLASSIFICATIONREFERENCE($,'Co_55_10','Liquid fuel extraction, storage and treatment complexes',#10877,$,$);
+#10883=IFCCLASSIFICATIONREFERENCE($,'Co_55_10_40','Oil extraction complexes',#10882,$,$);
+#10884=IFCCLASSIFICATIONREFERENCE($,'Co_55_10_45','Liquid fuel storage complexes',#10882,$,$);
+#10885=IFCCLASSIFICATIONREFERENCE($,'Co_55_10_80','Oil treatment complexes',#10882,$,$);
+#10886=IFCCLASSIFICATIONREFERENCE($,'Co_55_15','Water extraction and treatment complexes',#10877,$,$);
+#10887=IFCCLASSIFICATIONREFERENCE($,'Co_55_15_10','Raw water extraction complexes',#10886,$,$);
+#10888=IFCCLASSIFICATIONREFERENCE($,'Co_55_15_15','Raw water extraction transfer networks',#10886,$,$);
+#10889=IFCCLASSIFICATIONREFERENCE($,'Co_55_15_50','Water treatment complexes',#10886,$,$);
+#10890=IFCCLASSIFICATIONREFERENCE($,'Co_55_20','Gas supply complexes',#10877,$,$);
+#10891=IFCCLASSIFICATIONREFERENCE($,'Co_55_20_50','Gas distribution complexes',#10890,$,$);
+#10892=IFCCLASSIFICATIONREFERENCE($,'Co_55_20_60','Gas distribution networks',#10890,$,$);
+#10893=IFCCLASSIFICATIONREFERENCE($,'Co_55_50','Liquid fuel supply complexes',#10877,$,$);
+#10894=IFCCLASSIFICATIONREFERENCE($,'Co_55_50_10','Liquid fuel distribution complexes',#10893,$,$);
+#10895=IFCCLASSIFICATIONREFERENCE($,'Co_55_50_50','Liquid fuel distribution networks',#10893,$,$);
+#10896=IFCCLASSIFICATIONREFERENCE($,'Co_55_70','Water supply complexes',#10877,$,$);
+#10897=IFCCLASSIFICATIONREFERENCE($,'Co_55_70_20','Potable water distribution complexes',#10896,$,$);
+#10898=IFCCLASSIFICATIONREFERENCE($,'Co_55_70_60','Potable water distribution networks',#10896,$,$);
+#10899=IFCCLASSIFICATIONREFERENCE($,'Co_55_70_70','Recycled water distribution complexes',#10896,$,$);
+#10900=IFCCLASSIFICATIONREFERENCE($,'Co_55_70_75','Recycled water distribution networks',#10896,$,$);
+#10901=IFCCLASSIFICATIONREFERENCE($,'Co_60','Heating, cooling and refrigeration complexes',#3,$,$);
+#10902=IFCCLASSIFICATIONREFERENCE($,'Co_60_10','Heating complexes',#10901,$,$);
+#10903=IFCCLASSIFICATIONREFERENCE($,'Co_60_10_10','District heating complexes',#10902,$,$);
+#10904=IFCCLASSIFICATIONREFERENCE($,'Co_60_40','Cooling complexes',#10901,$,$);
+#10905=IFCCLASSIFICATIONREFERENCE($,'Co_60_40_10','District cooling complexes',#10904,$,$);
+#10906=IFCCLASSIFICATIONREFERENCE($,'Co_65','Ventilation and air conditioning complexes',#3,$,$);
+#10907=IFCCLASSIFICATIONREFERENCE($,'Co_70','Electrical power generation and distribution complexes',#3,$,$);
+#10908=IFCCLASSIFICATIONREFERENCE($,'Co_70_10','Electrical power generation complexes',#10907,$,$);
+#10909=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_08','Biomass power generation complexes',#10908,$,$);
+#10910=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_16','Coal power generation complexes',#10908,$,$);
+#10911=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_17','Combined heat and power generation complexes',#10908,$,$);
+#10912=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_33','Gas power generation complexes',#10908,$,$);
+#10913=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_34','Geothermal power generation complexes',#10908,$,$);
+#10914=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_38','Hydroelectric power generation complexes',#10908,$,$);
+#10915=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_57','Nuclear power generation complexes',#10908,$,$);
+#10916=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_58','Offshore wind power generation complexes',#10908,$,$);
+#10917=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_59','Oil-fired power generation complexes',#10908,$,$);
+#10918=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_60','Onshore wind power generation complexes',#10908,$,$);
+#10919=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_63','Photovoltaic power generation complexes',#10908,$,$);
+#10920=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_81','Solar reflector power generation complexes',#10908,$,$);
+#10921=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_88','Tidal power generation complexes',#10908,$,$);
+#10922=IFCCLASSIFICATIONREFERENCE($,'Co_70_10_96','Wave power generation complexes',#10908,$,$);
+#10923=IFCCLASSIFICATIONREFERENCE($,'Co_70_30','Electricity distribution complexes',#10907,$,$);
+#10924=IFCCLASSIFICATIONREFERENCE($,'Co_70_30_35','High-voltage electricity substation complexes',#10923,$,$);
+#10925=IFCCLASSIFICATIONREFERENCE($,'Co_70_30_40','High-voltage electricity networks',#10923,$,$);
+#10926=IFCCLASSIFICATIONREFERENCE($,'Co_70_30_45','Low-voltage electricity substation complexes',#10923,$,$);
+#10927=IFCCLASSIFICATIONREFERENCE($,'Co_70_30_50','Low-voltage electricity networks',#10923,$,$);
+#10928=IFCCLASSIFICATIONREFERENCE($,'Co_75','Communications, security, safety and protection complexes',#3,$,$);
+#10929=IFCCLASSIFICATIONREFERENCE($,'Co_75_10','Communications complexes',#10928,$,$);
+#10930=IFCCLASSIFICATIONREFERENCE($,'Co_75_10_10','Broadcast communications complexes',#10929,$,$);
+#10931=IFCCLASSIFICATIONREFERENCE($,'Co_75_10_20','Broadcast communications networks',#10929,$,$);
+#10932=IFCCLASSIFICATIONREFERENCE($,'Co_75_10_80','Telecommunications complexes',#10929,$,$);
+#10933=IFCCLASSIFICATIONREFERENCE($,'Co_75_10_90','Telecommunications networks',#10929,$,$);
+#10934=IFCCLASSIFICATIONREFERENCE($,'Co_80','Transport complexes',#3,$,$);
+#10935=IFCCLASSIFICATIONREFERENCE($,'Co_80_05','Aerospace complexes',#10934,$,$);
+#10936=IFCCLASSIFICATIONREFERENCE($,'Co_80_05_02','Airports and airfields',#10935,$,$);
+#10937=IFCCLASSIFICATIONREFERENCE($,'Co_80_05_38','Heliports',#10935,$,$);
+#10938=IFCCLASSIFICATIONREFERENCE($,'Co_80_05_84','Spacecraft complexes',#10935,$,$);
+#10939=IFCCLASSIFICATIONREFERENCE($,'Co_80_20','Cable transport complexes',#10934,$,$);
+#10940=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_02','Aerial tramway complexes',#10939,$,$);
+#10941=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_10','Cable railway complexes',#10939,$,$);
+#10942=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_13','Chairlift way complexes',#10939,$,$);
+#10943=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_32','Funicular railway complexes',#10939,$,$);
+#10944=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_34','Gondola lift way complexes',#10939,$,$);
+#10945=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_84','Surface lift way complexes',#10939,$,$);
+#10946=IFCCLASSIFICATIONREFERENCE($,'Co_80_20_99','Zip line way complexes',#10939,$,$);
+#10947=IFCCLASSIFICATIONREFERENCE($,'Co_80_35','Road complexes',#10934,$,$);
+#10948=IFCCLASSIFICATIONREFERENCE($,'Co_80_35_10','Bus route networks',#10947,$,$);
+#10949=IFCCLASSIFICATIONREFERENCE($,'Co_80_35_75','Road networks',#10947,$,$);
+#10950=IFCCLASSIFICATIONREFERENCE($,'Co_80_50','Railway complexes',#10934,$,$);
+#10951=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_35','Heavy rail complexes',#10950,$,$);
+#10952=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_37','High-speed rail complexes',#10950,$,$);
+#10953=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_45','Light rail complexes',#10950,$,$);
+#10954=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_50','Magnetic levitation ways',#10950,$,$);
+#10955=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_53','Monorail complexes',#10950,$,$);
+#10956=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_56','Narrow gauge rail complexes',#10950,$,$);
+#10957=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_69','Rack rail complexes',#10950,$,$);
+#10958=IFCCLASSIFICATIONREFERENCE($,'Co_80_50_76','Road-based light rail complexes',#10950,$,$);
+#10959=IFCCLASSIFICATIONREFERENCE($,'Co_80_70','Marine and waterways transport complexes',#10934,$,$);
+#10960=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_11','Cable ferry complexes',#10959,$,$);
+#10961=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_13','Canal complexes',#10959,$,$);
+#10962=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_17','Container ports',#10959,$,$);
+#10963=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_23','Dry bulk ports',#10959,$,$);
+#10964=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_28','Ferry routes',#10959,$,$);
+#10965=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_30','Fishing ports',#10959,$,$);
+#10966=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_36','Harbours',#10959,$,$);
+#10967=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_47','Liquid bulk ports',#10959,$,$);
+#10968=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_72','Roll-on/ roll-off ports',#10959,$,$);
+#10969=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_77','Sea cruise ports',#10959,$,$);
+#10970=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_78','Sea ferry ports',#10959,$,$);
+#10971=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_80','Shipping lanes',#10959,$,$);
+#10972=IFCCLASSIFICATIONREFERENCE($,'Co_80_70_96','Waterway ferry complexes',#10959,$,$);
+#10973=IFCCLASSIFICATIONREFERENCE($,'Co_80_90','Transport interchange complexes',#10934,$,$);
+#10974=IFCCLASSIFICATIONREFERENCE($,'Co_90','Circulation and storage complexes',#3,$,$);
+#10975=IFCCLASSIFICATIONREFERENCE($,'Co_90_50','Storage complexes',#10974,$,$);
+#10976=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_03','Ambient food storage complexes',#10975,$,$);
+#10977=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_04','Arms storage complexes',#10975,$,$);
+#10978=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_15','Cold storage complexes',#10975,$,$);
+#10979=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_16','Complexes for the storage of human remains',#10975,$,$);
+#10980=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_51','Military arsenals',#10975,$,$);
+#10981=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_52','Mineral storage complexes',#10975,$,$);
+#10982=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_71','Refrigerated food storage complexes',#10975,$,$);
+#10983=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_77','Secure storage complexes',#10975,$,$);
+#10984=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_78','Self-storage complexes',#10975,$,$);
+#10985=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_80','Solid fuel storage complexes',#10975,$,$);
+#10986=IFCCLASSIFICATIONREFERENCE($,'Co_90_50_94','Warehouses',#10975,$,$);
+#10987=IFCCLASSIFICATIONREFERENCE($,'Co_90_90','Plant and control complexes',#10974,$,$);
+#10988=IFCCLASSIFICATIONREFERENCE($,'Co_90_90_50','Multiple services plant and equipment complexes',#10987,$,$);
+#10989=IFCCLASSIFICATIONREFERENCE($,'TE_10','Formwork',#9,$,$);
+#10990=IFCCLASSIFICATIONREFERENCE($,'TE_10_10','Wall and floor formwork systems',#10989,$,$);
+#10991=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20','Face contact material',#10990,$,$);
+#10992=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_07','Beam boxes',#10991,$,$);
+#10993=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_24','Draw forms',#10991,$,$);
+#10994=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_30','Formwork lining',#10991,$,$);
+#10995=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_31','Formwork panels',#10991,$,$);
+#10996=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_46','Lap plates',#10991,$,$);
+#10997=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_85','Stop end forms',#10991,$,$);
+#10998=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_20_97','Wrecking strips',#10991,$,$);
+#10999=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_50','Structural members',#10990,$,$);
+#11000=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_50_85','Strongbacks',#10999,$,$);
+#11001=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_50_96','Walers',#10999,$,$);
+#11002=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_70','Box-outs',#10990,$,$);
+#11003=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_70_16','Core forms',#11002,$,$);
+#11004=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_70_23','Door formers',#11002,$,$);
+#11005=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_70_94','Void forms',#11002,$,$);
+#11006=IFCCLASSIFICATIONREFERENCE($,'TE_10_10_70_96','Window formers',#11002,$,$);
+#11007=IFCCLASSIFICATIONREFERENCE($,'TE_10_40','Form laying equipment, sheets and accessories',#10989,$,$);
+#11008=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_20','Clamps',#11007,$,$);
+#11009=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_20_07','Beam shutter clamps',#11008,$,$);
+#11010=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_20_16','Column shutter clamps',#11008,$,$);
+#11011=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_20_60','Panel clamps',#11008,$,$);
+#11012=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_20_96','Wall shutter clamps',#11008,$,$);
+#11013=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30','Formwork ties',#11007,$,$);
+#11014=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_16','Coil ties',#11013,$,$);
+#11015=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_36','Hanger ties',#11013,$,$);
+#11016=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_64','Pigtail ties',#11013,$,$);
+#11017=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_80','Snap ties',#11013,$,$);
+#11018=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_87','Taper ties',#11013,$,$);
+#11019=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_89','Tie sleeves',#11013,$,$);
+#11020=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_90','Through ties',#11013,$,$);
+#11021=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_30_96','Water bar ties',#11013,$,$);
+#11022=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_55','Formwork',#11007,$,$);
+#11023=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_55_72','Road forms',#11022,$,$);
+#11024=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_55_77','Sheeting',#11022,$,$);
+#11025=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_55_79','Shuttering',#11022,$,$);
+#11026=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_55_96','Wrot',#11022,$,$);
+#11027=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_75','Formwork supports',#11007,$,$);
+#11028=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_75_87','Telescopic floor centres',#11027,$,$);
+#11029=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_75_89','Telescopic props',#11027,$,$);
+#11030=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_85','Formwork accessories',#11007,$,$);
+#11031=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_85_01','Access doors',#11030,$,$);
+#11032=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_85_03','Access traps',#11030,$,$);
+#11033=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_85_45','Keys',#11030,$,$);
+#11034=IFCCLASSIFICATIONREFERENCE($,'TE_10_40_85_96','Formwork wedges',#11030,$,$);
+#11035=IFCCLASSIFICATIONREFERENCE($,'TE_20','Scaffolding, access, shoring and screening',#9,$,$);
+#11036=IFCCLASSIFICATIONREFERENCE($,'TE_20_10','Complete scaffolding',#11035,$,$);
+#11037=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_10','Access towers and platforms',#11036,$,$);
+#11038=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_10_46','Ladder towers',#11037,$,$);
+#11039=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_10_52','Mobile working towers',#11037,$,$);
+#11040=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_10_85','Stair towers',#11037,$,$);
+#11041=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_10_86','Suspended work platforms',#11037,$,$);
+#11042=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_50','Prefabricated scaffold',#11036,$,$);
+#11043=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_50_31','Frame scaffold',#11042,$,$);
+#11044=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_50_86','System scaffold',#11042,$,$);
+#11045=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60','Scaffolding',#11036,$,$);
+#11046=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_08','Bracket scaffold',#11045,$,$);
+#11047=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_11','Cantilevered scaffold',#11045,$,$);
+#11048=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_29','Facade scaffold',#11045,$,$);
+#11049=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_31','Free-standing scaffold',#11045,$,$);
+#11050=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_68','Putlog scaffold',#11045,$,$);
+#11051=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_85','Suspended scaffold',#11045,$,$);
+#11052=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_88','Timber scaffold',#11045,$,$);
+#11053=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_90','Trestle scaffold',#11045,$,$);
+#11054=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_60_91','Tube and coupler scaffold',#11045,$,$);
+#11055=IFCCLASSIFICATIONREFERENCE($,'TE_20_10_90','Temporary protection scaffold',#11036,$,$);
+#11056=IFCCLASSIFICATIONREFERENCE($,'TE_20_30','Scaffolding parts',#11035,$,$);
+#11057=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_10','Access ways',#11056,$,$);
+#11058=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_20','Cages',#11056,$,$);
+#11059=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_30','Guardrails',#11056,$,$);
+#11060=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_30_35','Guardboards',#11059,$,$);
+#11061=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_30_41','Intermediate guardrails',#11059,$,$);
+#11062=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_30_89','Toe boards',#11059,$,$);
+#11063=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40','Frames and framing members',#11056,$,$);
+#11064=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_46','Lateral braces',#11063,$,$);
+#11065=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_48','Longitudinal braces',#11063,$,$);
+#11066=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_59','Outriggers',#11063,$,$);
+#11067=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_64','Plan braces',#11063,$,$);
+#11068=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_68','Putlogs',#11063,$,$);
+#11069=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_85','Standards',#11063,$,$);
+#11070=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_40_90','Transoms',#11063,$,$);
+#11071=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50','Scaffold fittings',#11056,$,$);
+#11072=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_03','Anchorages',#11071,$,$);
+#11073=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_06','Baseplates',#11071,$,$);
+#11074=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_28','Expanding spigots',#11071,$,$);
+#11075=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_48','Loose spigots',#11071,$,$);
+#11076=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_60','Parallel couplers',#11071,$,$);
+#11077=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_68','Putlog clips',#11071,$,$);
+#11078=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_72','Right angle couplers',#11071,$,$);
+#11079=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_80','Sleeve couplers',#11071,$,$);
+#11080=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_86','Swivel couplers',#11071,$,$);
+#11081=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_50_88','Tie members',#11071,$,$);
+#11082=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_60','Stabilizers',#11056,$,$);
+#11083=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_60_06','Ballast',#11082,$,$);
+#11084=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_70','Protection screens',#11056,$,$);
+#11085=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_70_78','Sheeting',#11084,$,$);
+#11086=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_80','Work platforms',#11056,$,$);
+#11087=IFCCLASSIFICATIONREFERENCE($,'TE_20_30_80_01','Adjustable platforms',#11086,$,$);
+#11088=IFCCLASSIFICATIONREFERENCE($,'TE_20_40','Access equipment',#11035,$,$);
+#11089=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10','Ladders and steps',#11088,$,$);
+#11090=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_03','A-frame ladders',#11089,$,$);
+#11091=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_28','Extension ladders',#11089,$,$);
+#11092=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_38','Hop-up steps',#11089,$,$);
+#11093=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_64','Platform step ladders',#11089,$,$);
+#11094=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_66','Podium ladders',#11089,$,$);
+#11095=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_85','Swing-back step ladders',#11089,$,$);
+#11096=IFCCLASSIFICATIONREFERENCE($,'TE_20_40_10_88','Telescopic ladders',#11089,$,$);
+#11097=IFCCLASSIFICATIONREFERENCE($,'TE_20_50','Shoring, planking and strutting',#11035,$,$);
+#11098=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65','Shoring and planking',#11097,$,$);
+#11099=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_06','Baulk timbers',#11098,$,$);
+#11100=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_15','Cleats',#11098,$,$);
+#11101=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_23','Dogs',#11098,$,$);
+#11102=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_30','Folding wedges',#11098,$,$);
+#11103=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_37','Horizontal shores',#11098,$,$);
+#11104=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_56','Needles',#11098,$,$);
+#11105=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_65','Planking timbers',#11098,$,$);
+#11106=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_81','Shoring wedges',#11098,$,$);
+#11107=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_83','Sole plates',#11098,$,$);
+#11108=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_85','Straining pieces',#11098,$,$);
+#11109=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_65_96','Wall plates',#11098,$,$);
+#11110=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_75','Struts',#11097,$,$);
+#11111=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_75_02','Adjustable struts',#11110,$,$);
+#11112=IFCCLASSIFICATIONREFERENCE($,'TE_20_50_75_75','Strutting timbers',#11110,$,$);
+#11113=IFCCLASSIFICATIONREFERENCE($,'TE_20_80','Temporary screening structures',#11035,$,$);
+#11114=IFCCLASSIFICATIONREFERENCE($,'TE_20_80_80','Temporary hoardings',#11113,$,$);
+#11115=IFCCLASSIFICATIONREFERENCE($,'TE_20_80_80_28','External temporary hoardings',#11114,$,$);
+#11116=IFCCLASSIFICATIONREFERENCE($,'TE_20_80_80_41','Internal temporary hoardings',#11114,$,$);
+#11117=IFCCLASSIFICATIONREFERENCE($,'TE_20_90','Tube straightening equipment',#11035,$,$);
+#11118=IFCCLASSIFICATIONREFERENCE($,'TE_30','Lifting appliances and conveyors',#9,$,$);
+#11119=IFCCLASSIFICATIONREFERENCE($,'TE_30_10','Cranes',#11118,$,$);
+#11120=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10','Crane structures',#11119,$,$);
+#11121=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_01','Aerial cranes',#11120,$,$);
+#11122=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_03','All-terrain (AT) cranes',#11120,$,$);
+#11123=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_18','Crawler cranes',#11120,$,$);
+#11124=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_30','Floating cranes',#11120,$,$);
+#11125=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_44','Jib cranes',#11120,$,$);
+#11126=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_47','Level luffing cranes',#11120,$,$);
+#11127=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_52','Mounted cranes',#11120,$,$);
+#11128=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_70','Railroad cranes',#11120,$,$);
+#11129=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_74','Rough terrain (RT) cranes',#11120,$,$);
+#11130=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_76','Self-erecting cranes',#11120,$,$);
+#11131=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_78','Sidelift cranes',#11120,$,$);
+#11132=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_88','Telescopic cranes',#11120,$,$);
+#11133=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_89','Tower cranes',#11120,$,$);
+#11134=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_10_91','Turret cranes',#11120,$,$);
+#11135=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50','Crane equipment',#11119,$,$);
+#11136=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_15','Concrete skips',#11135,$,$);
+#11137=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_22','Demolition balls',#11135,$,$);
+#11138=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_28','Excavating crane grabs',#11135,$,$);
+#11139=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_71','Rehandling crane grabs',#11135,$,$);
+#11140=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_74','Rubbish crane buckets',#11135,$,$);
+#11141=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_88','Tipping buckets',#11135,$,$);
+#11142=IFCCLASSIFICATIONREFERENCE($,'TE_30_10_50_89','Tower crane track',#11135,$,$);
+#11143=IFCCLASSIFICATIONREFERENCE($,'TE_30_30','Lifts, hoists and winches',#11118,$,$);
+#11144=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10','Construction lifts',#11143,$,$);
+#11145=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10_10','Lift bottom and landing gates',#11144,$,$);
+#11146=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10_40','Lift cages',#11144,$,$);
+#11147=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10_50','Lifting machinery',#11144,$,$);
+#11148=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10_60','Lift platforms',#11144,$,$);
+#11149=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_10_80','Lift safety limiters',#11144,$,$);
+#11150=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40','Hoists',#11143,$,$);
+#11151=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40_10','Lorry loaders',#11150,$,$);
+#11152=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40_40','Mobile hoists',#11150,$,$);
+#11153=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40_60','Rack and pinion dual-use hoists',#11150,$,$);
+#11154=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40_70','Rack and pinion single-use hoists',#11150,$,$);
+#11155=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_40_80','Scaffold hoists',#11150,$,$);
+#11156=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60','Lifting platforms',#11143,$,$);
+#11157=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_10','Boom lifts',#11156,$,$);
+#11158=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_25','Mobile elevating work platforms (MEWPs)',#11156,$,$);
+#11159=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_40','Portable platforms',#11156,$,$);
+#11160=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_45','Push-around vertical (PAV) platforms',#11156,$,$);
+#11161=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_50','Self-propelled platforms',#11156,$,$);
+#11162=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_60','Scissor lifts',#11156,$,$);
+#11163=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_70','Telescopic platforms',#11156,$,$);
+#11164=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_80','Trailer mounted platforms',#11156,$,$);
+#11165=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_60_90','Vehicle mounted platforms',#11156,$,$);
+#11166=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_80','Lifting trucks',#11143,$,$);
+#11167=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_80_30','Lift trucks',#11166,$,$);
+#11168=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_80_50','Manual lift trucks',#11166,$,$);
+#11169=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_80_70','Portal lift trucks',#11166,$,$);
+#11170=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_90','Winches',#11143,$,$);
+#11171=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_90_10','Double drum friction winches',#11170,$,$);
+#11172=IFCCLASSIFICATIONREFERENCE($,'TE_30_30_90_70','Single drum winches',#11170,$,$);
+#11173=IFCCLASSIFICATIONREFERENCE($,'TE_30_50','Conveying equipment',#11118,$,$);
+#11174=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10','Conveyors',#11173,$,$);
+#11175=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_03','Apron conveyors',#11174,$,$);
+#11176=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_05','Auger conveyors',#11174,$,$);
+#11177=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_10','Bucket conveyors',#11174,$,$);
+#11178=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_15','Conveyor belts',#11174,$,$);
+#11179=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_29','Factory conveyors',#11174,$,$);
+#11180=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_47','Link conveyors',#11174,$,$);
+#11181=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_85','Steep incline conveyors',#11174,$,$);
+#11182=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_94','Vibrators for material conveying',#11174,$,$);
+#11183=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_10_96','Weighing conveyors',#11174,$,$);
+#11184=IFCCLASSIFICATIONREFERENCE($,'TE_30_50_20','Bucket railways',#11173,$,$);
+#11185=IFCCLASSIFICATIONREFERENCE($,'TE_30_70','Lifting and jacking gear',#11118,$,$);
+#11186=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_10','Pipe winches',#11185,$,$);
+#11187=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_10_33','Gantry pipe winches',#11186,$,$);
+#11188=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_10_78','Shear legs pipe winches',#11186,$,$);
+#11189=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_40','Jacks',#11185,$,$);
+#11190=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_40_11','Cable drum jacks',#11189,$,$);
+#11191=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_40_39','Hydraulic jacks',#11189,$,$);
+#11192=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_40_60','Pallet jacks',#11189,$,$);
+#11193=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_40_70','Ratchet jacks',#11189,$,$);
+#11194=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50','Lifting mechanisms',#11185,$,$);
+#11195=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_12','Chain blocks',#11194,$,$);
+#11196=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_14','Lifting chains',#11194,$,$);
+#11197=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_45','Lifting levers',#11194,$,$);
+#11198=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_60','Pull lifts',#11194,$,$);
+#11199=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_70','Lifting ropes',#11194,$,$);
+#11200=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_80','Slings and brothers',#11194,$,$);
+#11201=IFCCLASSIFICATIONREFERENCE($,'TE_30_70_50_95','Lifting wires',#11194,$,$);
+#11202=IFCCLASSIFICATIONREFERENCE($,'TE_40','Construction vehicles',#9,$,$);
+#11203=IFCCLASSIFICATIONREFERENCE($,'TE_40_10','Lorries and trucks',#11202,$,$);
+#11204=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_10','Dumper trucks',#11203,$,$);
+#11205=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_10_04','Articulated dumpers',#11204,$,$);
+#11206=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_10_71','Rigid dumpers',#11204,$,$);
+#11207=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_50','Lorries',#11203,$,$);
+#11208=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_50_04','Articulated lorries',#11207,$,$);
+#11209=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_50_30','Fixed body lorries',#11207,$,$);
+#11210=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_50_36','Haulers',#11207,$,$);
+#11211=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_50_63','Pickup trucks',#11207,$,$);
+#11212=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70','Tipper lorries',#11203,$,$);
+#11213=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_31','Front tippers',#11212,$,$);
+#11214=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_34','Gravity tippers',#11212,$,$);
+#11215=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_39','Hydraulic tippers',#11212,$,$);
+#11216=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_55','Multi-bucket tippers',#11212,$,$);
+#11217=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_71','Rear tippers',#11212,$,$);
+#11218=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_73','Rolling tippers',#11212,$,$);
+#11219=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_78','Side tippers',#11212,$,$);
+#11220=IFCCLASSIFICATIONREFERENCE($,'TE_40_10_70_88','Three-way tippers',#11212,$,$);
+#11221=IFCCLASSIFICATIONREFERENCE($,'TE_40_30','Tractors and equipment',#11202,$,$);
+#11222=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_10','Tractors',#11221,$,$);
+#11223=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_10_03','Agricultural-type tractors',#11222,$,$);
+#11224=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_10_87','Tractors with angle dozer',#11222,$,$);
+#11225=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_10_88','Tractors with bull dozer',#11222,$,$);
+#11226=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_10_89','Tractors with dozer and ripper attachment',#11222,$,$);
+#11227=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_30','Tractor equipment',#11221,$,$);
+#11228=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_30_30','Four-in-one attachments',#11227,$,$);
+#11229=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70','Vehicle superstructures and trailers',#11221,$,$);
+#11230=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70_37','Heavy-duty trailers',#11229,$,$);
+#11231=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70_47','Low loaders',#11229,$,$);
+#11232=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70_78','Semi-trailers',#11229,$,$);
+#11233=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70_79','Silo vehicles',#11229,$,$);
+#11234=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_70_88','Tipping trailers',#11229,$,$);
+#11235=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_80','Vehicle equipment',#11221,$,$);
+#11236=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_80_79','Shuttle trains',#11235,$,$);
+#11237=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_80_88','Tipper chassis',#11235,$,$);
+#11238=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_80_90','Truck chassis for vehicle superstructures',#11235,$,$);
+#11239=IFCCLASSIFICATIONREFERENCE($,'TE_40_30_80_91','Turntable skips',#11235,$,$);
+#11240=IFCCLASSIFICATIONREFERENCE($,'TE_40_50','Service vehicles',#11202,$,$);
+#11241=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_50','Water supply vehicles and equipment',#11240,$,$);
+#11242=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_50_77','Self-propelled water tankers',#11241,$,$);
+#11243=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_50_96','Water storage tank trailers',#11241,$,$);
+#11244=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_60','Fuel supply vehicles and equipment',#11240,$,$);
+#11245=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_60_32','Fuel storage tank trailers',#11244,$,$);
+#11246=IFCCLASSIFICATIONREFERENCE($,'TE_40_50_60_77','Self-propelled fuel tankers',#11244,$,$);
+#11247=IFCCLASSIFICATIONREFERENCE($,'TE_40_70','Excavators, loaders and dredgers',#11202,$,$);
+#11248=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10','Dozers and graders',#11247,$,$);
+#11249=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_03','Angling dozers',#11248,$,$);
+#11250=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_18','Crawler dozers',#11248,$,$);
+#11251=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_52','Motor graders',#11248,$,$);
+#11252=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_73','Road graders',#11248,$,$);
+#11253=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_85','Straight dozers',#11248,$,$);
+#11254=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_90','Tracked dozers',#11248,$,$);
+#11255=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_10_96','Wheeled dozers',#11248,$,$);
+#11256=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20','Dredging boats and equipment',#11247,$,$);
+#11257=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_04','Armoured pumps',#11256,$,$);
+#11258=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_09','Bucket chain dredgers',#11256,$,$);
+#11259=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_10','Backhoe dredgers',#11256,$,$);
+#11260=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_19','Cutter dredgers',#11256,$,$);
+#11261=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_34','Grab-type dredgers',#11256,$,$);
+#11262=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_20_84','Suction dredgers',#11256,$,$);
+#11263=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30','Excavators',#11247,$,$);
+#11264=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_07','Boom-type trenching machines',#11263,$,$);
+#11265=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_09','Bucket trenchers',#11263,$,$);
+#11266=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_10','Bucket wheel excavators',#11263,$,$);
+#11267=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_11','Cable mobile excavators',#11263,$,$);
+#11268=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_12','Cable track excavators',#11263,$,$);
+#11269=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_32','Full circle slew excavators',#11263,$,$);
+#11270=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_36','Highway trenchers',#11263,$,$);
+#11271=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_38','Hydraulic mobile excavators',#11263,$,$);
+#11272=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_39','Hydraulic track-laying excavators',#11263,$,$);
+#11273=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_52','Mini excavators',#11263,$,$);
+#11274=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_64','Pipe layers',#11263,$,$);
+#11275=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_72','Rope operated excavators',#11263,$,$);
+#11276=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_30_88','Telescopic excavators',#11263,$,$);
+#11277=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40','Loaders',#11247,$,$);
+#11278=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_07','Backhoe loaders',#11277,$,$);
+#11279=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_18','Crawler loaders',#11277,$,$);
+#11280=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_22','Digging arm loaders',#11277,$,$);
+#11281=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_79','Skid steer loaders',#11277,$,$);
+#11282=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_90','Track-laying loaders',#11277,$,$);
+#11283=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_40_97','Wheel loaders',#11277,$,$);
+#11284=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50','Scrapers',#11247,$,$);
+#11285=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_24','Drag scrapers',#11284,$,$);
+#11286=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_27','Elevating scrapers',#11284,$,$);
+#11287=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_30','Four-wheeled scrapers',#11284,$,$);
+#11288=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_52','Motorized scrapers',#11284,$,$);
+#11289=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_53','Motorized elevating scrapers',#11284,$,$);
+#11290=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_50_90','Track-laying scrapers',#11284,$,$);
+#11291=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90','Attachments for excavators, loaders, dozers and scrapers',#11247,$,$);
+#11292=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_06','Back actors',#11291,$,$);
+#11293=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_24','Draglines',#11291,$,$);
+#11294=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_28','Excavator mats',#11291,$,$);
+#11295=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_29','Face shovels',#11291,$,$);
+#11296=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_37','Hinge-type rippers',#11291,$,$);
+#11297=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_60','Parallelogram-type rippers',#11291,$,$);
+#11298=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_63','Percussion breakers',#11291,$,$);
+#11299=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_90','Trenchers',#11291,$,$);
+#11300=IFCCLASSIFICATIONREFERENCE($,'TE_40_70_90_94','Variable geometry rippers',#11291,$,$);
+#11301=IFCCLASSIFICATIONREFERENCE($,'TE_50','Tunnelling, drilling and compaction equipment',#9,$,$);
+#11302=IFCCLASSIFICATIONREFERENCE($,'TE_50_10','Tunnelling and shaft machines',#11301,$,$);
+#11303=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_10','Blasting equipment',#11302,$,$);
+#11304=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_10_23','Detonators',#11303,$,$);
+#11305=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_10_28','Explosives',#11303,$,$);
+#11306=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_20','Cutting machines',#11302,$,$);
+#11307=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_20_60','Partial cutting machines',#11306,$,$);
+#11308=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_20_88','Thrust boring equipment',#11306,$,$);
+#11309=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_30','Drilling vehicles',#11302,$,$);
+#11310=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_40','Explosives vehicles',#11302,$,$);
+#11311=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_70','Rough press equipment',#11302,$,$);
+#11312=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_80','Shields',#11302,$,$);
+#11313=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_80_20','Cutter shields',#11312,$,$);
+#11314=IFCCLASSIFICATIONREFERENCE($,'TE_50_10_80_91','Tunnel shields',#11312,$,$);
+#11315=IFCCLASSIFICATIONREFERENCE($,'TE_50_20','Drilling, piling and canal trimming equipment',#11301,$,$);
+#11316=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10','Drilling machines and plant',#11315,$,$);
+#11317=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_15','Core cutting machines',#11316,$,$);
+#11318=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_36','Hammer-action drills',#11316,$,$);
+#11319=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_63','Pile drilling machines',#11316,$,$);
+#11320=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_65','Post and mast hole drilling machines',#11316,$,$);
+#11321=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_66','Pressure drilling machines',#11316,$,$);
+#11322=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_80','Soil exploration drilling machines',#11316,$,$);
+#11323=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_86','Suction drilling systems',#11316,$,$);
+#11324=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_10_97','Well drilling systems',#11316,$,$);
+#11325=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20','Pile drivers and pulling tools',#11315,$,$);
+#11326=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_21','Diesel hammers',#11325,$,$);
+#11327=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_22','Double-acting piling hammers',#11325,$,$);
+#11328=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_23','Drop hammers',#11325,$,$);
+#11329=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_28','Extractors',#11325,$,$);
+#11330=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_42','Impulse hammers',#11325,$,$);
+#11331=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_43','Internal drop hammers',#11325,$,$);
+#11332=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_94','Vibrating extractors',#11325,$,$);
+#11333=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_20_95','Vibrating hammers',#11325,$,$);
+#11334=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_30','Auger piling plant',#11315,$,$);
+#11335=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_30_15','Continuous flight augers',#11334,$,$);
+#11336=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_30_23','Displacement augers',#11334,$,$);
+#11337=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_40','Piling accessories',#11315,$,$);
+#11338=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_40_23','Dollies',#11337,$,$);
+#11339=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_40_36','Hanging leaders',#11337,$,$);
+#11340=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_40_64','Pile helmets',#11337,$,$);
+#11341=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60','Canal sheeting equipment',#11315,$,$);
+#11342=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_02','Adjustable steel trench struts',#11341,$,$);
+#11343=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_11','Canal sheeting',#11341,$,$);
+#11344=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_12','Canal shoring',#11341,$,$);
+#11345=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_80','Sliding-blade sheeting',#11341,$,$);
+#11346=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_85','Steel trench sheets',#11341,$,$);
+#11347=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_90','Trench ring lifters',#11341,$,$);
+#11348=IFCCLASSIFICATIONREFERENCE($,'TE_50_20_60_91','Trench struts and sheets',#11341,$,$);
+#11349=IFCCLASSIFICATIONREFERENCE($,'TE_50_30','Compaction equipment',#11301,$,$);
+#11350=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10','Rollers',#11349,$,$);
+#11351=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_15','Combination vibration rollers',#11350,$,$);
+#11352=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_23','Double vibrating rollers',#11350,$,$);
+#11353=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_60','Pavement rollers',#11350,$,$);
+#11354=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_65','Pneumatic tyre rollers',#11350,$,$);
+#11355=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_72','Roller trains',#11350,$,$);
+#11356=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_77','Sheepsfoot rollers',#11350,$,$);
+#11357=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_79','Single rollers',#11350,$,$);
+#11358=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_85','Static three-wheeled and tandem rollers',#11350,$,$);
+#11359=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_87','Tandem vibrating rollers',#11350,$,$);
+#11360=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_89','Trailer vibration rollers',#11350,$,$);
+#11361=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_10_91','Twin rollers with seat and steering wheel',#11350,$,$);
+#11362=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_40','Rammers',#11349,$,$);
+#11363=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_40_44','Jumping rammers',#11362,$,$);
+#11364=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_40_94','Vibration rammers',#11362,$,$);
+#11365=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_60','Soil compactors',#11349,$,$);
+#11366=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_60_36','Hand tampers',#11365,$,$);
+#11367=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_60_65','Plate compactors',#11365,$,$);
+#11368=IFCCLASSIFICATIONREFERENCE($,'TE_50_30_60_77','Sheepsfoot compactors',#11365,$,$);
+#11369=IFCCLASSIFICATIONREFERENCE($,'TE_50_40','Road construction equipment',#11301,$,$);
+#11370=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_10','Soil stabilization machines',#11369,$,$);
+#11371=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_20','Concrete road finishers and spreaders',#11369,$,$);
+#11372=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30','Asphalt, mastic and tar preparation equipment',#11369,$,$);
+#11373=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30_04','Asphalt road finishers',#11372,$,$);
+#11374=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30_37','Heatable bitumen storage tanks',#11372,$,$);
+#11375=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30_50','Mastic finishers',#11372,$,$);
+#11376=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30_87','Tar and mastic heaters',#11372,$,$);
+#11377=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_30_88','Tar sprayers',#11372,$,$);
+#11378=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_40','Spreaders',#11369,$,$);
+#11379=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_40_04','Asphalt spreaders',#11378,$,$);
+#11380=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_40_15','Coated asphalt spreaders',#11378,$,$);
+#11381=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_40_80','Spreaders for soil stabilization',#11378,$,$);
+#11382=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_40_85','Stone spreaders',#11378,$,$);
+#11383=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_50','Joint cutters',#11369,$,$);
+#11384=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_50_44','Joint formers',#11383,$,$);
+#11385=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_50_45','Joint matchers',#11383,$,$);
+#11386=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_60','Road milling cutters',#11369,$,$);
+#11387=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_70','Road drying equipment',#11369,$,$);
+#11388=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_70_33','Gas infrared road-drying equipment',#11387,$,$);
+#11389=IFCCLASSIFICATIONREFERENCE($,'TE_50_40_80','Paving stone laying machines',#11369,$,$);
+#11390=IFCCLASSIFICATIONREFERENCE($,'TE_50_50','Canal bank grading, compacting, concreting and asphalting machinery, canal bed cleaning machines',#11301,$,$);
+#11391=IFCCLASSIFICATIONREFERENCE($,'TE_50_60','Rail track maintenance machines',#11301,$,$);
+#11392=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_06','Ballast maintenance machines',#11391,$,$);
+#11393=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_06_13','Ballast cleaners',#11392,$,$);
+#11394=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_06_71','Ballast regulators',#11392,$,$);
+#11395=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_06_88','Ballast tampers',#11392,$,$);
+#11396=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_25','Dynamic track stabilizers',#11391,$,$);
+#11397=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_59','Overhead wiring machines',#11391,$,$);
+#11398=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_71','Rail maintenance machines',#11391,$,$);
+#11399=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_71_35','Rail grinders',#11398,$,$);
+#11400=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_71_36','Rail handlers',#11398,$,$);
+#11401=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_71_51','Rail manipulators',#11398,$,$);
+#11402=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_79','Track maintenance shunting vehicles',#11391,$,$);
+#11403=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_88','Tie bed scarifiers',#11391,$,$);
+#11404=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_90','Track maintenance machines',#11391,$,$);
+#11405=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_90_44','Track jacks',#11404,$,$);
+#11406=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_90_46','Track layers',#11404,$,$);
+#11407=IFCCLASSIFICATIONREFERENCE($,'TE_50_60_90_72','Track recording vehicles',#11404,$,$);
+#11408=IFCCLASSIFICATIONREFERENCE($,'TE_50_70','Machines for road repair and maintenance',#11301,$,$);
+#11409=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_10','Asphalt pavement equipment',#11408,$,$);
+#11410=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_10_04','Asphalt pavement recycling machines',#11409,$,$);
+#11411=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_10_05','Asphalt pavement reshapers',#11409,$,$);
+#11412=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_10_15','Cold planers',#11409,$,$);
+#11413=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_10_72','Road surface rippers',#11409,$,$);
+#11414=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_20','Joint cleaning and filling machines',#11408,$,$);
+#11415=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_30','Repair kits',#11408,$,$);
+#11416=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_30_03','Asphalt repair kits',#11415,$,$);
+#11417=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_30_65','Pothole repair kits',#11415,$,$);
+#11418=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_40','Stone and sand spreaders',#11408,$,$);
+#11419=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_50','Road marking machines',#11408,$,$);
+#11420=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_60','Sweeping machines',#11408,$,$);
+#11421=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_60_72','Road sweepers with gully emptiers',#11420,$,$);
+#11422=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_60_77','Self-propelled road cleaners',#11420,$,$);
+#11423=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_60_79','Self-propelled road sweepers',#11420,$,$);
+#11424=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_70','Slope mowing machines',#11408,$,$);
+#11425=IFCCLASSIFICATIONREFERENCE($,'TE_50_70_80','Scarifiers',#11408,$,$);
+#11426=IFCCLASSIFICATIONREFERENCE($,'TE_60','Concrete and stone production',#9,$,$);
+#11427=IFCCLASSIFICATIONREFERENCE($,'TE_60_10','Complete plant',#11426,$,$);
+#11428=IFCCLASSIFICATIONREFERENCE($,'TE_60_10_10','Complete plant for the cement, lime, gypsum, trass and chalk industry',#11427,$,$);
+#11429=IFCCLASSIFICATIONREFERENCE($,'TE_60_10_50','Complete plant for the sand, clay, gravel and broken stone industry',#11427,$,$);
+#11430=IFCCLASSIFICATIONREFERENCE($,'TE_60_20','Breakers, crushers and mills',#11426,$,$);
+#11431=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15','Breakers and crushers',#11430,$,$);
+#11432=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_08','Brick crushers',#11431,$,$);
+#11433=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_35','Gyratory crushers',#11431,$,$);
+#11434=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_36','Hammer crushers',#11431,$,$);
+#11435=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_42','Impact-type crushers',#11431,$,$);
+#11436=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_72','Roller crushers',#11431,$,$);
+#11437=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_15_84','Stone breakers',#11431,$,$);
+#11438=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80','Grinding mills',#11430,$,$);
+#11439=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80_36','Hammer mills',#11438,$,$);
+#11440=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80_42','Impact mills',#11438,$,$);
+#11441=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80_72','Roller mills',#11438,$,$);
+#11442=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80_91','Tube mills',#11438,$,$);
+#11443=IFCCLASSIFICATIONREFERENCE($,'TE_60_20_80_94','Vibrating grinding mills',#11438,$,$);
+#11444=IFCCLASSIFICATIONREFERENCE($,'TE_60_30','Screening and sorting plant',#11426,$,$);
+#11445=IFCCLASSIFICATIONREFERENCE($,'TE_60_30_80','Vibrating screens',#11444,$,$);
+#11446=IFCCLASSIFICATIONREFERENCE($,'TE_60_30_80_14','Circular vibratory screens',#11445,$,$);
+#11447=IFCCLASSIFICATIONREFERENCE($,'TE_60_30_80_26','Eccentric vibratory screens',#11445,$,$);
+#11448=IFCCLASSIFICATIONREFERENCE($,'TE_60_30_80_46','Linear vibratory screens',#11445,$,$);
+#11449=IFCCLASSIFICATIONREFERENCE($,'TE_60_40','Cleaning and storage plant',#11426,$,$);
+#11450=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_05','Aggregate washing machines',#11449,$,$);
+#11451=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_10','Drying installations for stone and aggregates',#11449,$,$);
+#11452=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_20','Dust extraction plant',#11449,$,$);
+#11453=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_30','Recycling plant for construction debris',#11449,$,$);
+#11454=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_40','Silos',#11449,$,$);
+#11455=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_40_78','Aggregate silos',#11454,$,$);
+#11456=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_40_79','Cement silos',#11454,$,$);
+#11457=IFCCLASSIFICATIONREFERENCE($,'TE_60_40_50','Stackers and reclaimers',#11449,$,$);
+#11458=IFCCLASSIFICATIONREFERENCE($,'TE_60_60','Concrete plant and equipment',#11426,$,$);
+#11459=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10','Concrete and mortar mixers',#11458,$,$);
+#11460=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_13','Closed drum mixers',#11459,$,$);
+#11461=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_15','Concrete processing systems',#11459,$,$);
+#11462=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_16','Concrete processing systems with horizontal aggregate feed',#11459,$,$);
+#11463=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_17','Concrete processing systems with vertical aggregate feed',#11459,$,$);
+#11464=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_36','Hand scrapers',#11459,$,$);
+#11465=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_51','Metering and weighing equipment',#11459,$,$);
+#11466=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_58','Open drum mixers with hopper',#11459,$,$);
+#11467=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_59','Open drum mixers without hopper',#11459,$,$);
+#11468=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_71','Reversing drum mixers with hopper, weigher and feed shovel',#11459,$,$);
+#11469=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_73','Rotary mixers',#11459,$,$);
+#11470=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_10_88','Tilting drum mixers',#11459,$,$);
+#11471=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20','Concrete and mortar transportation equipment',#11458,$,$);
+#11472=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_15','Concrete agitators',#11471,$,$);
+#11473=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_16','Concrete and mortar buckets',#11471,$,$);
+#11474=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_17','Concrete pumps and equipment',#11471,$,$);
+#11475=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_18','Concrete truck mixers',#11471,$,$);
+#11476=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_47','Lorry-mounted concrete pumps with boom',#11471,$,$);
+#11477=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_53','Mobile mixers',#11471,$,$);
+#11478=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_54','Mortar pumps',#11471,$,$);
+#11479=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_20_76','Screed pumps',#11471,$,$);
+#11480=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_30','Attachments for concrete and mortar plant',#11458,$,$);
+#11481=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_30_02','Aggregate feed aprons',#11480,$,$);
+#11482=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_30_65','Power-driven loading shovels',#11480,$,$);
+#11483=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_40','Concrete piping',#11458,$,$);
+#11484=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_40_30','Flexible distributor hose',#11483,$,$);
+#11485=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_40_53','Mortar/ screed pump hoses',#11483,$,$);
+#11486=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_40_64','Pipe cleaning equipment',#11483,$,$);
+#11487=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_40_78','Shut-off pipe sections',#11483,$,$);
+#11488=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50','Batching plant',#11458,$,$);
+#11489=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_01','Aerated silos',#11488,$,$);
+#11490=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_05','Autofeed equipment',#11488,$,$);
+#11491=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_06','Batch loaders',#11488,$,$);
+#11492=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_27','Electronic weigh gear',#11488,$,$);
+#11493=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_39','Hydraulic cement weigh gear',#11488,$,$);
+#11494=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_48','Loading hoppers with weigh gear and loading shovel',#11488,$,$);
+#11495=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_50_76','Screw discharge gear',#11488,$,$);
+#11496=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60','Concrete and mortar application equipment',#11458,$,$);
+#11497=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60_16','Concrete guns',#11496,$,$);
+#11498=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60_17','Concrete injectors',#11496,$,$);
+#11499=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60_19','Concrete spreaders',#11496,$,$);
+#11500=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60_35','Gunite equipment',#11496,$,$);
+#11501=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_60_71','Rendering machines',#11496,$,$);
+#11502=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70','Concrete compaction and finishing equipment',#11458,$,$);
+#11503=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_15','Concrete curing duvets',#11502,$,$);
+#11504=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_28','External vibrators',#11502,$,$);
+#11505=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_41','Immersion vibrators',#11502,$,$);
+#11506=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_64','Power floats',#11502,$,$);
+#11507=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_65','Power trowels',#11502,$,$);
+#11508=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_76','Screed boards',#11502,$,$);
+#11509=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_85','Surface vibrators',#11502,$,$);
+#11510=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_70_87','Tamper vibrators',#11502,$,$);
+#11511=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80','Grouting equipment',#11458,$,$);
+#11512=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80_02','Agitating tanks for use with grout pumps',#11511,$,$);
+#11513=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80_33','Grout mixers',#11511,$,$);
+#11514=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80_34','Grouting machines with pump and hopper',#11511,$,$);
+#11515=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80_35','Grout pumps',#11511,$,$);
+#11516=IFCCLASSIFICATIONREFERENCE($,'TE_60_60_80_73','Roller-type grout mixers',#11511,$,$);
+#11517=IFCCLASSIFICATIONREFERENCE($,'TE_60_80','Stone quarrying and tooling equipment',#11426,$,$);
+#11518=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_10','Stone drilling machines',#11517,$,$);
+#11519=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_20','Stone cleaving machines and equipment',#11517,$,$);
+#11520=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_30','Stone sawing equipment',#11517,$,$);
+#11521=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_30_20','Cutting-out saws',#11520,$,$);
+#11522=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_30_71','Reciprocating sawing machines',#11520,$,$);
+#11523=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_40','Abrasive cutting off machines',#11517,$,$);
+#11524=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_50','Slab cutting machines and equipment',#11517,$,$);
+#11525=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_60','Milling machines',#11517,$,$);
+#11526=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_70','Sanding and polishing machines and lines',#11517,$,$);
+#11527=IFCCLASSIFICATIONREFERENCE($,'TE_60_80_80','Grouting machines for cast stone slabs',#11517,$,$);
+#11528=IFCCLASSIFICATIONREFERENCE($,'TE_70','Equipment and tools',#9,$,$);
+#11529=IFCCLASSIFICATIONREFERENCE($,'TE_70_10','Site accommodation and temporary services',#11528,$,$);
+#11530=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10','Site accommodation and fittings',#11529,$,$);
+#11531=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_16','Containers',#11530,$,$);
+#11532=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_51','Mess room fittings',#11530,$,$);
+#11533=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_53','Motor caravans',#11530,$,$);
+#11534=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_65','Portable toilet units',#11530,$,$);
+#11535=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_78','Site huts',#11530,$,$);
+#11536=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_80','Site office fittings',#11530,$,$);
+#11537=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_84','Static caravans',#11530,$,$);
+#11538=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_85','Site store fittings',#11530,$,$);
+#11539=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_10_90','Toilet vehicles and cabins',#11530,$,$);
+#11540=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_20','Installations and equipment for winter construction',#11529,$,$);
+#11541=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_20_16','Construction drying equipment',#11540,$,$);
+#11542=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_20_80','Space heaters',#11540,$,$);
+#11543=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_20_96','Watchman''s heaters',#11540,$,$);
+#11544=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_20_97','Water heaters',#11540,$,$);
+#11545=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_30','Site lighting equipment',#11529,$,$);
+#11546=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_30_64','Portable floodlights',#11545,$,$);
+#11547=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_30_85','Storm lamps',#11545,$,$);
+#11548=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_30_96','Warning lamps',#11545,$,$);
+#11549=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_30_97','Watchman''s lamps',#11545,$,$);
+#11550=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_40','Site electrical equipment',#11529,$,$);
+#11551=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_40_12','Cable laying machines and equipment',#11550,$,$);
+#11552=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_40_14','Cable stringing rollers',#11550,$,$);
+#11553=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_40_79','Site electrical distributors',#11550,$,$);
+#11554=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_50','Power generating units',#11529,$,$);
+#11555=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_50_50','Mobile power generating units',#11554,$,$);
+#11556=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_50_85','Stationary power generating units',#11554,$,$);
+#11557=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_60','Frequency and voltage transformers',#11529,$,$);
+#11558=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_70','Drainage equipment',#11529,$,$);
+#11559=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_70_24','Drainage rods',#11558,$,$);
+#11560=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_70_28','Expanding drain stoppers',#11558,$,$);
+#11561=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_80','Rubbish collection and disposal equipment',#11529,$,$);
+#11562=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_80_74','Rubbish chutes',#11561,$,$);
+#11563=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_80_79','Skips',#11561,$,$);
+#11564=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_90','Site ventilation and air conditioning equipment',#11529,$,$);
+#11565=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_90_22','Portable dehumidifiers',#11564,$,$);
+#11566=IFCCLASSIFICATIONREFERENCE($,'TE_70_10_90_32','Portable fans',#11564,$,$);
+#11567=IFCCLASSIFICATIONREFERENCE($,'TE_70_20','Site equipment',#11528,$,$);
+#11568=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10','Welding equipment',#11567,$,$);
+#11569=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_03','Aluminothermic rail welding equipment',#11568,$,$);
+#11570=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_22','Diesel welding sets',#11568,$,$);
+#11571=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_32','Fume extract units',#11568,$,$);
+#11572=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_37','Head screens',#11568,$,$);
+#11573=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_59','Oxy-acetylene cutting and welding sets',#11568,$,$);
+#11574=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_70','Rail welding cooling pump units',#11568,$,$);
+#11575=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_88','Thermic boring equipment',#11568,$,$);
+#11576=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_92','Underwater welding equipment',#11568,$,$);
+#11577=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_96','Welding electrodes',#11568,$,$);
+#11578=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_97','Weld shears',#11568,$,$);
+#11579=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_10_98','Welding helmets',#11568,$,$);
+#11580=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20','Protective equipment',#11567,$,$);
+#11581=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_01','Acoustic attenuators',#11580,$,$);
+#11582=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_03','Acoustic enclosures',#11580,$,$);
+#11583=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_05','Acoustic quilts',#11580,$,$);
+#11584=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_07','Acoustic shrouds',#11580,$,$);
+#11585=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_10','Breathing apparatus',#11580,$,$);
+#11586=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_34','Goggles',#11580,$,$);
+#11587=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_37','Hotsticks',#11580,$,$);
+#11588=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_62','Portable safety barriers',#11580,$,$);
+#11589=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_20_65','Protective nets',#11580,$,$);
+#11590=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25','Maintenance equipment',#11567,$,$);
+#11591=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_08','Brushcutters',#11590,$,$);
+#11592=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_34','Grease guns',#11590,$,$);
+#11593=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_37','Hedge trimmers',#11590,$,$);
+#11594=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_46','Lawnmowers',#11590,$,$);
+#11595=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_47','Leaf blowers',#11590,$,$);
+#11596=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_52','Mobile cyclone separators',#11590,$,$);
+#11597=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_53','Mobile dust extractors',#11590,$,$);
+#11598=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_55','Mulching machines',#11590,$,$);
+#11599=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_65','Pruning shears',#11590,$,$);
+#11600=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_85','Strimmers',#11590,$,$);
+#11601=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_90','Tool sharpeners',#11590,$,$);
+#11602=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_94','Vacuum cleaners',#11590,$,$);
+#11603=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_25_96','Wood chippers',#11590,$,$);
+#11604=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30','Roadworks equipment',#11567,$,$);
+#11605=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_06','Barrier trestles',#11604,$,$);
+#11606=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_18','Crossing plates',#11604,$,$);
+#11607=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_21','Danger lamps',#11604,$,$);
+#11608=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_30','Flashing bollards',#11604,$,$);
+#11609=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_31','Flashing traffic warning lamps',#11604,$,$);
+#11610=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_41','Illuminated traffic information signs',#11604,$,$);
+#11611=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_80','Speed deterrents',#11604,$,$);
+#11612=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_87','Traffic control lamps',#11604,$,$);
+#11613=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_88','Traffic control signs',#11604,$,$);
+#11614=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_89','Traffic information signs',#11604,$,$);
+#11615=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_90','Traffic lights',#11604,$,$);
+#11616=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_30_91','Traffic warning signs',#11604,$,$);
+#11617=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_35','Rail track equipment',#11567,$,$);
+#11618=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_35_70','Rail tensor kits',#11617,$,$);
+#11619=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_35_79','Spike drivers',#11617,$,$);
+#11620=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_35_80','Spike pullers',#11617,$,$);
+#11621=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_35_90','Temporary track support',#11617,$,$);
+#11622=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40','Damp-proof course equipment',#11567,$,$);
+#11623=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40_11','Caulking gun',#11622,$,$);
+#11624=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40_27','Electro-osmosis equipment',#11622,$,$);
+#11625=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40_34','Gravity feed equipment',#11622,$,$);
+#11626=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40_37','High-pressure injection equipment',#11622,$,$);
+#11627=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_40_48','Low-pressure injection equipment',#11622,$,$);
+#11628=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50','Cleaning and surface preparation equipment',#11567,$,$);
+#11629=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_08','Blasting cabinets',#11628,$,$);
+#11630=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_15','Cleaning brushes',#11628,$,$);
+#11631=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_37','High-pressure and steam jet cleaners',#11628,$,$);
+#11632=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_48','Low-pressure cleaning machines',#11628,$,$);
+#11633=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_56','Needle scalers',#11628,$,$);
+#11634=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_63','Portable abrasive blasting equipment',#11628,$,$);
+#11635=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_65','Pressure cleaner tanks',#11628,$,$);
+#11636=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_81','Soda blasting equipment',#11628,$,$);
+#11637=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_84','Steam cleaners',#11628,$,$);
+#11638=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_92','Underwater cleaning equipment',#11628,$,$);
+#11639=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_50_96','Water-absorbent pads and cushions',#11628,$,$);
+#11640=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_60','Compressors',#11567,$,$);
+#11641=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_60_47','Lorry-mounted compressors',#11640,$,$);
+#11642=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_60_90','Tractor-mounted compressors',#11640,$,$);
+#11643=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_70','Compressed air machines and equipment',#11567,$,$);
+#11644=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_70_02','Air hoses',#11643,$,$);
+#11645=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_70_15','Compressed air receivers',#11643,$,$);
+#11646=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_70_55','Mufflers',#11643,$,$);
+#11647=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_70_89','Tool silencers',#11643,$,$);
+#11648=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_80','Steel reinforcement cutting and bending plant and equipment',#11567,$,$);
+#11649=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_80_06','Bar bending machines',#11648,$,$);
+#11650=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_80_07','Bar cropper machines',#11648,$,$);
+#11651=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_80_08','Bar shearing machines',#11648,$,$);
+#11652=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_85','Pipe installation and maintenance equipment',#11567,$,$);
+#11653=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_85_40','Hydraulic pipe pushers',#11652,$,$);
+#11654=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_85_62','Pipe benders',#11652,$,$);
+#11655=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_85_63','Pipe cutters',#11652,$,$);
+#11656=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_85_66','Pipe threading equipment',#11652,$,$);
+#11657=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_90','Ancillary equipment',#11567,$,$);
+#11658=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_90_10','Buckets',#11657,$,$);
+#11659=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_90_22','Dehumidifiers',#11657,$,$);
+#11660=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_90_48','Loading rails',#11657,$,$);
+#11661=IFCCLASSIFICATIONREFERENCE($,'TE_70_20_90_87','Tarpaulins',#11657,$,$);
+#11662=IFCCLASSIFICATIONREFERENCE($,'TE_70_40','Surveying and measuring equipment',#11528,$,$);
+#11663=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10','Levels',#11662,$,$);
+#11664=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_05','Auto levels',#11663,$,$);
+#11665=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_25','Dumpy levels',#11663,$,$);
+#11666=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_27','Engineers'' precise auto levels',#11663,$,$);
+#11667=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_47','Levelling staffs',#11663,$,$);
+#11668=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_65','Prism sets',#11663,$,$);
+#11669=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_80','Spirit levels',#11663,$,$);
+#11670=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_88','Tilting levels',#11663,$,$);
+#11671=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_89','Theodolites',#11663,$,$);
+#11672=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_10_96','Water levels',#11663,$,$);
+#11673=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_27','Environmental measuring equipment',#11662,$,$);
+#11674=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_27_41','Infrared thermometers',#11673,$,$);
+#11675=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_41','Inspection cameras',#11662,$,$);
+#11676=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_41_25','Drain inspection cameras',#11675,$,$);
+#11677=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_41_30','Flexible borescopes',#11675,$,$);
+#11678=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_41_72','Rigid borescopes',#11675,$,$);
+#11679=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_41_89','Thermal imaging cameras',#11675,$,$);
+#11680=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50','Measuring equipment',#11662,$,$);
+#11681=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_06','Binoculars',#11680,$,$);
+#11682=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_08','Boning rods',#11680,$,$);
+#11683=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_22','Distance meters',#11680,$,$);
+#11684=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_31','Folding rules',#11680,$,$);
+#11685=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_37','Height sticks',#11680,$,$);
+#11686=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_46','Laser aligners',#11680,$,$);
+#11687=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_51','Measuring rods',#11680,$,$);
+#11688=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_52','Measuring tapes',#11680,$,$);
+#11689=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_53','Measuring wheels',#11680,$,$);
+#11690=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_54','Micrometers',#11680,$,$);
+#11691=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_64','Plumb lines',#11680,$,$);
+#11692=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_66','Profile boards',#11680,$,$);
+#11693=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_79','Sight rails',#11680,$,$);
+#11694=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_82','Sound level meters',#11680,$,$);
+#11695=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_87','Tachometers',#11680,$,$);
+#11696=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_50_94','Verniers',#11680,$,$);
+#11697=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70','Surveying equipment',#11662,$,$);
+#11698=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_13','Centring rods',#11697,$,$);
+#11699=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_22','Direction indicating devices',#11697,$,$);
+#11700=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_25','Drones',#11697,$,$);
+#11701=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_27','Electromagnetic distance measuring (EDM) instruments',#11697,$,$);
+#11702=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_51','Measuring telescopes',#11697,$,$);
+#11703=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_58','Optical plummets',#11697,$,$);
+#11704=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_70','Ranging poles',#11697,$,$);
+#11705=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_83','Staffs',#11697,$,$);
+#11706=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_85','Surface indicating devices',#11697,$,$);
+#11707=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_89','Tribrachs',#11697,$,$);
+#11708=IFCCLASSIFICATIONREFERENCE($,'TE_70_40_70_90','Tripods',#11697,$,$);
+#11709=IFCCLASSIFICATIONREFERENCE($,'TE_70_50','Hand tools',#11528,$,$);
+#11710=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_05','Hand tool batteries and chargers',#11709,$,$);
+#11711=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_05_15','Chargers',#11710,$,$);
+#11712=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_05_70','Rechargeable batteries',#11710,$,$);
+#11713=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10','Handsaws',#11709,$,$);
+#11714=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_06','Back saws',#11713,$,$);
+#11715=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_08','Bow saws',#11713,$,$);
+#11716=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_14','Compass saws',#11713,$,$);
+#11717=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_16','Coping saws',#11713,$,$);
+#11718=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_24','Drywall saws',#11713,$,$);
+#11719=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_29','Flooring saws',#11713,$,$);
+#11720=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_31','Fretsaws',#11713,$,$);
+#11721=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_36','Hacksaws',#11713,$,$);
+#11722=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_10_60','Panel saws',#11713,$,$);
+#11723=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15','Power saws',#11709,$,$);
+#11724=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_03','Alligator saws',#11723,$,$);
+#11725=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_06','Bandsaws',#11723,$,$);
+#11726=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_09','Brick saws',#11723,$,$);
+#11727=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_12','Chainsaws',#11723,$,$);
+#11728=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_13','Circular saws',#11723,$,$);
+#11729=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_16','Concrete saws',#11723,$,$);
+#11730=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_44','Jig saws',#11723,$,$);
+#11731=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_52','Mitre saws',#11723,$,$);
+#11732=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_15_70','Rail saws',#11723,$,$);
+#11733=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20','Pipework equipment',#11709,$,$);
+#11734=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20_31','Flaring tools',#11733,$,$);
+#11735=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20_44','Joint assembly tools',#11733,$,$);
+#11736=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20_64','Pipe defrosting equipment',#11733,$,$);
+#11737=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20_67','Pipe wrenches',#11733,$,$);
+#11738=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_20_70','Plumber''s furnaces',#11733,$,$);
+#11739=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25','Flooring equipment',#11709,$,$);
+#11740=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_13','Carpet trimmers',#11739,$,$);
+#11741=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_14','Carpet tuckers',#11739,$,$);
+#11742=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_30','Floor rollers',#11739,$,$);
+#11743=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_45','Knee kickers',#11739,$,$);
+#11744=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_78','Seam rollers',#11739,$,$);
+#11745=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_25_84','Stair tools',#11739,$,$);
+#11746=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30','Hammers',#11709,$,$);
+#11747=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_07','Bricklayer''s hammers',#11746,$,$);
+#11748=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_09','Bush hammers',#11746,$,$);
+#11749=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_11','Carpenter''s hammers',#11746,$,$);
+#11750=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_13','Chipping hammers',#11746,$,$);
+#11751=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_15','Club hammers',#11746,$,$);
+#11752=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_22','Demolition hammers',#11746,$,$);
+#11753=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_71','Riveting hammers',#11746,$,$);
+#11754=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_73','Rotary hammers',#11746,$,$);
+#11755=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_30_80','Sledgehammers',#11746,$,$);
+#11756=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_35','Manual pumps',#11709,$,$);
+#11757=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_35_70','Rotary hand pumps',#11756,$,$);
+#11758=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40','Handheld drills and equipment',#11709,$,$);
+#11759=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_05','Augers',#11758,$,$);
+#11760=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_21','Diamond drilling and chasing equipment',#11758,$,$);
+#11761=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_22','Drill bits',#11758,$,$);
+#11762=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_23','Drill rods',#11758,$,$);
+#11763=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_24','Drill stands',#11758,$,$);
+#11764=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_64','Pipe drilling tackle',#11758,$,$);
+#11765=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_70','Reversible drills',#11758,$,$);
+#11766=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_72','Rock drills',#11758,$,$);
+#11767=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_73','Rotary drills',#11758,$,$);
+#11768=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_40_96','Wheel braces',#11758,$,$);
+#11769=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45','Handheld equipment',#11709,$,$);
+#11770=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_02','Adhesive guns',#11769,$,$);
+#11771=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_08','Bolt tensioning tools',#11769,$,$);
+#11772=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_11','Cable cutters',#11769,$,$);
+#11773=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_12','Cable locators',#11769,$,$);
+#11774=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_17','Crimping tools',#11769,$,$);
+#11775=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_25','Dynamometers',#11769,$,$);
+#11776=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_27','Engraver',#11769,$,$);
+#11777=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_37','Heat guns',#11769,$,$);
+#11778=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_39','Hydraulic wrenches',#11769,$,$);
+#11779=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_42','Impact wrenches',#11769,$,$);
+#11780=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_50','Metal detectors',#11769,$,$);
+#11781=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_56','Nail guns',#11769,$,$);
+#11782=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_57','Nibblers',#11769,$,$);
+#11783=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_63','Pipeline locators',#11769,$,$);
+#11784=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_72','Rivet guns',#11769,$,$);
+#11785=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_88','Torque wrenches',#11769,$,$);
+#11786=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_96','Wire pullers',#11769,$,$);
+#11787=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_45_97','Wire tensioners',#11769,$,$);
+#11788=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50','Painting and insulation application equipment',#11709,$,$);
+#11789=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_41','Insulation injection equipment',#11788,$,$);
+#11790=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_60','Paintbrushes',#11788,$,$);
+#11791=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_62','Paint kettles',#11788,$,$);
+#11792=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_64','Paint metering systems',#11788,$,$);
+#11793=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_66','Paint rollers',#11788,$,$);
+#11794=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_50_80','Spraying equipment for paints and insulation',#11788,$,$);
+#11795=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60','Trucks, trolleys and barrows',#11709,$,$);
+#11796=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60_36','Hand barrows',#11795,$,$);
+#11797=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60_37','Hand trucks',#11795,$,$);
+#11798=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60_65','Powered barrows',#11795,$,$);
+#11799=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60_66','Powered stairclimber trucks',#11795,$,$);
+#11800=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_60_83','Stairclimber trucks',#11795,$,$);
+#11801=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_65','Excavation tools',#11709,$,$);
+#11802=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_65_15','Clay spits',#11801,$,$);
+#11803=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_65_60','Picks',#11801,$,$);
+#11804=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_65_80','Spades',#11801,$,$);
+#11805=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_70','Levering bars',#11709,$,$);
+#11806=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_70_20','Crowbars',#11805,$,$);
+#11807=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_70_60','Pinch bars',#11805,$,$);
+#11808=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75','Knives and cutting tools',#11709,$,$);
+#11809=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_08','Bolt cutters',#11808,$,$);
+#11810=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_14','Chisels',#11808,$,$);
+#11811=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_76','Scissors',#11808,$,$);
+#11812=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_80','Shears',#11808,$,$);
+#11813=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_82','Snips',#11808,$,$);
+#11814=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_92','Utility knife blades',#11808,$,$);
+#11815=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_75_93','Utility knives',#11808,$,$);
+#11816=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80','Screwdrivers and spanners',#11709,$,$);
+#11817=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_01','Adjustable spanners',#11816,$,$);
+#11818=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_03','Allen keys',#11816,$,$);
+#11819=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_17','Cross head screwdrivers',#11816,$,$);
+#11820=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_30','Flathead screwdrivers',#11816,$,$);
+#11821=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_70','Ratchet screwdrivers',#11816,$,$);
+#11822=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_80_80','Spanners',#11816,$,$);
+#11823=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_85','Trowels',#11709,$,$);
+#11824=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_85_03','Angle trowels',#11823,$,$);
+#11825=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_85_33','Gauging trowels',#11823,$,$);
+#11826=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_85_46','Laying on trowels',#11823,$,$);
+#11827=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_90','Floats',#11709,$,$);
+#11828=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_90_18','Cross-grained floats',#11827,$,$);
+#11829=IFCCLASSIFICATIONREFERENCE($,'TE_70_50_90_22','Devil floats',#11827,$,$);
+#11830=IFCCLASSIFICATIONREFERENCE($,'TE_70_60','Electrical tools',#11528,$,$);
+#11831=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_10','Sanders',#11830,$,$);
+#11832=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_10_07','Belt sanders',#11831,$,$);
+#11833=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_10_58','Orbital sanders',#11831,$,$);
+#11834=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_20','Grinders',#11830,$,$);
+#11835=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_20_03','Angle grinders',#11834,$,$);
+#11836=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_20_07','Bench grinders',#11834,$,$);
+#11837=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_20_84','Straight grinders',#11834,$,$);
+#11838=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_30','Polishers',#11830,$,$);
+#11839=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_30_30','Floor polishers',#11838,$,$);
+#11840=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_40','Planers',#11830,$,$);
+#11841=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_50','Routers',#11830,$,$);
+#11842=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_60','Scabblers',#11830,$,$);
+#11843=IFCCLASSIFICATIONREFERENCE($,'TE_70_60_70','Breakers',#11830,$,$);
+#11844=IFCCLASSIFICATIONREFERENCE($,'TE_70_80','Testing equipment',#11528,$,$);
+#11845=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_10','Concrete testing equipment',#11844,$,$);
+#11846=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_20','Drain testing equipment',#11844,$,$);
+#11847=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_20_80','Sewer test and inspection equipment',#11846,$,$);
+#11848=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25','Electrical testing equipment',#11844,$,$);
+#11849=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_11','Cable fault reflectometers',#11848,$,$);
+#11850=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_12','Cable fault locators',#11848,$,$);
+#11851=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_15','Clamp meters',#11848,$,$);
+#11852=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_30','Frequency selective meters',#11848,$,$);
+#11853=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_32','Fuse finder kits',#11848,$,$);
+#11854=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_42','Illuminance meters',#11848,$,$);
+#11855=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_44','Impedance meters',#11848,$,$);
+#11856=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_45','Insulation fault locators',#11848,$,$);
+#11857=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_76','Scopemeters',#11848,$,$);
+#11858=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_25_92','Ultrasonic flaw detectors',#11848,$,$);
+#11859=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_40','Pipe testing equipment',#11844,$,$);
+#11860=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_60','Sampling equipment',#11844,$,$);
+#11861=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_80','Weighing machines for construction materials',#11844,$,$);
+#11862=IFCCLASSIFICATIONREFERENCE($,'TE_70_80_90','Weighing machines for vehicles',#11844,$,$);
+#11863=IFCCLASSIFICATIONREFERENCE($,'SL_20','Administrative, commercial and protective service spaces',#5,$,$);
+#11864=IFCCLASSIFICATIONREFERENCE($,'SL_20_10','Legislative spaces',#11863,$,$);
+#11865=IFCCLASSIFICATIONREFERENCE($,'SL_20_10_47','Legislative chambers',#11864,$,$);
+#11866=IFCCLASSIFICATIONREFERENCE($,'SL_20_10_49','Legislative chamber viewing galleries',#11864,$,$);
+#11867=IFCCLASSIFICATIONREFERENCE($,'SL_20_15','Administrative spaces',#11863,$,$);
+#11868=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_15','Confidential meetings rooms',#11867,$,$);
+#11869=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_27','Enclosed offices',#11867,$,$);
+#11870=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_50','Meeting rooms',#11867,$,$);
+#11871=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_59','Offices',#11867,$,$);
+#11872=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_61','Open-plan offices',#11867,$,$);
+#11873=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_71','Reception areas',#11867,$,$);
+#11874=IFCCLASSIFICATIONREFERENCE($,'SL_20_15_73','Reprographics rooms',#11867,$,$);
+#11875=IFCCLASSIFICATIONREFERENCE($,'SL_20_45','Motor vehicle maintenance and fuelling spaces',#11863,$,$);
+#11876=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_27','Electric motor vehicle charging points',#11875,$,$);
+#11877=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_29','Fuel filling station air and water points',#11875,$,$);
+#11878=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_30','Fuel filling station forecourts',#11875,$,$);
+#11879=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_31','Fuel filling station tanks areas',#11875,$,$);
+#11880=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_53','Motor vehicle maintenance areas',#11875,$,$);
+#11881=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_95','Vehicle inspection pits',#11875,$,$);
+#11882=IFCCLASSIFICATIONREFERENCE($,'SL_20_45_96','Vehicle servicing areas',#11875,$,$);
+#11883=IFCCLASSIFICATIONREFERENCE($,'SL_20_50','Commercial spaces',#11863,$,$);
+#11884=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_03','Ambient wholesale spaces',#11883,$,$);
+#11885=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_05','Auction rooms',#11883,$,$);
+#11886=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_10','Beauty salons',#11883,$,$);
+#11887=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_12','Checkout points',#11883,$,$);
+#11888=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_22','Department store shop floors',#11883,$,$);
+#11889=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_29','Financial and professional services outlets',#11883,$,$);
+#11890=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_30','Fitting rooms',#11883,$,$);
+#11891=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_32','Food and drink outlets',#11883,$,$);
+#11892=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_36','Hair and beauty salons',#11883,$,$);
+#11893=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_37','Hair salons',#11883,$,$);
+#11894=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_47','Livestock auction rooms',#11883,$,$);
+#11895=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_51','Market stalls',#11883,$,$);
+#11896=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_55','Motor vehicle showrooms',#11883,$,$);
+#11897=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_70','Refrigerated wholesale spaces',#11883,$,$);
+#11898=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_72','Retail kiosks',#11883,$,$);
+#11899=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_85','Supermarket shop floors',#11883,$,$);
+#11900=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_86','Tan spray booths',#11883,$,$);
+#11901=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_87','Tattoo and piercing parlours',#11883,$,$);
+#11902=IFCCLASSIFICATIONREFERENCE($,'SL_20_50_96','Waste and scrap yards',#11883,$,$);
+#11903=IFCCLASSIFICATIONREFERENCE($,'SL_20_55','Postal communications spaces',#11863,$,$);
+#11904=IFCCLASSIFICATIONREFERENCE($,'SL_20_55_45','Letter sorting offices',#11903,$,$);
+#11905=IFCCLASSIFICATIONREFERENCE($,'SL_20_55_50','Mail order sorting and despatch facilities',#11903,$,$);
+#11906=IFCCLASSIFICATIONREFERENCE($,'SL_20_55_60','Parcel sorting offices',#11903,$,$);
+#11907=IFCCLASSIFICATIONREFERENCE($,'SL_20_55_65','Post rooms',#11903,$,$);
+#11908=IFCCLASSIFICATIONREFERENCE($,'SL_20_60','Military protective spaces',#11863,$,$);
+#11909=IFCCLASSIFICATIONREFERENCE($,'SL_20_60_08','Bombardment shelters',#11908,$,$);
+#11910=IFCCLASSIFICATIONREFERENCE($,'SL_20_60_27','Emergency shelters',#11908,$,$);
+#11911=IFCCLASSIFICATIONREFERENCE($,'SL_20_60_70','Radiation protection shelters',#11908,$,$);
+#11912=IFCCLASSIFICATIONREFERENCE($,'SL_20_60_98','War emergency centres',#11908,$,$);
+#11913=IFCCLASSIFICATIONREFERENCE($,'SL_20_62','Parade spaces',#11863,$,$);
+#11914=IFCCLASSIFICATIONREFERENCE($,'SL_20_62_65','Parade grounds',#11913,$,$);
+#11915=IFCCLASSIFICATIONREFERENCE($,'SL_20_65','Law enforcement spaces',#11863,$,$);
+#11916=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_15','Command and control spaces',#11915,$,$);
+#11917=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_28','Examination rooms',#11915,$,$);
+#11918=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_39','Identification control rooms',#11915,$,$);
+#11919=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_40','Identification suites',#11915,$,$);
+#11920=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_41','Interview monitoring rooms',#11915,$,$);
+#11921=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_42','Interview rooms',#11915,$,$);
+#11922=IFCCLASSIFICATIONREFERENCE($,'SL_20_65_65','Police boxes',#11915,$,$);
+#11923=IFCCLASSIFICATIONREFERENCE($,'SL_20_70','Judicial spaces',#11863,$,$);
+#11924=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_15','Courtrooms',#11923,$,$);
+#11925=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_18','Courtroom viewing galleries',#11923,$,$);
+#11926=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_23','Defendant docks',#11923,$,$);
+#11927=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_28','Evidence rooms',#11923,$,$);
+#11928=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_41','Judicial benches',#11923,$,$);
+#11929=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_44','Jury boxes',#11923,$,$);
+#11930=IFCCLASSIFICATIONREFERENCE($,'SL_20_70_97','Witness stands',#11923,$,$);
+#11931=IFCCLASSIFICATIONREFERENCE($,'SL_20_75','Detention spaces',#11863,$,$);
+#11932=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_02','Accessible cells',#11931,$,$);
+#11933=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_13','Charge areas',#11931,$,$);
+#11934=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_15','Communal inmate dayrooms',#11931,$,$);
+#11935=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_17','Constant observation cells',#11931,$,$);
+#11936=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_22','Detention cells',#11931,$,$);
+#11937=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_23','Dirty protest cells',#11931,$,$);
+#11938=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_24','Double-occupancy cells',#11931,$,$);
+#11939=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_25','Dry cells',#11931,$,$);
+#11940=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_28','Exercise yards',#11931,$,$);
+#11941=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_35','Guard stations',#11931,$,$);
+#11942=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_38','Holding cells',#11931,$,$);
+#11943=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_39','Holding rooms',#11931,$,$);
+#11944=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_46','Listener suites',#11931,$,$);
+#11945=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_48','Low-mobility cells',#11931,$,$);
+#11946=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_50','Medical single-occupancy cells',#11931,$,$);
+#11947=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_51','Medical single-occupancy end-of-life cells',#11931,$,$);
+#11948=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_52','Medical single-occupancy isolation cells',#11931,$,$);
+#11949=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_53','Medical single-occupancy social care cells',#11931,$,$);
+#11950=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_54','Medical multiple-occupancy wards',#11931,$,$);
+#11951=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_55','Multiple-occupancy bedrooms',#11931,$,$);
+#11952=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_65','Protest cells',#11931,$,$);
+#11953=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_70','Regular care and separation unit (CaSU) cells',#11931,$,$);
+#11954=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_75','Sally ports',#11931,$,$);
+#11955=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_77','Secure visiting rooms',#11931,$,$);
+#11956=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_79','Single-occupancy cells',#11931,$,$);
+#11957=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_82','Specimen capture cells',#11931,$,$);
+#11958=IFCCLASSIFICATIONREFERENCE($,'SL_20_75_95','Vehicle impound yards',#11931,$,$);
+#11959=IFCCLASSIFICATIONREFERENCE($,'SL_20_80','Weapons training spaces',#11863,$,$);
+#11960=IFCCLASSIFICATIONREFERENCE($,'SL_20_80_03','Artillery firing ranges',#11959,$,$);
+#11961=IFCCLASSIFICATIONREFERENCE($,'SL_20_80_30','Firing ranges',#11959,$,$);
+#11962=IFCCLASSIFICATIONREFERENCE($,'SL_20_80_63','Pistol firing ranges',#11959,$,$);
+#11963=IFCCLASSIFICATIONREFERENCE($,'SL_20_80_72','Rifle firing ranges',#11959,$,$);
+#11964=IFCCLASSIFICATIONREFERENCE($,'SL_20_85','Security spaces',#11863,$,$);
+#11965=IFCCLASSIFICATIONREFERENCE($,'SL_20_85_63','Pedestrian security checkpoints',#11964,$,$);
+#11966=IFCCLASSIFICATIONREFERENCE($,'SL_20_85_75','Security control spaces',#11964,$,$);
+#11967=IFCCLASSIFICATIONREFERENCE($,'SL_20_85_80','Security offices',#11964,$,$);
+#11968=IFCCLASSIFICATIONREFERENCE($,'SL_20_85_95','Vehicular security checkpoints',#11964,$,$);
+#11969=IFCCLASSIFICATIONREFERENCE($,'SL_20_90','Fire and incident support spaces',#11863,$,$);
+#11970=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_23','Emergency and rescue equipment spaces',#11969,$,$);
+#11971=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_25','Escape stairs',#11969,$,$);
+#11972=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_28','Firefighting stairs',#11969,$,$);
+#11973=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_30','Fire refuge spaces',#11969,$,$);
+#11974=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_31','Fire training spaces',#11969,$,$);
+#11975=IFCCLASSIFICATIONREFERENCE($,'SL_20_90_60','Protected escape corridors',#11969,$,$);
+#11976=IFCCLASSIFICATIONREFERENCE($,'SL_20_95','Protected zones',#11863,$,$);
+#11977=IFCCLASSIFICATIONREFERENCE($,'SL_20_95_20','Detection zones',#11976,$,$);
+#11978=IFCCLASSIFICATIONREFERENCE($,'SL_20_95_28','Evacuation zones',#11976,$,$);
+#11979=IFCCLASSIFICATIONREFERENCE($,'SL_20_95_30','Fire compartments',#11976,$,$);
+#11980=IFCCLASSIFICATIONREFERENCE($,'SL_20_95_32','Fire suppression zones',#11976,$,$);
+#11981=IFCCLASSIFICATIONREFERENCE($,'SL_20_95_80','Smoke control zones',#11976,$,$);
+#11982=IFCCLASSIFICATIONREFERENCE($,'SL_25','Cultural, educational, scientific and information spaces',#5,$,$);
+#11983=IFCCLASSIFICATIONREFERENCE($,'SL_25_05','Commemoration spaces',#11982,$,$);
+#11984=IFCCLASSIFICATIONREFERENCE($,'SL_25_05_72','Commemoration sites',#11983,$,$);
+#11985=IFCCLASSIFICATIONREFERENCE($,'SL_25_10','Educational spaces',#11982,$,$);
+#11986=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_01','Activity studios',#11985,$,$);
+#11987=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_04','Art rooms',#11985,$,$);
+#11988=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_05','Assembly halls',#11985,$,$);
+#11989=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_08','Biology teaching laboratories',#11985,$,$);
+#11990=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_13','Chemistry teaching laboratories',#11985,$,$);
+#11991=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_14','Classrooms',#11985,$,$);
+#11992=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_15','Common rooms',#11985,$,$);
+#11993=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_17','Craft classrooms',#11985,$,$);
+#11994=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_21','Dance studios',#11985,$,$);
+#11995=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_22','Dissection theatres',#11985,$,$);
+#11996=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_24','Drama studios',#11985,$,$);
+#11997=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_25','Driving skid pans',#11985,$,$);
+#11998=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_26','Driving tuition spaces',#11985,$,$);
+#11999=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_28','Educational workshops',#11985,$,$);
+#12000=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_30','Food rooms',#11985,$,$);
+#12001=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_39','Infant classrooms',#11985,$,$);
+#12002=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_40','Information and communications technology (ICT) laboratories',#11985,$,$);
+#12003=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_41','Information and communications technology (ICT)-rich classrooms',#11985,$,$);
+#12004=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_44','Junior classrooms',#11985,$,$);
+#12005=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_46','Language laboratories',#11985,$,$);
+#12006=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_47','Lecture theatres',#11985,$,$);
+#12007=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_53','Multi-purpose practical rooms',#11985,$,$);
+#12008=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_54','Music and drama classrooms',#11985,$,$);
+#12009=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_55','Music rooms',#11985,$,$);
+#12010=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_57','Nursery playrooms',#11985,$,$);
+#12011=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_58','Open access computer laboratories',#11985,$,$);
+#12012=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_60','Outdoor classrooms',#11985,$,$);
+#12013=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_61','Outdoor class spaces',#11985,$,$);
+#12014=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_66','Physics teaching laboratories',#11985,$,$);
+#12015=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_67','Primary practical rooms',#11985,$,$);
+#12016=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_68','Primary special educational needs (SEN) classrooms',#11985,$,$);
+#12017=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_72','Reception classrooms',#11985,$,$);
+#12018=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_74','Science studios',#11985,$,$);
+#12019=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_75','Science laboratories',#11985,$,$);
+#12020=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_76','Secondary special educational needs (SEN) classrooms',#11985,$,$);
+#12021=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_77','Semi-open classbases',#11985,$,$);
+#12022=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_78','Seminar rooms',#11985,$,$);
+#12023=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_79','Shared teaching areas',#11985,$,$);
+#12024=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_81','Sixth form special educational needs (SEN) classrooms',#11985,$,$);
+#12025=IFCCLASSIFICATIONREFERENCE($,'SL_25_10_84','Study spaces',#11985,$,$);
+#12026=IFCCLASSIFICATIONREFERENCE($,'SL_25_20','Design spaces',#11982,$,$);
+#12027=IFCCLASSIFICATIONREFERENCE($,'SL_25_20_04','Artists'' studios',#12026,$,$);
+#12028=IFCCLASSIFICATIONREFERENCE($,'SL_25_20_18','Creative art studios',#12026,$,$);
+#12029=IFCCLASSIFICATIONREFERENCE($,'SL_25_20_23','Designers'' studios',#12026,$,$);
+#12030=IFCCLASSIFICATIONREFERENCE($,'SL_25_30','Scientific and laboratory spaces',#11982,$,$);
+#12031=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_02','Anechoic chambers',#12030,$,$);
+#12032=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_04','Astronomical observatories',#12030,$,$);
+#12033=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_05','Autoclave rooms',#12030,$,$);
+#12034=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_07','Biological laboratories',#12030,$,$);
+#12035=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_10','Bioscience laboratories',#12030,$,$);
+#12036=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_13','Chemistry laboratories',#12030,$,$);
+#12037=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_14','Clean rooms',#12030,$,$);
+#12038=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_15','Clinical biochemistry laboratories',#12030,$,$);
+#12039=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_16','Clinical microbiology laboratories',#12030,$,$);
+#12040=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_17','Clinical pathology laboratories',#12030,$,$);
+#12041=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_19','Containment laboratories',#12030,$,$);
+#12042=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_21','Darkrooms',#12030,$,$);
+#12043=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_22','Dental laboratories',#12030,$,$);
+#12044=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_23','Dissection rooms',#12030,$,$);
+#12045=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_26','Earth sciences laboratories',#12030,$,$);
+#12046=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_27','Engineering laboratories',#12030,$,$);
+#12047=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_28','Experiment control rooms',#12030,$,$);
+#12048=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_29','Flow cytometry rooms',#12030,$,$);
+#12049=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_30','Food testing laboratories',#12030,$,$);
+#12050=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_31','Forensics laboratories',#12030,$,$);
+#12051=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_32','Forensic scientific support rooms',#12030,$,$);
+#12052=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_33','Geology laboratories',#12030,$,$);
+#12053=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_42','Instrument rooms',#12030,$,$);
+#12054=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_46','Laboratory cold rooms',#12030,$,$);
+#12055=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_47','Laboratory warm rooms',#12030,$,$);
+#12056=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_50','Material testing laboratories',#12030,$,$);
+#12057=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_66','Physics laboratories',#12030,$,$);
+#12058=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_68','Psychology laboratories',#12030,$,$);
+#12059=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_70','Radiation shielded rooms',#12030,$,$);
+#12060=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_76','Scientific equipment rooms',#12030,$,$);
+#12061=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_78','Seismograph rooms',#12030,$,$);
+#12062=IFCCLASSIFICATIONREFERENCE($,'SL_25_30_88','Testing rooms',#12030,$,$);
+#12063=IFCCLASSIFICATIONREFERENCE($,'SL_25_40','Training spaces',#11982,$,$);
+#12064=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_03','Animal care training rooms',#12063,$,$);
+#12065=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_11','Catering training kitchens',#12063,$,$);
+#12066=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_15','Construction workshops',#12063,$,$);
+#12067=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_22','Design technology studios',#12063,$,$);
+#12068=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_23','Design technology workshops',#12063,$,$);
+#12069=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_27','Engineering workshops',#12063,$,$);
+#12070=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_36','Hair and beauty training salons',#12063,$,$);
+#12071=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_38','Health and clinical training rooms',#12063,$,$);
+#12072=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_40','Information and communications technology (ICT)-rich studios',#12063,$,$);
+#12073=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_42','Independent life skills rooms',#12063,$,$);
+#12074=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_50','Manufacturing workshops',#12063,$,$);
+#12075=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_51','Media studios',#12063,$,$);
+#12076=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_61','Outdoor training spaces',#12063,$,$);
+#12077=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_65','Photography studios',#12063,$,$);
+#12078=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_70','Rail training simulators',#12063,$,$);
+#12079=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_90','Training restaurants',#12063,$,$);
+#12080=IFCCLASSIFICATIONREFERENCE($,'SL_25_40_94','Vehicle workshops',#12063,$,$);
+#12081=IFCCLASSIFICATIONREFERENCE($,'SL_25_50','Exhibition spaces',#11982,$,$);
+#12082=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_15','Collection exhibition spaces',#12081,$,$);
+#12083=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_16','Conservation rooms',#12081,$,$);
+#12084=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_21','Diorama rooms',#12081,$,$);
+#12085=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_26','External galleries',#12081,$,$);
+#12086=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_29','Fauna exhibition spaces',#12081,$,$);
+#12087=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_31','Flora exhibition spaces',#12081,$,$);
+#12088=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_42','Internal galleries',#12081,$,$);
+#12089=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_63','Planetariums',#12081,$,$);
+#12090=IFCCLASSIFICATIONREFERENCE($,'SL_25_50_94','Viewing spaces',#12081,$,$);
+#12091=IFCCLASSIFICATIONREFERENCE($,'SL_25_70','Information spaces',#11982,$,$);
+#12092=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_02','Archives',#12091,$,$);
+#12093=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_04','Audiovisual archives',#12091,$,$);
+#12094=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_05','Audiovisual study rooms',#12091,$,$);
+#12095=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_13','Conference rooms',#12091,$,$);
+#12096=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_47','Library rooms',#12091,$,$);
+#12097=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_72','Reading rooms',#12091,$,$);
+#12098=IFCCLASSIFICATIONREFERENCE($,'SL_25_70_73','Records stores',#12091,$,$);
+#12099=IFCCLASSIFICATIONREFERENCE($,'SL_25_75','Learning resources spaces',#11982,$,$);
+#12100=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_04','Art and design resource spaces',#12099,$,$);
+#12101=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_37','Heavy practical resource spaces',#12099,$,$);
+#12102=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_40','Information and communications technology (ICT) resource spaces',#12099,$,$);
+#12103=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_45','Learning resource centres',#12099,$,$);
+#12104=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_47','Light practical resource spaces',#12099,$,$);
+#12105=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_55','Music practice rooms',#12099,$,$);
+#12106=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_76','School libraries',#12099,$,$);
+#12107=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_80','Small group rooms',#12099,$,$);
+#12108=IFCCLASSIFICATIONREFERENCE($,'SL_25_75_82','Special educational needs (SEN) resource spaces',#12099,$,$);
+#12109=IFCCLASSIFICATIONREFERENCE($,'SL_25_80','Preparation spaces',#11982,$,$);
+#12110=IFCCLASSIFICATIONREFERENCE($,'SL_25_80_22','Design technology preparation rooms',#12109,$,$);
+#12111=IFCCLASSIFICATIONREFERENCE($,'SL_25_80_27','Engineering preparation rooms',#12109,$,$);
+#12112=IFCCLASSIFICATIONREFERENCE($,'SL_25_80_30','Food preparation rooms',#12109,$,$);
+#12113=IFCCLASSIFICATIONREFERENCE($,'SL_25_80_75','Science preparation rooms',#12109,$,$);
+#12114=IFCCLASSIFICATIONREFERENCE($,'SL_25_90','Worship spaces',#11982,$,$);
+#12115=IFCCLASSIFICATIONREFERENCE($,'SL_25_90_30','Faith spaces',#12114,$,$);
+#12116=IFCCLASSIFICATIONREFERENCE($,'SL_25_90_65','Prayer rooms',#12114,$,$);
+#12117=IFCCLASSIFICATIONREFERENCE($,'SL_25_90_78','Shrines',#12114,$,$);
+#12118=IFCCLASSIFICATIONREFERENCE($,'SL_30','Industrial spaces',#5,$,$);
+#12119=IFCCLASSIFICATIONREFERENCE($,'SL_30_10','Mineral extraction spaces',#12118,$,$);
+#12120=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_57','Offshore oil and gas drilling spaces',#12119,$,$);
+#12121=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_59','Onshore oil and gas drilling spaces',#12119,$,$);
+#12122=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_69','Quarrying areas',#12119,$,$);
+#12123=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_85','Surface mine workings',#12119,$,$);
+#12124=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_91','Underground mine chambers',#12119,$,$);
+#12125=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_93','Underground mineshafts',#12119,$,$);
+#12126=IFCCLASSIFICATIONREFERENCE($,'SL_30_10_94','Underground mine tunnels',#12119,$,$);
+#12127=IFCCLASSIFICATIONREFERENCE($,'SL_30_20','Nuclear and chemical management spaces',#12118,$,$);
+#12128=IFCCLASSIFICATIONREFERENCE($,'SL_30_20_70','Radioactive decontamination spaces',#12127,$,$);
+#12129=IFCCLASSIFICATIONREFERENCE($,'SL_30_20_75','Radioactive waste package transfer spaces',#12127,$,$);
+#12130=IFCCLASSIFICATIONREFERENCE($,'SL_30_30','Mineral processing spaces',#12118,$,$);
+#12131=IFCCLASSIFICATIONREFERENCE($,'SL_30_30_33','Gas processing spaces',#12130,$,$);
+#12132=IFCCLASSIFICATIONREFERENCE($,'SL_30_30_58','Oil processing spaces',#12130,$,$);
+#12133=IFCCLASSIFICATIONREFERENCE($,'SL_30_30_59','Ore processing spaces',#12130,$,$);
+#12134=IFCCLASSIFICATIONREFERENCE($,'SL_30_40','Animal and plant products processing spaces',#12118,$,$);
+#12135=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_07','Bottling rooms',#12134,$,$);
+#12136=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_10','Butter making rooms',#12134,$,$);
+#12137=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_18','Cheesemaking rooms',#12134,$,$);
+#12138=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_30','Fish processing rooms',#12134,$,$);
+#12139=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_32','Fresh fruit and vegetable packing rooms',#12134,$,$);
+#12140=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_44','Juicing rooms',#12134,$,$);
+#12141=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_50','Meat processing rooms',#12134,$,$);
+#12142=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_54','Milk processing rooms',#12134,$,$);
+#12143=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_63','Plant fibre sorting rooms',#12134,$,$);
+#12144=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_65','Poultry and game processing rooms',#12134,$,$);
+#12145=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_75','Sawmills',#12134,$,$);
+#12146=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_80','Silk production rooms',#12134,$,$);
+#12147=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_82','Spinning rooms',#12134,$,$);
+#12148=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_87','Tanneries',#12134,$,$);
+#12149=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_88','Threshing rooms',#12134,$,$);
+#12150=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_90','Tobacco drying rooms',#12134,$,$);
+#12151=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_96','Weaving rooms',#12134,$,$);
+#12152=IFCCLASSIFICATIONREFERENCE($,'SL_30_40_98','Wool sorting rooms',#12134,$,$);
+#12153=IFCCLASSIFICATIONREFERENCE($,'SL_30_50','Manufacturing spaces',#12118,$,$);
+#12154=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_27','Electronics clean rooms',#12153,$,$);
+#12155=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_30','Heavy industrial spaces',#12153,$,$);
+#12156=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_40','Kiln rooms',#12153,$,$);
+#12157=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_43','Light industrial spaces',#12153,$,$);
+#12158=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_50','Manufacturing workshops',#12153,$,$);
+#12159=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_60','Packaging lines',#12153,$,$);
+#12160=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_61','Paint spray booths',#12153,$,$);
+#12161=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_62','Pharmaceuticals clean rooms',#12153,$,$);
+#12162=IFCCLASSIFICATIONREFERENCE($,'SL_30_50_64','Printing spaces',#12153,$,$);
+#12163=IFCCLASSIFICATIONREFERENCE($,'SL_30_60','Cleaning and maintenance spaces',#12118,$,$);
+#12164=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_03','Animal cage washing areas',#12163,$,$);
+#12165=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_11','Caretaker rooms',#12163,$,$);
+#12166=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_13','Clothes drying and airing rooms',#12163,$,$);
+#12167=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_22','Decontamination spaces',#12163,$,$);
+#12168=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_24','Dry cleaning spaces',#12163,$,$);
+#12169=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_42','Ironing rooms',#12163,$,$);
+#12170=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_46','Laundrettes',#12163,$,$);
+#12171=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_47','Laundries',#12163,$,$);
+#12172=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_50','Maintenance workshops',#12163,$,$);
+#12173=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_75','Service laundries',#12163,$,$);
+#12174=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_93','Vehicle-cleaning areas',#12163,$,$);
+#12175=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_94','Vehicle washes',#12163,$,$);
+#12176=IFCCLASSIFICATIONREFERENCE($,'SL_30_60_96','Wash-up spaces',#12163,$,$);
+#12177=IFCCLASSIFICATIONREFERENCE($,'SL_30_80','Kinetic power generation spaces',#12118,$,$);
+#12178=IFCCLASSIFICATIONREFERENCE($,'SL_30_80_96','Watermill houses',#12177,$,$);
+#12179=IFCCLASSIFICATIONREFERENCE($,'SL_30_80_97','Windmill houses',#12177,$,$);
+#12180=IFCCLASSIFICATIONREFERENCE($,'SL_30_85','Marine and water maintenance spaces',#12118,$,$);
+#12181=IFCCLASSIFICATIONREFERENCE($,'SL_30_85_08','Boat repair spaces',#12180,$,$);
+#12182=IFCCLASSIFICATIONREFERENCE($,'SL_30_85_20','Dock faces',#12180,$,$);
+#12183=IFCCLASSIFICATIONREFERENCE($,'SL_30_85_22','Dock sills',#12180,$,$);
+#12184=IFCCLASSIFICATIONREFERENCE($,'SL_30_85_24','Dry dock chambers',#12180,$,$);
+#12185=IFCCLASSIFICATIONREFERENCE($,'SL_30_85_30','Floating docks',#12180,$,$);
+#12186=IFCCLASSIFICATIONREFERENCE($,'SL_30_90','Warehousing and distribution spaces',#12118,$,$);
+#12187=IFCCLASSIFICATIONREFERENCE($,'SL_30_90_33','Goods delivery bays',#12186,$,$);
+#12188=IFCCLASSIFICATIONREFERENCE($,'SL_30_90_48','Loading docks',#12186,$,$);
+#12189=IFCCLASSIFICATIONREFERENCE($,'SL_30_90_80','Sorting and distribution spaces',#12186,$,$);
+#12190=IFCCLASSIFICATIONREFERENCE($,'SL_30_90_84','Storage yards',#12186,$,$);
+#12191=IFCCLASSIFICATIONREFERENCE($,'SL_30_90_96','Warehouse spaces',#12186,$,$);
+#12192=IFCCLASSIFICATIONREFERENCE($,'SL_32','Water and land management spaces',#5,$,$);
+#12193=IFCCLASSIFICATIONREFERENCE($,'SL_32_10','Agricultural and horticultural spaces',#12192,$,$);
+#12194=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_03','Arable fields',#12193,$,$);
+#12195=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_26','Farmyards',#12193,$,$);
+#12196=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_28','Fisheries',#12193,$,$);
+#12197=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_30','Fish farm tanks',#12193,$,$);
+#12198=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_34','Glasshouse spaces',#12193,$,$);
+#12199=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_37','Hedges',#12193,$,$);
+#12200=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_39','Hothouse spaces',#12193,$,$);
+#12201=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_47','Livestock fields',#12193,$,$);
+#12202=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_52','Milking parlours',#12193,$,$);
+#12203=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_55','Mushroom cultivation spaces',#12193,$,$);
+#12204=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_60','Paddocks',#12193,$,$);
+#12205=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_65','Polytunnel spaces',#12193,$,$);
+#12206=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_66','Poultry batteries',#12193,$,$);
+#12207=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_77','Shearing spaces',#12193,$,$);
+#12208=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_78','Sheep dips',#12193,$,$);
+#12209=IFCCLASSIFICATIONREFERENCE($,'SL_32_10_94','Vineyard spaces',#12193,$,$);
+#12210=IFCCLASSIFICATIONREFERENCE($,'SL_32_15','Dam spaces',#12192,$,$);
+#12211=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_17','Dam crests',#12210,$,$);
+#12212=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_29','Dam faces',#12210,$,$);
+#12213=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_37','Dam heels',#12210,$,$);
+#12214=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_81','Dam spillway crests',#12210,$,$);
+#12215=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_82','Dam spillway funnels',#12210,$,$);
+#12216=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_83','Dam spillway faces',#12210,$,$);
+#12217=IFCCLASSIFICATIONREFERENCE($,'SL_32_15_89','Dam toes',#12210,$,$);
+#12218=IFCCLASSIFICATIONREFERENCE($,'SL_32_35','Ground spaces',#12192,$,$);
+#12219=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_02','Access strips',#12218,$,$);
+#12220=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_04','Allotments',#12218,$,$);
+#12221=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_22','Decking areas',#12218,$,$);
+#12222=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_24','Driveways',#12218,$,$);
+#12223=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_30','Flower beds',#12218,$,$);
+#12224=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_46','Lawns',#12218,$,$);
+#12225=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_60','Patios',#12218,$,$);
+#12226=IFCCLASSIFICATIONREFERENCE($,'SL_32_35_94','Vegetable gardens',#12218,$,$);
+#12227=IFCCLASSIFICATIONREFERENCE($,'SL_32_40','Land managed spaces',#12192,$,$);
+#12228=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_06','Berms',#12227,$,$);
+#12229=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_26','Easement access areas',#12227,$,$);
+#12230=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_27','Embankment cores',#12227,$,$);
+#12231=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_28','Embankment crests',#12227,$,$);
+#12232=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_29','Embankment faces',#12227,$,$);
+#12233=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_30','Embankment toes',#12227,$,$);
+#12234=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_31','Embankment transition zones',#12227,$,$);
+#12235=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_32','Fill zones',#12227,$,$);
+#12236=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_37','High ground crests',#12227,$,$);
+#12237=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_38','High ground faces',#12227,$,$);
+#12238=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_70','Rain gauge central wells',#12227,$,$);
+#12239=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_71','Rain gauge turf walls',#12227,$,$);
+#12240=IFCCLASSIFICATIONREFERENCE($,'SL_32_40_90','Tree protection zones',#12227,$,$);
+#12241=IFCCLASSIFICATIONREFERENCE($,'SL_32_50','Marine ways and waterway spaces',#12192,$,$);
+#12242=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_03','Anchorages',#12241,$,$);
+#12243=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_06','Beach ramps',#12241,$,$);
+#12244=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_11','Canoe passes',#12241,$,$);
+#12245=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_12','Canoe portage spaces',#12241,$,$);
+#12246=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_18','Deep berths',#12241,$,$);
+#12247=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_30','Fords',#12241,$,$);
+#12248=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_43','Jetty cores',#12241,$,$);
+#12249=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_44','Jetty faces',#12241,$,$);
+#12250=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_45','Jetty toes',#12241,$,$);
+#12251=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_46','Landing faces',#12241,$,$);
+#12252=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_47','Lifeboat vessel launch spaces',#12241,$,$);
+#12253=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_53','Moorings',#12241,$,$);
+#12254=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_68','Quay faces',#12241,$,$);
+#12255=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_69','Quay stems',#12241,$,$);
+#12256=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_72','Roller boat lifts',#12241,$,$);
+#12257=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_76','Scour protection aprons',#12241,$,$);
+#12258=IFCCLASSIFICATIONREFERENCE($,'SL_32_50_79','Slipways',#12241,$,$);
+#12259=IFCCLASSIFICATIONREFERENCE($,'SL_32_65','Natural spaces',#12192,$,$);
+#12260=IFCCLASSIFICATIONREFERENCE($,'SL_32_65_12','Caves',#12259,$,$);
+#12261=IFCCLASSIFICATIONREFERENCE($,'SL_32_65_71','Riverbeds',#12259,$,$);
+#12262=IFCCLASSIFICATIONREFERENCE($,'SL_32_65_72','River reaches',#12259,$,$);
+#12263=IFCCLASSIFICATIONREFERENCE($,'SL_32_65_74','Sand dune active zones',#12259,$,$);
+#12264=IFCCLASSIFICATIONREFERENCE($,'SL_32_65_75','Sand dune stabilized zones',#12259,$,$);
+#12265=IFCCLASSIFICATIONREFERENCE($,'SL_32_80','Semi-natural spaces',#12192,$,$);
+#12266=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_03','Amenity grass areas',#12265,$,$);
+#12267=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_08','Brownfield sites',#12265,$,$);
+#12268=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_23','Disused mineral extraction sites',#12265,$,$);
+#12269=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_46','Living roof areas',#12265,$,$);
+#12270=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_47','Living willow structures',#12265,$,$);
+#12271=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_48','Managed water habitats',#12265,$,$);
+#12272=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_49','Managed wildlife habitats',#12265,$,$);
+#12273=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_50','Mowing strips',#12265,$,$);
+#12274=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_89','Transport corridor verges',#12265,$,$);
+#12275=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_95','Wetland habitats',#12265,$,$);
+#12276=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_96','Wildflower gardens',#12265,$,$);
+#12277=IFCCLASSIFICATIONREFERENCE($,'SL_32_80_97','Woodland habitats',#12265,$,$);
+#12278=IFCCLASSIFICATIONREFERENCE($,'SL_32_85','Water control and retaining spaces',#12192,$,$);
+#12279=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_06','Barrier beach faces',#12278,$,$);
+#12280=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_10','Breakwater faces',#12278,$,$);
+#12281=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_15','Control gate sills',#12278,$,$);
+#12282=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_30','Fishtails',#12278,$,$);
+#12283=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_35','Groyne faces',#12278,$,$);
+#12284=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_42','Intake towers',#12278,$,$);
+#12285=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_58','Orifice flow control structures',#12278,$,$);
+#12286=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_60','Paddles and rymers',#12278,$,$);
+#12287=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_65','Preliminary weirs',#12278,$,$);
+#12288=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_70','Roundheads',#12278,$,$);
+#12289=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_81','Spillway crests',#12278,$,$);
+#12290=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_82','Spillway funnels',#12278,$,$);
+#12291=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_83','Spillway faces',#12278,$,$);
+#12292=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_84','Stilling wells',#12278,$,$);
+#12293=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_94','Vortex flow control structures',#12278,$,$);
+#12294=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_95','Water-retaining wall cores',#12278,$,$);
+#12295=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_96','Water-retaining wall faces',#12278,$,$);
+#12296=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_97','Water-retaining wall toes',#12278,$,$);
+#12297=IFCCLASSIFICATIONREFERENCE($,'SL_32_85_98','Weir faces',#12278,$,$);
+#12298=IFCCLASSIFICATIONREFERENCE($,'SL_32_95','Waterways spaces',#12192,$,$);
+#12299=IFCCLASSIFICATIONREFERENCE($,'SL_32_95_15','Channel sides',#12298,$,$);
+#12300=IFCCLASSIFICATIONREFERENCE($,'SL_32_95_18','Culvert soffits',#12298,$,$);
+#12301=IFCCLASSIFICATIONREFERENCE($,'SL_32_95_20','Culvert walls',#12298,$,$);
+#12302=IFCCLASSIFICATIONREFERENCE($,'SL_32_95_29','Fish, eel and lamprey pass faces',#12298,$,$);
+#12303=IFCCLASSIFICATIONREFERENCE($,'SL_32_95_30','Fish, eel and lamprey pass sills',#12298,$,$);
+#12304=IFCCLASSIFICATIONREFERENCE($,'SL_35','Medical, health, welfare and sanitary spaces',#5,$,$);
+#12305=IFCCLASSIFICATIONREFERENCE($,'SL_35_10','Medical spaces',#12304,$,$);
+#12306=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_08','Birthing rooms',#12305,$,$);
+#12307=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_10','Burns units',#12305,$,$);
+#12308=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_15','Consulting rooms',#12305,$,$);
+#12309=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_22','Dental treatment rooms',#12305,$,$);
+#12310=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_30','First aid posts',#12305,$,$);
+#12311=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_31','First aid rooms',#12305,$,$);
+#12312=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_36','Hearing test rooms',#12305,$,$);
+#12313=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_39','Hydrotherapy pools',#12305,$,$);
+#12314=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_42','Intensive care units',#12305,$,$);
+#12315=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_43','Isolation units',#12305,$,$);
+#12316=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_51','Medical scanning and x-ray rooms',#12305,$,$);
+#12317=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_53','Medical treatment rooms',#12305,$,$);
+#12318=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_58','Occupational therapy rooms',#12305,$,$);
+#12319=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_59','Operating theatres',#12305,$,$);
+#12320=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_64','Pharmaceutical dispensaries',#12305,$,$);
+#12321=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_65','Phototherapy spaces',#12305,$,$);
+#12322=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_66','Physiotherapy rooms',#12305,$,$);
+#12323=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_70','Radiography rooms',#12305,$,$);
+#12324=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_71','Radiotherapy rooms',#12305,$,$);
+#12325=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_73','Recovery rooms',#12305,$,$);
+#12326=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_74','Rehabilitation rooms',#12305,$,$);
+#12327=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_88','Therapy rooms',#12305,$,$);
+#12328=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_96','Wards',#12305,$,$);
+#12329=IFCCLASSIFICATIONREFERENCE($,'SL_35_10_97','Warm water pools',#12305,$,$);
+#12330=IFCCLASSIFICATIONREFERENCE($,'SL_35_50','Welfare spaces',#12304,$,$);
+#12331=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_17','Cr\X2\00E8\X0\ches and nurseries',#12330,$,$);
+#12332=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_21','Day-care spaces',#12330,$,$);
+#12333=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_60','Parent and baby rooms',#12330,$,$);
+#12334=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_69','Quiet calming spaces',#12330,$,$);
+#12335=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_75','Sauna rooms',#12330,$,$);
+#12336=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_78','Sensory rooms',#12330,$,$);
+#12337=IFCCLASSIFICATIONREFERENCE($,'SL_35_50_90','Treatment rooms',#12330,$,$);
+#12338=IFCCLASSIFICATIONREFERENCE($,'SL_35_60','Food management spaces',#12304,$,$);
+#12339=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_14','Commercial kitchens',#12338,$,$);
+#12340=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_16','Cooking spaces',#12338,$,$);
+#12341=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_30','Food preparation areas',#12338,$,$);
+#12342=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_45','Kitchenettes',#12338,$,$);
+#12343=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_56','Non-domestic kitchens',#12338,$,$);
+#12344=IFCCLASSIFICATIONREFERENCE($,'SL_35_60_78','Servery areas',#12338,$,$);
+#12345=IFCCLASSIFICATIONREFERENCE($,'SL_35_70','Funerary spaces',#12304,$,$);
+#12346=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_12','Cemetery plots',#12345,$,$);
+#12347=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_15','Funerary columbariums',#12345,$,$);
+#12348=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_18','Crematorium oven rooms',#12345,$,$);
+#12349=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_32','Funeral vaults',#12345,$,$);
+#12350=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_50','Mausoleums',#12345,$,$);
+#12351=IFCCLASSIFICATIONREFERENCE($,'SL_35_70_90','Tombs',#12345,$,$);
+#12352=IFCCLASSIFICATIONREFERENCE($,'SL_35_80','Sanitary spaces',#12304,$,$);
+#12353=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_00','Ablutions rooms',#12352,$,$);
+#12354=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_01','Accessible changing rooms',#12352,$,$);
+#12355=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_03','Accessible toilets',#12352,$,$);
+#12356=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_06','Baby changing rooms',#12352,$,$);
+#12357=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_08','Bathrooms',#12352,$,$);
+#12358=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_39','Hygiene rooms',#12352,$,$);
+#12359=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_59','Open shower areas',#12352,$,$);
+#12360=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_68','Public toilets',#12352,$,$);
+#12361=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_80','Showers',#12352,$,$);
+#12362=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_85','Supervisable toilets',#12352,$,$);
+#12363=IFCCLASSIFICATIONREFERENCE($,'SL_35_80_89','Toilets',#12352,$,$);
+#12364=IFCCLASSIFICATIONREFERENCE($,'SL_35_85','Animal spaces',#12304,$,$);
+#12365=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_00','Animal arks',#12364,$,$);
+#12366=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_01','Animal cages',#12364,$,$);
+#12367=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_03','Animal enclosures',#12364,$,$);
+#12368=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_04','Animal exercise arenas',#12364,$,$);
+#12369=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_05','Aviaries',#12364,$,$);
+#12370=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_12','Cattle byres',#12364,$,$);
+#12371=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_39','Fish tanks',#12364,$,$);
+#12372=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_45','Kennels',#12364,$,$);
+#12373=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_47','Loose boxes',#12364,$,$);
+#12374=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_62','Pens',#12364,$,$);
+#12375=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_83','Stables',#12364,$,$);
+#12376=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_84','Stable yards',#12364,$,$);
+#12377=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_85','Stalls',#12364,$,$);
+#12378=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_86','Sties',#12364,$,$);
+#12379=IFCCLASSIFICATIONREFERENCE($,'SL_35_85_88','Tack rooms',#12364,$,$);
+#12380=IFCCLASSIFICATIONREFERENCE($,'SL_35_90','Animal medical, health, welfare and funerary spaces',#12304,$,$);
+#12381=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_10','Animal burial plots',#12380,$,$);
+#12382=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_15','Animal clinics',#12380,$,$);
+#12383=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_22','Animal dispensaries',#12380,$,$);
+#12384=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_32','Animal funerary spaces',#12380,$,$);
+#12385=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_34','Animal grooming facilities',#12380,$,$);
+#12386=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_37','Animal hydrotherapy pools',#12380,$,$);
+#12387=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_59','Animal operating theatres',#12380,$,$);
+#12388=IFCCLASSIFICATIONREFERENCE($,'SL_35_90_72','Animal wards',#12380,$,$);
+#12389=IFCCLASSIFICATIONREFERENCE($,'SL_40','Recreational spaces',#5,$,$);
+#12390=IFCCLASSIFICATIONREFERENCE($,'SL_40_05','Amusement spaces',#12389,$,$);
+#12391=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_03','Amusement arcades',#12390,$,$);
+#12392=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_13','Casino floors',#12390,$,$);
+#12393=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_27','Esport spaces',#12390,$,$);
+#12394=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_42','Indoor fairground spaces',#12390,$,$);
+#12395=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_43','Indoor play spaces',#12390,$,$);
+#12396=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_58','Observation decks',#12390,$,$);
+#12397=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_59','Outdoor activity areas',#12390,$,$);
+#12398=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_60','Outdoor fairground spaces',#12390,$,$);
+#12399=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_68','Public gardens',#12390,$,$);
+#12400=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_79','Sensory gardens',#12390,$,$);
+#12401=IFCCLASSIFICATIONREFERENCE($,'SL_40_05_81','Soft play rooms',#12390,$,$);
+#12402=IFCCLASSIFICATIONREFERENCE($,'SL_40_20','Dining spaces',#12389,$,$);
+#12403=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_06','Bars',#12402,$,$);
+#12404=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_09','Beverage stations',#12402,$,$);
+#12405=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_22','Dining halls',#12402,$,$);
+#12406=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_27','Enclosed dining areas',#12402,$,$);
+#12407=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_28','Food courts',#12402,$,$);
+#12408=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_42','Indoor dining rooms',#12402,$,$);
+#12409=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_43','Informal dining spaces',#12402,$,$);
+#12410=IFCCLASSIFICATIONREFERENCE($,'SL_40_20_59','Outdoor dining areas',#12402,$,$);
+#12411=IFCCLASSIFICATIONREFERENCE($,'SL_40_35','Historic spaces',#12389,$,$);
+#12412=IFCCLASSIFICATIONREFERENCE($,'SL_40_35_65','Protected historic zones',#12411,$,$);
+#12413=IFCCLASSIFICATIONREFERENCE($,'SL_40_55','Outdoor play and social areas',#12389,$,$);
+#12414=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_04','Artificial grass play areas',#12413,$,$);
+#12415=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_34','Grass play and social areas',#12413,$,$);
+#12416=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_36','Hard play and social areas',#12413,$,$);
+#12417=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_59','Outdoor seating areas',#12413,$,$);
+#12418=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_61','Playgrounds',#12413,$,$);
+#12419=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_64','Play equipment areas',#12413,$,$);
+#12420=IFCCLASSIFICATIONREFERENCE($,'SL_40_55_97','Woodland play and social areas',#12413,$,$);
+#12421=IFCCLASSIFICATIONREFERENCE($,'SL_40_60','Performing arts spaces',#12389,$,$);
+#12422=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_05','Auditoriums',#12421,$,$);
+#12423=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_06','Bandstands',#12421,$,$);
+#12424=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_11','Catwalks',#12421,$,$);
+#12425=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_13','Circus rings',#12421,$,$);
+#12426=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_21','Dance floors',#12421,$,$);
+#12427=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_31','Fixed stages',#12421,$,$);
+#12428=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_40','Indoor theatre spaces',#12421,$,$);
+#12429=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_52','Mobile stages',#12421,$,$);
+#12430=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_58','Orchestra pits',#12421,$,$);
+#12431=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_59','Outdoor theatre spaces',#12421,$,$);
+#12432=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_78','Sound recording studios',#12421,$,$);
+#12433=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_80','Sound shells',#12421,$,$);
+#12434=IFCCLASSIFICATIONREFERENCE($,'SL_40_60_81','Sound stages',#12421,$,$);
+#12435=IFCCLASSIFICATIONREFERENCE($,'SL_40_65','Performing arts ancillary spaces',#12389,$,$);
+#12436=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_04','Audience lobbies',#12435,$,$);
+#12437=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_24','Dressing rooms',#12435,$,$);
+#12438=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_35','Green rooms',#12435,$,$);
+#12439=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_47','Lighting and audio control spaces',#12435,$,$);
+#12440=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_66','Projection booths',#12435,$,$);
+#12441=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_70','Recording control spaces',#12435,$,$);
+#12442=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_72','Rehearsal rooms',#12435,$,$);
+#12443=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_76','Scenery control booths',#12435,$,$);
+#12444=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_79','Sound control spaces',#12435,$,$);
+#12445=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_80','Sound locks',#12435,$,$);
+#12446=IFCCLASSIFICATIONREFERENCE($,'SL_40_65_85','Stage wings',#12435,$,$);
+#12447=IFCCLASSIFICATIONREFERENCE($,'SL_42','Sport and activity spaces',#5,$,$);
+#12448=IFCCLASSIFICATIONREFERENCE($,'SL_42_15','Courts, pitches and field sports spaces',#12447,$,$);
+#12449=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_04','Artificial grass pitches',#12448,$,$);
+#12450=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_17','Cricket fields',#12448,$,$);
+#12451=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_18','Cricket pitches',#12448,$,$);
+#12452=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_32','Grass athletics areas',#12448,$,$);
+#12453=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_33','Grass pitches',#12448,$,$);
+#12454=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_34','Grass tennis courts',#12448,$,$);
+#12455=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_36','Hard outdoor tennis courts',#12448,$,$);
+#12456=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_37','High jump areas',#12448,$,$);
+#12457=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_44','Javelin throwing areas',#12448,$,$);
+#12458=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_47','Long jump tracks and pits',#12448,$,$);
+#12459=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_55','Multi-use games courts',#12448,$,$);
+#12460=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_59','Outdoor sports courts',#12448,$,$);
+#12461=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_60','Outdoor sports pitches and fields',#12448,$,$);
+#12462=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_65','Pole vaulting areas',#12448,$,$);
+#12463=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_72','Rounders fields',#12448,$,$);
+#12464=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_74','Running tracks',#12448,$,$);
+#12465=IFCCLASSIFICATIONREFERENCE($,'SL_42_15_78','Shot put and hammer throwing areas',#12448,$,$);
+#12466=IFCCLASSIFICATIONREFERENCE($,'SL_42_40','Indoor activity spaces',#12447,$,$);
+#12467=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_09','Bouldering spaces',#12466,$,$);
+#12468=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_14','Climbing wall spaces',#12466,$,$);
+#12469=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_20','Cycle tracks',#12466,$,$);
+#12470=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_23','Dojo',#12466,$,$);
+#12471=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_30','Fitness rooms',#12466,$,$);
+#12472=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_35','Gymnasiums',#12466,$,$);
+#12473=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_37','Gymnastics areas',#12466,$,$);
+#12474=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_42','Indoor sports courts',#12466,$,$);
+#12475=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_79','Snooker, billiards and pool halls',#12466,$,$);
+#12476=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_82','Sports halls',#12466,$,$);
+#12477=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_83','Squash courts',#12466,$,$);
+#12478=IFCCLASSIFICATIONREFERENCE($,'SL_42_40_90','Ten pin bowling alleys',#12466,$,$);
+#12479=IFCCLASSIFICATIONREFERENCE($,'SL_42_55','Outdoor activity spaces',#12447,$,$);
+#12480=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_01','Archery ranges',#12479,$,$);
+#12481=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_06','Ball-stop net areas',#12479,$,$);
+#12482=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_07','BMX cycling tracks',#12479,$,$);
+#12483=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_08','Bowling greens',#12479,$,$);
+#12484=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_17','Cross-country cycling courses',#12479,$,$);
+#12485=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_18','Cross-country equestrian courses',#12479,$,$);
+#12486=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_19','Cross-country rallying courses',#12479,$,$);
+#12487=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_20','Cross-country running courses',#12479,$,$);
+#12488=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_21','Cycling trails',#12479,$,$);
+#12489=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_23','Dog racing tracks',#12479,$,$);
+#12490=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_26','Equestrian arenas',#12479,$,$);
+#12491=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_35','Golf fairways',#12479,$,$);
+#12492=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_39','Horse racing courses',#12479,$,$);
+#12493=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_52','Mobility training trails',#12479,$,$);
+#12494=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_53','Motor racing tracks',#12479,$,$);
+#12495=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_56','Nature trails',#12479,$,$);
+#12496=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_58','Outdoor climbing areas',#12479,$,$);
+#12497=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_60','Parkour courses',#12479,$,$);
+#12498=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_65','Putting greens',#12479,$,$);
+#12499=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_72','Road running courses',#12479,$,$);
+#12500=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_76','Skateboarding parks',#12479,$,$);
+#12501=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_82','Speedway tracks',#12479,$,$);
+#12502=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_90','Trim trails',#12479,$,$);
+#12503=IFCCLASSIFICATIONREFERENCE($,'SL_42_55_96','Walking trails',#12479,$,$);
+#12504=IFCCLASSIFICATIONREFERENCE($,'SL_42_80','Sports and activity ancillary spaces',#12447,$,$);
+#12505=IFCCLASSIFICATIONREFERENCE($,'SL_42_80_65','Press boxes',#12504,$,$);
+#12506=IFCCLASSIFICATIONREFERENCE($,'SL_42_80_88','Technical areas and dugouts',#12504,$,$);
+#12507=IFCCLASSIFICATIONREFERENCE($,'SL_42_85','Swimming spaces',#12447,$,$);
+#12508=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_23','Diving pools',#12507,$,$);
+#12509=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_41','Indoor swimming pools',#12507,$,$);
+#12510=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_59','Outdoor swimming pools',#12507,$,$);
+#12511=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_64','Plunge pools',#12507,$,$);
+#12512=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_80','Spa pools',#12507,$,$);
+#12513=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_82','Splash pools',#12507,$,$);
+#12514=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_94','Water flumes, slides and tubes',#12507,$,$);
+#12515=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_97','Wave pools',#12507,$,$);
+#12516=IFCCLASSIFICATIONREFERENCE($,'SL_42_85_98','Whirlpools',#12507,$,$);
+#12517=IFCCLASSIFICATIONREFERENCE($,'SL_42_90','Water activity spaces',#12447,$,$);
+#12518=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_11','Canoe slalom courses',#12517,$,$);
+#12519=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_12','Canoe sprint courses',#12517,$,$);
+#12520=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_50','Motorboat courses',#12517,$,$);
+#12521=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_73','Rowing courses',#12517,$,$);
+#12522=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_75','Sailing courses',#12517,$,$);
+#12523=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_97','Water skiing courses',#12517,$,$);
+#12524=IFCCLASSIFICATIONREFERENCE($,'SL_42_90_98','White water canoe courses',#12517,$,$);
+#12525=IFCCLASSIFICATIONREFERENCE($,'SL_42_95','Winter sports spaces',#12447,$,$);
+#12526=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_02','Alpine skiing courses',#12525,$,$);
+#12527=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_04','Artificial ski slopes',#12525,$,$);
+#12528=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_08','Bobsleigh courses',#12525,$,$);
+#12529=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_19','Cross-country skiing courses',#12525,$,$);
+#12530=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_20','Curling rinks',#12525,$,$);
+#12531=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_32','Freestyle skiing courses',#12525,$,$);
+#12532=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_40','Ice skating rinks',#12525,$,$);
+#12533=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_76','Short track speed skating tracks',#12525,$,$);
+#12534=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_79','Ski jumps',#12525,$,$);
+#12535=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_80','Snowboarding courses',#12525,$,$);
+#12536=IFCCLASSIFICATIONREFERENCE($,'SL_42_95_83','Speed skating courses',#12525,$,$);
+#12537=IFCCLASSIFICATIONREFERENCE($,'SL_45','Residential spaces',#5,$,$);
+#12538=IFCCLASSIFICATIONREFERENCE($,'SL_45_10','Living spaces',#12537,$,$);
+#12539=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_06','Balconies',#12538,$,$);
+#12540=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_08','Bedroom-studies',#12538,$,$);
+#12541=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_09','Bedrooms',#12538,$,$);
+#12542=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_12','Caravan pitches',#12538,$,$);
+#12543=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_14','Communal living rooms',#12538,$,$);
+#12544=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_16','Concierge offices',#12538,$,$);
+#12545=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_18','Conservatories',#12538,$,$);
+#12546=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_22','Domestic dining rooms',#12538,$,$);
+#12547=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_23','Domestic kitchens',#12538,$,$);
+#12548=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_24','Dormitories',#12538,$,$);
+#12549=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_37','Hotel rooms',#12538,$,$);
+#12550=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_44','Kitchen-dining rooms',#12538,$,$);
+#12551=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_45','Kitchen-dining-living rooms',#12538,$,$);
+#12552=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_49','Living rooms',#12538,$,$);
+#12553=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_57','Nursing home bedrooms',#12538,$,$);
+#12554=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_60','Panic rooms',#12538,$,$);
+#12555=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_78','Single-occupancy bedrooms',#12538,$,$);
+#12556=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_85','Studies',#12538,$,$);
+#12557=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_88','Tent pitches',#12538,$,$);
+#12558=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_93','Utility rooms',#12538,$,$);
+#12559=IFCCLASSIFICATIONREFERENCE($,'SL_45_10_94','Verandas',#12538,$,$);
+#12560=IFCCLASSIFICATIONREFERENCE($,'SL_50','Waste disposal spaces and locations',#5,$,$);
+#12561=IFCCLASSIFICATIONREFERENCE($,'SL_50_10','Gas waste collection spaces',#12560,$,$);
+#12562=IFCCLASSIFICATIONREFERENCE($,'SL_50_10_94','Waste gas storage spaces',#12561,$,$);
+#12563=IFCCLASSIFICATIONREFERENCE($,'SL_50_20','Non-aqueous waste collection spaces',#12560,$,$);
+#12564=IFCCLASSIFICATIONREFERENCE($,'SL_50_25','Drainage collection locations',#12560,$,$);
+#12565=IFCCLASSIFICATIONREFERENCE($,'SL_50_25_36','Grip inlets',#12564,$,$);
+#12566=IFCCLASSIFICATIONREFERENCE($,'SL_50_25_41','Inlet discharge',#12564,$,$);
+#12567=IFCCLASSIFICATIONREFERENCE($,'SL_50_25_59','Outlet discharge',#12564,$,$);
+#12568=IFCCLASSIFICATIONREFERENCE($,'SL_50_30','Drainage collection spaces',#12560,$,$);
+#12569=IFCCLASSIFICATIONREFERENCE($,'SL_50_30_68','Pump-out stations',#12568,$,$);
+#12570=IFCCLASSIFICATIONREFERENCE($,'SL_50_35','Wastewater collection spaces',#12560,$,$);
+#12571=IFCCLASSIFICATIONREFERENCE($,'SL_50_35_08','Bioretention basins',#12570,$,$);
+#12572=IFCCLASSIFICATIONREFERENCE($,'SL_50_35_60','Solid waste storage spaces',#12570,$,$);
+#12573=IFCCLASSIFICATIONREFERENCE($,'SL_50_40','Dry waste collection spaces',#12560,$,$);
+#12574=IFCCLASSIFICATIONREFERENCE($,'SL_50_40_24','Dry waste storage spaces',#12573,$,$);
+#12575=IFCCLASSIFICATIONREFERENCE($,'SL_50_40_72','Refuse storage space',#12573,$,$);
+#12576=IFCCLASSIFICATIONREFERENCE($,'SL_50_50','Gas waste treatment and disposal spaces',#12560,$,$);
+#12577=IFCCLASSIFICATIONREFERENCE($,'SL_50_50_92','Waste gas treatment spaces',#12576,$,$);
+#12578=IFCCLASSIFICATIONREFERENCE($,'SL_50_60','Non-aqueous waste treatment and disposal spaces',#12560,$,$);
+#12579=IFCCLASSIFICATIONREFERENCE($,'SL_50_60_94','Waste liquids treatment spaces',#12578,$,$);
+#12580=IFCCLASSIFICATIONREFERENCE($,'SL_50_60_95','Waste liquids storage spaces',#12578,$,$);
+#12581=IFCCLASSIFICATIONREFERENCE($,'SL_50_70','Drainage treatment and disposal spaces',#12560,$,$);
+#12582=IFCCLASSIFICATIONREFERENCE($,'SL_50_75','Wastewater treatment and disposal spaces',#12560,$,$);
+#12583=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_26','Effluent outfalls',#12582,$,$);
+#12584=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_28','Evaporation ponds',#12582,$,$);
+#12585=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_35','Wastewater grass plots',#12582,$,$);
+#12586=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_71','Wastewater reed beds',#12582,$,$);
+#12587=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_85','Stormwater overflows',#12582,$,$);
+#12588=IFCCLASSIFICATIONREFERENCE($,'SL_50_75_95','Wastewater wetlands',#12582,$,$);
+#12589=IFCCLASSIFICATIONREFERENCE($,'SL_50_80','Dry waste treatment and disposal spaces',#12560,$,$);
+#12590=IFCCLASSIFICATIONREFERENCE($,'SL_50_80_40','Dry waste treatment spaces',#12589,$,$);
+#12591=IFCCLASSIFICATIONREFERENCE($,'SL_50_80_70','Dry waste disposal spaces',#12589,$,$);
+#12592=IFCCLASSIFICATIONREFERENCE($,'SL_55','Piped supply spaces',#5,$,$);
+#12593=IFCCLASSIFICATIONREFERENCE($,'SL_55_05','Gas extraction and treatment spaces',#12592,$,$);
+#12594=IFCCLASSIFICATIONREFERENCE($,'SL_55_05_30','Gas extraction spaces',#12593,$,$);
+#12595=IFCCLASSIFICATIONREFERENCE($,'SL_55_05_70','Gas treatment spaces',#12593,$,$);
+#12596=IFCCLASSIFICATIONREFERENCE($,'SL_55_10','Liquid fuel extraction and treatment spaces',#12592,$,$);
+#12597=IFCCLASSIFICATIONREFERENCE($,'SL_55_10_10','Oil extraction spaces',#12596,$,$);
+#12598=IFCCLASSIFICATIONREFERENCE($,'SL_55_10_50','Oil treatment spaces',#12596,$,$);
+#12599=IFCCLASSIFICATIONREFERENCE($,'SL_55_15','Water extraction and treatment spaces',#12592,$,$);
+#12600=IFCCLASSIFICATIONREFERENCE($,'SL_55_15_10','Water extraction spaces',#12599,$,$);
+#12601=IFCCLASSIFICATIONREFERENCE($,'SL_55_15_50','Water treatment spaces',#12599,$,$);
+#12602=IFCCLASSIFICATIONREFERENCE($,'SL_55_15_70','Raw water intakes',#12599,$,$);
+#12603=IFCCLASSIFICATIONREFERENCE($,'SL_55_20','Gas supply spaces',#12592,$,$);
+#12604=IFCCLASSIFICATIONREFERENCE($,'SL_55_20_34','Gas storage spaces',#12603,$,$);
+#12605=IFCCLASSIFICATIONREFERENCE($,'SL_55_20_65','Service gas supply pipes',#12603,$,$);
+#12606=IFCCLASSIFICATIONREFERENCE($,'SL_55_30','Fire-extinguishing supply spaces',#12592,$,$);
+#12607=IFCCLASSIFICATIONREFERENCE($,'SL_55_30_80','Sprinkler tank enclosures',#12606,$,$);
+#12608=IFCCLASSIFICATIONREFERENCE($,'SL_55_40','Steam supply spaces',#12592,$,$);
+#12609=IFCCLASSIFICATIONREFERENCE($,'SL_55_50','Liquid fuel supply spaces',#12592,$,$);
+#12610=IFCCLASSIFICATIONREFERENCE($,'SL_55_50_32','Fuel storage areas',#12609,$,$);
+#12611=IFCCLASSIFICATIONREFERENCE($,'SL_55_50_58','Oil storage spaces',#12609,$,$);
+#12612=IFCCLASSIFICATIONREFERENCE($,'SL_55_60','Process liquid supply spaces',#12592,$,$);
+#12613=IFCCLASSIFICATIONREFERENCE($,'SL_55_65','Ventilation and air conditioning spaces',#12592,$,$);
+#12614=IFCCLASSIFICATIONREFERENCE($,'SL_55_70','Water supply spaces',#12592,$,$);
+#12615=IFCCLASSIFICATIONREFERENCE($,'SL_55_70_65','Private water supply pipes',#12614,$,$);
+#12616=IFCCLASSIFICATIONREFERENCE($,'SL_55_70_95','Water supply pedestals',#12614,$,$);
+#12617=IFCCLASSIFICATIONREFERENCE($,'SL_55_90','Piped solids supply spaces',#12592,$,$);
+#12618=IFCCLASSIFICATIONREFERENCE($,'SL_60','Heating, cooling and refrigeration spaces',#5,$,$);
+#12619=IFCCLASSIFICATIONREFERENCE($,'SL_60_30','Rail and paving heating spaces',#12618,$,$);
+#12620=IFCCLASSIFICATIONREFERENCE($,'SL_60_40','Space heating and cooling spaces',#12618,$,$);
+#12621=IFCCLASSIFICATIONREFERENCE($,'SL_60_60','Refrigeration spaces',#12618,$,$);
+#12622=IFCCLASSIFICATIONREFERENCE($,'SL_60_80','Drying spaces',#12618,$,$);
+#12623=IFCCLASSIFICATIONREFERENCE($,'SL_60_80_25','Drying rooms',#12622,$,$);
+#12624=IFCCLASSIFICATIONREFERENCE($,'SL_70','Electrical power generation and lighting spaces',#5,$,$);
+#12625=IFCCLASSIFICATIONREFERENCE($,'SL_70_10','Electrical power generation spaces',#12624,$,$);
+#12626=IFCCLASSIFICATIONREFERENCE($,'SL_70_10_82','Solar arrays',#12625,$,$);
+#12627=IFCCLASSIFICATIONREFERENCE($,'SL_70_10_91','Turbine rooms',#12625,$,$);
+#12628=IFCCLASSIFICATIONREFERENCE($,'SL_70_30','Electricity distribution and transmission spaces',#12624,$,$);
+#12629=IFCCLASSIFICATIONREFERENCE($,'SL_70_30_26','Electrical distribution pedestals',#12628,$,$);
+#12630=IFCCLASSIFICATIONREFERENCE($,'SL_70_30_35','High-voltage electricity substation chambers',#12628,$,$);
+#12631=IFCCLASSIFICATIONREFERENCE($,'SL_70_30_45','Low-voltage electricity substation chambers',#12628,$,$);
+#12632=IFCCLASSIFICATIONREFERENCE($,'SL_70_30_92','Uninterruptible power supply rooms',#12628,$,$);
+#12633=IFCCLASSIFICATIONREFERENCE($,'SL_75','Communications, security, safety and protection spaces',#5,$,$);
+#12634=IFCCLASSIFICATIONREFERENCE($,'SL_75_10','Communications spaces',#12633,$,$);
+#12635=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_21','Communications equipment rooms',#12634,$,$);
+#12636=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_23','Digital data transmission networks',#12634,$,$);
+#12637=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_70','Radio broadcast control booths',#12634,$,$);
+#12638=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_73','Radio studios',#12634,$,$);
+#12639=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_88','Telecommunications control spaces',#12634,$,$);
+#12640=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_89','Telephone boxes and booths',#12634,$,$);
+#12641=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_90','Telephone exchange spaces',#12634,$,$);
+#12642=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_91','Television broadcast control booths',#12634,$,$);
+#12643=IFCCLASSIFICATIONREFERENCE($,'SL_75_10_93','Television studios',#12634,$,$);
+#12644=IFCCLASSIFICATIONREFERENCE($,'SL_75_30','Signalling spaces',#12633,$,$);
+#12645=IFCCLASSIFICATIONREFERENCE($,'SL_75_30_80','Signal boxes',#12644,$,$);
+#12646=IFCCLASSIFICATIONREFERENCE($,'SL_75_40','Electronic security spaces',#12633,$,$);
+#12647=IFCCLASSIFICATIONREFERENCE($,'SL_75_40_28','Electronic security control rooms',#12646,$,$);
+#12648=IFCCLASSIFICATIONREFERENCE($,'SL_75_50','Safety and protection spaces',#12633,$,$);
+#12649=IFCCLASSIFICATIONREFERENCE($,'SL_75_50_30','Exclusion zones',#12648,$,$);
+#12650=IFCCLASSIFICATIONREFERENCE($,'SL_75_50_33','Gas zones',#12648,$,$);
+#12651=IFCCLASSIFICATIONREFERENCE($,'SL_75_60','Environmental safety',#12633,$,$);
+#12652=IFCCLASSIFICATIONREFERENCE($,'SL_75_70','Control and management spaces',#12633,$,$);
+#12653=IFCCLASSIFICATIONREFERENCE($,'SL_75_80','Protection spaces',#12633,$,$);
+#12654=IFCCLASSIFICATIONREFERENCE($,'SL_80','Transport spaces',#5,$,$);
+#12655=IFCCLASSIFICATIONREFERENCE($,'SL_80_05','Aerospace ground spaces',#12654,$,$);
+#12656=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_01','Aircraft apron bays',#12655,$,$);
+#12657=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_02','Aeroplane landing strips',#12655,$,$);
+#12658=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_03','Aeroplane runways',#12655,$,$);
+#12659=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_04','Aircraft fuelling spaces',#12655,$,$);
+#12660=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_05','Aircraft manoeuvring areas',#12655,$,$);
+#12661=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_06','Aircraft standing areas',#12655,$,$);
+#12662=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_07','Aircraft storage spaces',#12655,$,$);
+#12663=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_33','Gliding runways',#12655,$,$);
+#12664=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_37','Hang-gliding launch spaces',#12655,$,$);
+#12665=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_38','Helipads',#12655,$,$);
+#12666=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_82','Spacecraft landing strips',#12655,$,$);
+#12667=IFCCLASSIFICATIONREFERENCE($,'SL_80_05_84','Spacecraft launch pads',#12655,$,$);
+#12668=IFCCLASSIFICATIONREFERENCE($,'SL_80_10','Loading and embarkation spaces',#12654,$,$);
+#12669=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_06','Baggage claim areas',#12668,$,$);
+#12670=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_07','Baggage handling areas',#12668,$,$);
+#12671=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_09','Boarding areas',#12668,$,$);
+#12672=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_10','Bus stops',#12668,$,$);
+#12673=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_12','Cargo handling areas',#12668,$,$);
+#12674=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_13','Cargo loading areas',#12668,$,$);
+#12675=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_16','Concourses',#12668,$,$);
+#12676=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_20','Customs control areas',#12668,$,$);
+#12677=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_22','Departure lounges',#12668,$,$);
+#12678=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_55','Passenger gates',#12668,$,$);
+#12679=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_60','Passport control offices',#12668,$,$);
+#12680=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_77','Security screening areas',#12668,$,$);
+#12681=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_80','Ship gangways',#12668,$,$);
+#12682=IFCCLASSIFICATIONREFERENCE($,'SL_80_10_94','Vehicle drop-off areas',#12668,$,$);
+#12683=IFCCLASSIFICATIONREFERENCE($,'SL_80_15','Aerospace maintenance spaces',#12654,$,$);
+#12684=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_01','Aircraft cleaning spaces',#12683,$,$);
+#12685=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_04','Aircraft repair spaces',#12683,$,$);
+#12686=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_06','Airport control spaces',#12683,$,$);
+#12687=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_79','Spacecraft cleaning spaces',#12683,$,$);
+#12688=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_81','Spacecraft preparation spaces',#12683,$,$);
+#12689=IFCCLASSIFICATIONREFERENCE($,'SL_80_15_82','Spacecraft repair spaces',#12683,$,$);
+#12690=IFCCLASSIFICATIONREFERENCE($,'SL_80_20','Cableways',#12654,$,$);
+#12691=IFCCLASSIFICATIONREFERENCE($,'SL_80_20_13','Cableways',#12690,$,$);
+#12692=IFCCLASSIFICATIONREFERENCE($,'SL_80_30','Cable transport storage and maintenance spaces',#12654,$,$);
+#12693=IFCCLASSIFICATIONREFERENCE($,'SL_80_30_34','Gondola repair and cleaning spaces',#12692,$,$);
+#12694=IFCCLASSIFICATIONREFERENCE($,'SL_80_30_35','Gondola storage spaces',#12692,$,$);
+#12695=IFCCLASSIFICATIONREFERENCE($,'SL_80_35','Road spaces',#12654,$,$);
+#12696=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_04','Arrestor beds',#12695,$,$);
+#12697=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_08','Bus manoeuvring areas',#12695,$,$);
+#12698=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_11','Car manoeuvring areas',#12695,$,$);
+#12699=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_13','Carriageways',#12695,$,$);
+#12700=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_16','Central reservations',#12695,$,$);
+#12701=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_17','Channelizing islands',#12695,$,$);
+#12702=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_18','Crossover spaces',#12695,$,$);
+#12703=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_19','Cycle crossings',#12695,$,$);
+#12704=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_20','Cycle lanes',#12695,$,$);
+#12705=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_22','Diversion routes',#12695,$,$);
+#12706=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_36','Hard shoulders',#12695,$,$);
+#12707=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_37','Hard standings',#12695,$,$);
+#12708=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_39','Highway pull-offs',#12695,$,$);
+#12709=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_40','Highway roundabouts',#12695,$,$);
+#12710=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_42','Intersections',#12695,$,$);
+#12711=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_44','Junctions',#12695,$,$);
+#12712=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_45','Lanes',#12695,$,$);
+#12713=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_46','Lay-bys and passing places',#12695,$,$);
+#12714=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_57','Non-motorized use crossings',#12695,$,$);
+#12715=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_59','Oxbow laybys',#12695,$,$);
+#12716=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_62','Pedestrian crossings',#12695,$,$);
+#12717=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_63','Pedestrian routes',#12695,$,$);
+#12718=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_64','Pedestrian refuges and islands',#12695,$,$);
+#12719=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_66','Police ramps',#12695,$,$);
+#12720=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_70','Railway crossings',#12695,$,$);
+#12721=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_71','Refuge areas',#12695,$,$);
+#12722=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_72','Roadside rest areas',#12695,$,$);
+#12723=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_74','Road sections',#12695,$,$);
+#12724=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_75','Roundabouts',#12695,$,$);
+#12725=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_77','Side reservations',#12695,$,$);
+#12726=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_78','Side road carriageways',#12695,$,$);
+#12727=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_80','Slip road carriageways',#12695,$,$);
+#12728=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_81','Soft shoulders',#12695,$,$);
+#12729=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_87','Taxi ranks',#12695,$,$);
+#12730=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_90','Truck manoeuvring areas',#12695,$,$);
+#12731=IFCCLASSIFICATIONREFERENCE($,'SL_80_35_94','Vaulted spaces',#12695,$,$);
+#12732=IFCCLASSIFICATIONREFERENCE($,'SL_80_40','Pathway spaces',#12654,$,$);
+#12733=IFCCLASSIFICATIONREFERENCE($,'SL_80_40_15','Covered paths',#12732,$,$);
+#12734=IFCCLASSIFICATIONREFERENCE($,'SL_80_40_60','Paths',#12732,$,$);
+#12735=IFCCLASSIFICATIONREFERENCE($,'SL_80_45','Vehicle storage spaces',#12654,$,$);
+#12736=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_01','Accessible parking spaces',#12735,$,$);
+#12737=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_09','Bus standing spaces',#12735,$,$);
+#12738=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_11','Car park attendant booths',#12735,$,$);
+#12739=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_13','Car park ramps',#12735,$,$);
+#12740=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_15','Cycle parking spaces',#12735,$,$);
+#12741=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_40','Indoor vehicle parking spaces',#12735,$,$);
+#12742=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_59','Outdoor vehicle parking spaces',#12735,$,$);
+#12743=IFCCLASSIFICATIONREFERENCE($,'SL_80_45_91','Truck standing spaces',#12735,$,$);
+#12744=IFCCLASSIFICATIONREFERENCE($,'SL_80_50','Railway spaces',#12654,$,$);
+#12745=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_11','Carriage cleaning spaces',#12744,$,$);
+#12746=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_24','Double-sided platforms',#12744,$,$);
+#12747=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_26','Engine fuelling areas',#12744,$,$);
+#12748=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_27','Engine inspection pits',#12744,$,$);
+#12749=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_28','Engine servicing areas',#12744,$,$);
+#12750=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_29','Engine wash areas',#12744,$,$);
+#12751=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_44','Railway junctions',#12744,$,$);
+#12752=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_47','Light rail stops',#12744,$,$);
+#12753=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_50','Marshalling yards',#12744,$,$);
+#12754=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_58','Railway overpasses',#12744,$,$);
+#12755=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_70','Rail repair spaces',#12744,$,$);
+#12756=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_71','Railway side reservations',#12744,$,$);
+#12757=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_72','Railway lines',#12744,$,$);
+#12758=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_74','Railway sections',#12744,$,$);
+#12759=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_76','Railway sidings',#12744,$,$);
+#12760=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_77','Railway signal control spaces',#12744,$,$);
+#12761=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_78','Rolling stock inspection spaces',#12744,$,$);
+#12762=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_79','Signalling equipment rooms',#12744,$,$);
+#12763=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_80','Single-sided platforms',#12744,$,$);
+#12764=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_85','Stabling yards',#12744,$,$);
+#12765=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_88','Track paralleling huts',#12744,$,$);
+#12766=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_90','Train halts',#12744,$,$);
+#12767=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_92','Railway underpasses',#12744,$,$);
+#12768=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_95','Wagon decontamination spaces',#12744,$,$);
+#12769=IFCCLASSIFICATIONREFERENCE($,'SL_80_50_97','Wagon maintenance spaces',#12744,$,$);
+#12770=IFCCLASSIFICATIONREFERENCE($,'SL_80_70','Marine and waterways transport spaces',#12654,$,$);
+#12771=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_11','Canal lock chambers',#12770,$,$);
+#12772=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_33','Gate quoins',#12770,$,$);
+#12773=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_37','Harbour locks',#12770,$,$);
+#12774=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_46','Lock gate sills',#12770,$,$);
+#12775=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_48','Lock islands',#12770,$,$);
+#12776=IFCCLASSIFICATIONREFERENCE($,'SL_80_70_96','Winding holes',#12770,$,$);
+#12777=IFCCLASSIFICATIONREFERENCE($,'SL_80_90','Transport hubs',#12654,$,$);
+#12778=IFCCLASSIFICATIONREFERENCE($,'SL_80_92','Grid systems',#12654,$,$);
+#12779=IFCCLASSIFICATIONREFERENCE($,'SL_80_92_34','Geospatial grids',#12778,$,$);
+#12780=IFCCLASSIFICATIONREFERENCE($,'SL_80_92_37','Horizontal alignment grids',#12778,$,$);
+#12781=IFCCLASSIFICATIONREFERENCE($,'SL_80_92_94','Vertical alignment grids',#12778,$,$);
+#12782=IFCCLASSIFICATIONREFERENCE($,'SL_80_94','Bridge and structure spaces',#12654,$,$);
+#12783=IFCCLASSIFICATIONREFERENCE($,'SL_80_94_02','Abutment faces',#12782,$,$);
+#12784=IFCCLASSIFICATIONREFERENCE($,'SL_80_94_07','Bearing shelves',#12782,$,$);
+#12785=IFCCLASSIFICATIONREFERENCE($,'SL_80_94_09','Bridge aprons',#12782,$,$);
+#12786=IFCCLASSIFICATIONREFERENCE($,'SL_80_94_71','Retaining wall aprons',#12782,$,$);
+#12787=IFCCLASSIFICATIONREFERENCE($,'SL_80_96','Tunnel and shaft spaces',#12654,$,$);
+#12788=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_15','Concourse tunnels',#12787,$,$);
+#12789=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_18','Crossover tunnels',#12787,$,$);
+#12790=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_20','Drift tunnel portals',#12787,$,$);
+#12791=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_44','Junction tunnels',#12787,$,$);
+#12792=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_58','Overrun tunnels',#12787,$,$);
+#12793=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_60','Passageway tunnels',#12787,$,$);
+#12794=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_64','Platform tunnels',#12787,$,$);
+#12795=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_78','Sidings tunnels',#12787,$,$);
+#12796=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_89','Tunnel boring machine (TBM) launching and retrieval shafts',#12787,$,$);
+#12797=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_90','Tunnel dives',#12787,$,$);
+#12798=IFCCLASSIFICATIONREFERENCE($,'SL_80_96_91','Turnback tunnels',#12787,$,$);
+#12799=IFCCLASSIFICATIONREFERENCE($,'SL_80_98','Transport kinematic envelopes',#12654,$,$);
+#12800=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_09','Bridge headrooms',#12799,$,$);
+#12801=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_13','Chainage',#12799,$,$);
+#12802=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_15','Collapse radius',#12799,$,$);
+#12803=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_46','Lateral safety zones',#12799,$,$);
+#12804=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_48','Longitudinal safety zones',#12799,$,$);
+#12805=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_70','Rail kinematic envelope',#12799,$,$);
+#12806=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_72','Restricted speed zones',#12799,$,$);
+#12807=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_75','Safety clearance zones',#12799,$,$);
+#12808=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_83','Structure gauge',#12799,$,$);
+#12809=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_85','Swept path areas',#12799,$,$);
+#12810=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_90','Tunnel headrooms',#12799,$,$);
+#12811=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_94','Vehicle loading gauge',#12799,$,$);
+#12812=IFCCLASSIFICATIONREFERENCE($,'SL_80_98_97','Working widths',#12799,$,$);
+#12813=IFCCLASSIFICATIONREFERENCE($,'SL_82','Vehicle spaces',#5,$,$);
+#12814=IFCCLASSIFICATIONREFERENCE($,'SL_82_61','Passenger spaces',#12813,$,$);
+#12815=IFCCLASSIFICATIONREFERENCE($,'SL_82_61_61','Passenger seating spaces',#12814,$,$);
+#12816=IFCCLASSIFICATIONREFERENCE($,'SL_82_61_62','Passenger standing spaces',#12814,$,$);
+#12817=IFCCLASSIFICATIONREFERENCE($,'SL_82_61_63','Passenger wheelchair spaces',#12814,$,$);
+#12818=IFCCLASSIFICATIONREFERENCE($,'SL_82_61_65','Priority passenger seating spaces',#12814,$,$);
+#12819=IFCCLASSIFICATIONREFERENCE($,'SL_90','General spaces',#5,$,$);
+#12820=IFCCLASSIFICATIONREFERENCE($,'SL_90_10','Circulation spaces',#12819,$,$);
+#12821=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_02','Airlocks',#12820,$,$);
+#12822=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_04','Atriums',#12820,$,$);
+#12823=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_08','Breezeways',#12820,$,$);
+#12824=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_15','Corridors',#12820,$,$);
+#12825=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_16','Covered walkways and internal bridges',#12820,$,$);
+#12826=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_17','Courtyards',#12820,$,$);
+#12827=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_24','Drop-off and collection areas',#12820,$,$);
+#12828=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_27','Entrance halls',#12820,$,$);
+#12829=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_28','Escalators',#12820,$,$);
+#12830=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_34','Goods conveyors',#12820,$,$);
+#12831=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_36','Hallways',#12820,$,$);
+#12832=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_46','Landings',#12820,$,$);
+#12833=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_47','Lifts',#12820,$,$);
+#12834=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_51','Lobbies',#12820,$,$);
+#12835=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_64','Porches',#12820,$,$);
+#12836=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_68','Public squares',#12820,$,$);
+#12837=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_71','Retail circulation spaces',#12820,$,$);
+#12838=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_77','Shelters',#12820,$,$);
+#12839=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_87','Stairways',#12820,$,$);
+#12840=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_90','Travellators',#12820,$,$);
+#12841=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_94','Vestibules',#12820,$,$);
+#12842=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_95','Walkways',#12820,$,$);
+#12843=IFCCLASSIFICATIONREFERENCE($,'SL_90_10_96','Wheelchair circulation spaces',#12820,$,$);
+#12844=IFCCLASSIFICATIONREFERENCE($,'SL_90_20','Common spaces',#12819,$,$);
+#12845=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_01','Accident and emergency waiting rooms',#12844,$,$);
+#12846=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_02','Air spaces',#12844,$,$);
+#12847=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_04','Audience seating areas',#12844,$,$);
+#12848=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_05','Audience standing areas',#12844,$,$);
+#12849=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_08','Breakout spaces',#12844,$,$);
+#12850=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_13','Changing rooms',#12844,$,$);
+#12851=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_14','Cloakrooms',#12844,$,$);
+#12852=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_15','Corporate boxes and VIP seating',#12844,$,$);
+#12853=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_16','Customer service counter areas',#12844,$,$);
+#12854=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_27','Entry points',#12844,$,$);
+#12855=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_69','Queuing areas',#12844,$,$);
+#12856=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_80','Social spaces',#12844,$,$);
+#12857=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_82','Spectator seating areas',#12844,$,$);
+#12858=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_83','Spectator standing areas',#12844,$,$);
+#12859=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_85','Staff rooms',#12844,$,$);
+#12860=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_86','Staff workrooms',#12844,$,$);
+#12861=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_88','Temporary seating areas',#12844,$,$);
+#12862=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_89','Ticket offices',#12844,$,$);
+#12863=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_91','Terraces',#12844,$,$);
+#12864=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_96','Waiting rooms',#12844,$,$);
+#12865=IFCCLASSIFICATIONREFERENCE($,'SL_90_20_98','Work booths',#12844,$,$);
+#12866=IFCCLASSIFICATIONREFERENCE($,'SL_90_30','Construction voids',#12819,$,$);
+#12867=IFCCLASSIFICATIONREFERENCE($,'SL_90_30_25','Excavation volumes',#12866,$,$);
+#12868=IFCCLASSIFICATIONREFERENCE($,'SL_90_30_30','Finishes allowances',#12866,$,$);
+#12869=IFCCLASSIFICATIONREFERENCE($,'SL_90_30_80','Space proofing envelopes',#12866,$,$);
+#12870=IFCCLASSIFICATIONREFERENCE($,'SL_90_30_90','Tolerance zones',#12866,$,$);
+#12871=IFCCLASSIFICATIONREFERENCE($,'SL_90_40','General levels',#12819,$,$);
+#12872=IFCCLASSIFICATIONREFERENCE($,'SL_90_40_46','Levels',#12871,$,$);
+#12873=IFCCLASSIFICATIONREFERENCE($,'SL_90_50','Storage spaces',#12819,$,$);
+#12874=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_04','Arms depots and armouries',#12873,$,$);
+#12875=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_06','Baggage storage areas',#12873,$,$);
+#12876=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_07','Battery stores',#12873,$,$);
+#12877=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_08','Blood banks',#12873,$,$);
+#12878=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_09','Boat storage spaces',#12873,$,$);
+#12879=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_11','Cargo storage areas',#12873,$,$);
+#12880=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_12','Carports',#12873,$,$);
+#12881=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_13','Chemicals stores',#12873,$,$);
+#12882=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_14','Clothes stores',#12873,$,$);
+#12883=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_15','Cold stores',#12873,$,$);
+#12884=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_16','Cleaners'' stores',#12873,$,$);
+#12885=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_17','Cycle storage spaces',#12873,$,$);
+#12886=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_18','Classroom stores',#12873,$,$);
+#12887=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_19','Coats and bags stores',#12873,$,$);
+#12888=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_22','Dining furniture stores',#12873,$,$);
+#12889=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_25','Dungsteads',#12873,$,$);
+#12890=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_27','Equipment stores',#12873,$,$);
+#12891=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_28','Explosives and ordnance storerooms',#12873,$,$);
+#12892=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_29','Food stores',#12873,$,$);
+#12893=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_30','Feed stores',#12873,$,$);
+#12894=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_31','Flammable chemical stores',#12873,$,$);
+#12895=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_32','Furniture stores',#12873,$,$);
+#12896=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_33','Garages',#12873,$,$);
+#12897=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_35','General storerooms',#12873,$,$);
+#12898=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_36','Goods stores',#12873,$,$);
+#12899=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_37','Grain stores',#12873,$,$);
+#12900=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_38','Hazardous waste storage spaces',#12873,$,$);
+#12901=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_44','Janitor stores',#12873,$,$);
+#12902=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_45','Keg stores',#12873,$,$);
+#12903=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_46','Larders and pantries',#12873,$,$);
+#12904=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_47','Left luggage stores',#12873,$,$);
+#12905=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_48','Locker rooms',#12873,$,$);
+#12906=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_52','Mineral storage spaces',#12873,$,$);
+#12907=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_54','Morgues',#12873,$,$);
+#12908=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_55','Mortuaries',#12873,$,$);
+#12909=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_65','Pharmaceutical stores',#12873,$,$);
+#12910=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_71','Raw materials storage spaces',#12873,$,$);
+#12911=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_73','Retractable seating storage',#12873,$,$);
+#12912=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_77','Secure storerooms',#12873,$,$);
+#12913=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_80','Solid fuel storerooms',#12873,$,$);
+#12914=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_82','Sports equipment stores',#12873,$,$);
+#12915=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_84','Storage rooms',#12873,$,$);
+#12916=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_85','Storage silos',#12873,$,$);
+#12917=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_86','Storage tanks',#12873,$,$);
+#12918=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_87','Teaching resources stores',#12873,$,$);
+#12919=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_88','Tissue and organ stores',#12873,$,$);
+#12920=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_90','Vaults and strong rooms',#12873,$,$);
+#12921=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_93','Walk-in wardrobes',#12873,$,$);
+#12922=IFCCLASSIFICATIONREFERENCE($,'SL_90_50_98','Wine cellars',#12873,$,$);
+#12923=IFCCLASSIFICATIONREFERENCE($,'SL_90_60','Unoccupied voids',#12819,$,$);
+#12924=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_01','Access spaces',#12923,$,$);
+#12925=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_02','Air shafts',#12923,$,$);
+#12926=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_07','Belfries',#12923,$,$);
+#12927=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_10','Cavities',#12923,$,$);
+#12928=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_13','Chutes',#12923,$,$);
+#12929=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_18','Crawl spaces',#12923,$,$);
+#12930=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_30','Flues',#12923,$,$);
+#12931=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_49','Lift pits',#12923,$,$);
+#12932=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_50','Lift shafts',#12923,$,$);
+#12933=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_51','Light wells',#12923,$,$);
+#12934=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_64','Platform voids',#12923,$,$);
+#12935=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_72','Roof surface spaces',#12923,$,$);
+#12936=IFCCLASSIFICATIONREFERENCE($,'SL_90_60_74','Roof voids',#12923,$,$);
+#12937=IFCCLASSIFICATIONREFERENCE($,'SL_90_90','Plant and control spaces',#12819,$,$);
+#12938=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_01','Access floor voids',#12937,$,$);
+#12939=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_08','Boiler rooms',#12937,$,$);
+#12940=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_13','Ceiling voids',#12937,$,$);
+#12941=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_15','Control rooms',#12937,$,$);
+#12942=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_32','Furnace rooms',#12937,$,$);
+#12943=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_42','Incinerator rooms',#12937,$,$);
+#12944=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_48','Lift machine rooms',#12937,$,$);
+#12945=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_63','Plant enclosures',#12937,$,$);
+#12946=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_64','Plant rooms',#12937,$,$);
+#12947=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_68','Pump rooms',#12937,$,$);
+#12948=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_77','Server rooms',#12937,$,$);
+#12949=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_78','Services shafts',#12937,$,$);
+#12950=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_85','Switch rooms',#12937,$,$);
+#12951=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_87','Tank rooms',#12937,$,$);
+#12952=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_90','Transformer rooms',#12937,$,$);
+#12953=IFCCLASSIFICATIONREFERENCE($,'SL_90_90_96','Wall services voids',#12937,$,$);
+#12954=IFCCLASSIFICATIONREFERENCE($,'Ss_15','Earthworks, remediation and temporary systems',#7,$,$);
+#12955=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10','Groundworks and earthworks systems',#12954,$,$);
+#12956=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30','Excavating, filling and erosion control systems',#12955,$,$);
+#12957=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_05','Backfill systems',#12956,$,$);
+#12958=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_25','Earthworks excavating systems',#12956,$,$);
+#12959=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_27','Earthworks filling systems',#12956,$,$);
+#12960=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_29','Earthworks filling systems around trees',#12956,$,$);
+#12961=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_31','Earthworks filling systems behind retaining walls',#12956,$,$);
+#12962=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_33','Erosion control systems',#12956,$,$);
+#12963=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_65','Puddled clay lining systems',#12956,$,$);
+#12964=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_30_90','Topsoil filling systems',#12956,$,$);
+#12965=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_33','Ground gas disposal systems',#12955,$,$);
+#12966=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_33_34','Ground gas collection and venting systems',#12965,$,$);
+#12967=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35','Ground remediation systems',#12955,$,$);
+#12968=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_07','Bioremediation systems',#12967,$,$);
+#12969=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_23','Deep dry soil mixing systems',#12967,$,$);
+#12970=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_25','Dynamic deep compaction systems',#12967,$,$);
+#12971=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_92','Vibro-compaction systems',#12967,$,$);
+#12972=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_94','Vibro-stone column systems',#12967,$,$);
+#12973=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_35_97','Wet soil mixing systems',#12967,$,$);
+#12974=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_45','Landfill systems',#12955,$,$);
+#12975=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_76','Site waste disposal systems',#12955,$,$);
+#12976=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_76_21','Dewatering systems',#12975,$,$);
+#12977=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_78','Slurry wall systems',#12955,$,$);
+#12978=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80','Stabilization systems',#12955,$,$);
+#12979=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80_15','Concrete column stabilization systems',#12978,$,$);
+#12980=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80_70','Rock bolting and dowelling systems',#12978,$,$);
+#12981=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80_75','Rock fissure grouting systems',#12978,$,$);
+#12982=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80_80','Soil nailing systems',#12978,$,$);
+#12983=IFCCLASSIFICATIONREFERENCE($,'Ss_15_10_80_85','Subterranean void filling systems',#12978,$,$);
+#12984=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30','Remediation, repair and renovation systems',#12954,$,$);
+#12985=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_10','Building services remediation systems',#12984,$,$);
+#12986=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_12','Ceramics repair and renovation systems',#12984,$,$);
+#12987=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_15','Concrete and masonry cleaning systems',#12984,$,$);
+#12988=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_15_15','Concrete cleaning systems',#12987,$,$);
+#12989=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_15_50','Masonry cleaning systems',#12987,$,$);
+#12990=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_15_65','Preliminary concrete cleaning systems',#12987,$,$);
+#12991=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_15_66','Preliminary masonry cleaning systems',#12987,$,$);
+#12992=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17','Concrete repair and renovation systems',#12984,$,$);
+#12993=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_10','Bonded steel plate repair systems',#12992,$,$);
+#12994=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_12','Concrete crack repair or filling systems',#12992,$,$);
+#12995=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_14','Concrete mortar or overlay systems',#12992,$,$);
+#12996=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_16','Concrete protective coating systems',#12992,$,$);
+#12997=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_18','Concrete repair systems',#12992,$,$);
+#12998=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_17_85','Sprayed concrete repair systems',#12992,$,$);
+#12999=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32','Fungus and beetle eradication systems',#12984,$,$);
+#13000=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_05','Beetle eradication systems',#12999,$,$);
+#13001=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_15','Combined fungus and beetle treatment systems',#12999,$,$);
+#13002=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_35','Hot air infestation treatment systems',#12999,$,$);
+#13003=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_50','Masonry fungus treatment systems',#12999,$,$);
+#13004=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_85','Termite treatment systems',#12999,$,$);
+#13005=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_32_90','Timber fungus treatment systems',#12999,$,$);
+#13006=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_33','Glass repair and renovation systems',#12984,$,$);
+#13007=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_50','Masonry repair and renovation systems',#12984,$,$);
+#13008=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_50_50','Masonry repair systems',#13007,$,$);
+#13009=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_50_53','Mortar joint repair systems',#13007,$,$);
+#13010=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_50_55','Mortar repointing systems',#13007,$,$);
+#13011=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52','Metal repair and renovation systems',#12984,$,$);
+#13012=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52_03','Aluminium repair systems',#13011,$,$);
+#13013=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52_15','Copper repair systems',#13011,$,$);
+#13014=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52_42','Iron repair systems',#13011,$,$);
+#13015=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52_46','Lead repair systems',#13011,$,$);
+#13016=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_52_84','Steel repair systems',#13011,$,$);
+#13017=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65','Pipeline renovation systems',#12984,$,$);
+#13018=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_15','Close-fit plastics pipe lining systems',#13017,$,$);
+#13019=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_17','Continuous plastics pipe lining systems',#13017,$,$);
+#13020=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_20','Cured in place lining systems',#13017,$,$);
+#13021=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_65','Preformed lining systems',#13017,$,$);
+#13022=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_72','Rigidly anchored plastics inner layer (RAPL) lining systems',#13017,$,$);
+#13023=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_80','Spray lining systems',#13017,$,$);
+#13024=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_65_81','Spirally wound plastics pipe lining systems',#13017,$,$);
+#13025=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_90','Timber repair and renovation systems',#12984,$,$);
+#13026=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_90_84','Timber joint strengthening systems',#13025,$,$);
+#13027=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_90_86','Timber section repair systems',#13025,$,$);
+#13028=IFCCLASSIFICATIONREFERENCE($,'Ss_15_30_90_90','Timber section strengthening systems',#13025,$,$);
+#13029=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95','Temporary works systems',#12954,$,$);
+#13030=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_15','Temporary preparatory works systems',#13029,$,$);
+#13031=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_15_10','Borehole systems',#13030,$,$);
+#13032=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_17','Temporary protection systems',#13029,$,$);
+#13033=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_17_90','Temporary backfill systems',#13032,$,$);
+#13034=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20','Temporary whole entity structural works systems',#13029,$,$);
+#13035=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_30','Flying shores systems',#13034,$,$);
+#13036=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_32','Framed retention structure systems',#13034,$,$);
+#13037=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_70','Raking shores systems',#13034,$,$);
+#13038=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_72','Retention structure systems',#13034,$,$);
+#13039=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_75','Scaffold retention structure systems',#13034,$,$);
+#13040=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_20_87','Thrust pit systems',#13034,$,$);
+#13041=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25','Temporary wall and barrier systems',#13029,$,$);
+#13042=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_30','Temporary flood barrier systems',#13041,$,$);
+#13043=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_60','Temporary pedestrian barrier systems',#13041,$,$);
+#13044=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_70','Temporary rail barrier systems',#13041,$,$);
+#13045=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_75','Temporary road barrier systems',#13041,$,$);
+#13046=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_85','Temporary traffic barrier systems',#13041,$,$);
+#13047=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_25_90','Temporary water barrier systems',#13041,$,$);
+#13048=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_30','Temporary roof, floor and paving systems',#13029,$,$);
+#13049=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_32','Temporary water and land management systems',#13029,$,$);
+#13050=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_32_85','Sedimentation ponds',#13049,$,$);
+#13051=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_35','Temporary stair and ramp systems',#13029,$,$);
+#13052=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_37','Temporary tunnel, shaft, vessel and tower systems',#13029,$,$);
+#13053=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_40','Temporary signage and fittings, furnishings and equipment (FF&E) systems',#13029,$,$);
+#13054=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_45','Temporary flora and fauna systems',#13029,$,$);
+#13055=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_45_42','Intercropping systems',#13054,$,$);
+#13056=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_45_85','Spoil heap temporary crop systems',#13054,$,$);
+#13057=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_45_90','Topsoil heap temporary crop systems',#13054,$,$);
+#13058=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_50','Temporary disposal systems',#13029,$,$);
+#13059=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_55','Temporary piped supply systems',#13029,$,$);
+#13060=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_55_90','Tunnelling compressed air systems',#13059,$,$);
+#13061=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_60','Temporary heating, cooling and refrigeration systems',#13029,$,$);
+#13062=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_65','Temporary ventilation and air conditioning systems',#13029,$,$);
+#13063=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_70','Temporary electrical systems',#13029,$,$);
+#13064=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_75','Temporary communications, security, safety, control and protection systems',#13029,$,$);
+#13065=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_80','Temporary transport systems',#13029,$,$);
+#13066=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_80_02','Temporary access road systems',#13065,$,$);
+#13067=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_80_72','Temporary roadwork systems',#13065,$,$);
+#13068=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_85','Temporary process engineering systems',#13029,$,$);
+#13069=IFCCLASSIFICATIONREFERENCE($,'Ss_15_95_90','Temporary soft facility management services',#13029,$,$);
+#13070=IFCCLASSIFICATIONREFERENCE($,'Ss_20','Structural systems',#7,$,$);
+#13071=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05','Substructure systems',#13070,$,$);
+#13072=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15','Concrete foundation systems',#13071,$,$);
+#13073=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_65','Precast concrete pad and strip foundation systems',#13072,$,$);
+#13074=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_70','Reinforced concrete pad and strip foundation systems',#13072,$,$);
+#13075=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_71','Reinforced concrete pilecap and ground beam foundation systems',#13072,$,$);
+#13076=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_72','Reinforced concrete raft foundation systems',#13072,$,$);
+#13077=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_80','Steel ground beam foundation systems',#13072,$,$);
+#13078=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_90','Unreinforced concrete foundation systems for cast-in products',#13072,$,$);
+#13079=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_91','Unreinforced concrete pad and strip foundation systems',#13072,$,$);
+#13080=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_15_92','Unreinforced concrete trench fill foundation systems',#13072,$,$);
+#13081=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50','Minor concrete substructure systems',#13071,$,$);
+#13082=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50_15','Concrete haunching systems',#13081,$,$);
+#13083=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50_65','Precast concrete foundation and plinth systems',#13081,$,$);
+#13084=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50_70','Reinforced concrete foundation and plinth systems',#13081,$,$);
+#13085=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50_92','Unreinforced concrete foundation for cast-in products systems',#13081,$,$);
+#13086=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_50_93','Unreinforced concrete foundation and plinth systems',#13081,$,$);
+#13087=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65','Piling systems',#13071,$,$);
+#13088=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_24','Driven precast or prestressed concrete piling systems',#13087,$,$);
+#13089=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_40','In situ concrete augered piling systems',#13087,$,$);
+#13090=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_41','In situ concrete bored piling systems',#13087,$,$);
+#13091=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_42','In situ concrete cased displacement piling systems',#13087,$,$);
+#13092=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_43','In situ concrete displacement piling systems',#13087,$,$);
+#13093=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_44','Concrete micro-piling systems',#13087,$,$);
+#13094=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_64','Plunge column piling systems',#13087,$,$);
+#13095=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_76','Screw piling systems',#13087,$,$);
+#13096=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_84','Steel bearing piling systems',#13087,$,$);
+#13097=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_65_89','Timber piling systems',#13087,$,$);
+#13098=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80','Structural grouting systems',#13071,$,$);
+#13099=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_12','Cementitious grout systems',#13098,$,$);
+#13100=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_40','Interstitial grouting systems',#13098,$,$);
+#13101=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_57','Non-cementitious grout systems',#13098,$,$);
+#13102=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_71','Retaining wall cementitious grout systems',#13098,$,$);
+#13103=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_73','Retaining wall self-hardening slurry systems',#13098,$,$);
+#13104=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_80_80','Soil nailing cementitious grout systems',#13098,$,$);
+#13105=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90','Underpinning systems',#13071,$,$);
+#13106=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_10','Beam and pier underpinning systems',#13105,$,$);
+#13107=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_35','Grouted underpinning systems',#13105,$,$);
+#13108=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_45','Jacked pile underpinning systems',#13105,$,$);
+#13109=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_46','Jet grouted underpinning systems',#13105,$,$);
+#13110=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_50','Mass concrete underpinning systems',#13105,$,$);
+#13111=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_60','Pile and cantilever support underpinning systems',#13105,$,$);
+#13112=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_61','Pile and needle underpinning systems',#13105,$,$);
+#13113=IFCCLASSIFICATIONREFERENCE($,'Ss_20_05_90_70','Raking pile underpinning systems',#13105,$,$);
+#13114=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10','Structural frame systems',#13070,$,$);
+#13115=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_30','Complete bridge structure systems',#13114,$,$);
+#13116=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_30_30','Footbridge systems',#13115,$,$);
+#13117=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_30_65','Pipe bridge systems',#13115,$,$);
+#13118=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_30_84','Steel arch bridge systems',#13115,$,$);
+#13119=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60','Prefabricated framed and panelled structures',#13114,$,$);
+#13120=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_33','Geodesic dome systems',#13119,$,$);
+#13121=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_34','Glazed enclosure systems',#13119,$,$);
+#13122=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_50','Modular pod systems',#13119,$,$);
+#13123=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_60','Panelled and framed modular systems',#13119,$,$);
+#13124=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_65','Prefabricated plantroom systems',#13119,$,$);
+#13125=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_84','Structural insulated panel systems',#13119,$,$);
+#13126=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_60_95','Volumetric modular systems',#13119,$,$);
+#13127=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_65','Prefabricated room systems',#13114,$,$);
+#13128=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_65_15','Composite pods',#13127,$,$);
+#13129=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_65_17','Concrete pods',#13127,$,$);
+#13130=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_65_65','Polypropylene pods',#13127,$,$);
+#13131=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_70','Shelter systems',#13114,$,$);
+#13132=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_70_03','Animal shelter systems',#13131,$,$);
+#13133=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_70_62','People shelter systems',#13131,$,$);
+#13134=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_70_64','Plant shelter systems',#13131,$,$);
+#13135=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_70_84','Storage shelter systems',#13131,$,$);
+#13136=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75','Structural framing systems',#13114,$,$);
+#13137=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75_35','Heavy steel framing systems',#13136,$,$);
+#13138=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75_45','Light steel framing systems',#13136,$,$);
+#13139=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75_65','Precast reinforced concrete framing systems',#13136,$,$);
+#13140=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75_70','Reinforced concrete framing systems',#13136,$,$);
+#13141=IFCCLASSIFICATIONREFERENCE($,'Ss_20_10_75_85','Timber framing systems',#13136,$,$);
+#13142=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20','Structural beams',#13070,$,$);
+#13143=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75','Structural beam systems',#13142,$,$);
+#13144=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_35','Heavy steel beam systems',#13143,$,$);
+#13145=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_45','Light steel beam systems',#13143,$,$);
+#13146=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_65','Precast reinforced concrete beam systems',#13143,$,$);
+#13147=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_67','Prestressed concrete beam systems',#13143,$,$);
+#13148=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_70','Reinforced concrete beam systems',#13143,$,$);
+#13149=IFCCLASSIFICATIONREFERENCE($,'Ss_20_20_75_85','Timber beam systems',#13143,$,$);
+#13150=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30','Structural columns',#13070,$,$);
+#13151=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75','Structural column systems',#13150,$,$);
+#13152=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_35','Heavy steel column systems',#13151,$,$);
+#13153=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_45','Light steel column systems',#13151,$,$);
+#13154=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_50','Masonry column systems',#13151,$,$);
+#13155=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_65','Precast reinforced concrete column systems',#13151,$,$);
+#13156=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_70','Reinforced concrete column systems',#13151,$,$);
+#13157=IFCCLASSIFICATIONREFERENCE($,'Ss_20_30_75_85','Timber column systems',#13151,$,$);
+#13158=IFCCLASSIFICATIONREFERENCE($,'Ss_20_40','Structural sheet and cable systems',#13070,$,$);
+#13159=IFCCLASSIFICATIONREFERENCE($,'Ss_20_40_10','Building cable systems',#13158,$,$);
+#13160=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50','Bridge structure systems',#13070,$,$);
+#13161=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10','Abutment systems',#13160,$,$);
+#13162=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_10','Bank seat abutments',#13161,$,$);
+#13163=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_30','Embedded retaining wall bridge abutments',#13161,$,$);
+#13164=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_40','Integral abutments',#13161,$,$);
+#13165=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_50','Masonry bridge abutments',#13161,$,$);
+#13166=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_70','Reinforced concrete bridge abutments',#13161,$,$);
+#13167=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_80','Sheet piled bridge abutments',#13161,$,$);
+#13168=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_85','Spill-through abutments',#13161,$,$);
+#13169=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_90','Tied embedded retaining wall bridge abutments',#13161,$,$);
+#13170=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_10_95','Wing wall systems',#13161,$,$);
+#13171=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15','Bridge bearing systems',#13160,$,$);
+#13172=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_20','Curved bearing systems',#13171,$,$);
+#13173=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_23','Disk bearing systems',#13171,$,$);
+#13174=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_27','Elastomeric bearing systems',#13171,$,$);
+#13175=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_65','Pot bearing systems',#13171,$,$);
+#13176=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_72','Rocker and pin bearing systems',#13171,$,$);
+#13177=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_74','Roller bearing systems',#13171,$,$);
+#13178=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_78','Sliding bearing systems',#13171,$,$);
+#13179=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_15_80','Spherical bearing systems',#13171,$,$);
+#13180=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20','Bridge pier and pylon systems',#13160,$,$);
+#13181=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_50','Masonry bridge pier systems',#13180,$,$);
+#13182=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_70','Reinforced concrete bridge pier systems',#13180,$,$);
+#13183=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_72','Reinforced concrete bridge pylon systems',#13180,$,$);
+#13184=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_74','Reinforced concrete bridge tower systems',#13180,$,$);
+#13185=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_85','Steel bridge pier systems',#13180,$,$);
+#13186=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_87','Steel bridge pylon systems',#13180,$,$);
+#13187=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_89','Steel bridge tower systems',#13180,$,$);
+#13188=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_20_90','Timber bridge pier systems',#13180,$,$);
+#13189=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25','Bridge deck systems',#13160,$,$);
+#13190=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_08','Box girder bridge deck systems',#13189,$,$);
+#13191=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_12','Composite steel and concrete bridge deck systems',#13189,$,$);
+#13192=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_15','Concrete half through deck systems',#13189,$,$);
+#13193=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_16','Concrete slab deck systems',#13189,$,$);
+#13194=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_30','Filler beam deck systems',#13189,$,$);
+#13195=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_31','Flat and stepped deck systems',#13189,$,$);
+#13196=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_53','Modular precast concrete deck systems',#13189,$,$);
+#13197=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_59','Orthotropic deck systems',#13189,$,$);
+#13198=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_63','Post-tensioned concrete beam deck systems',#13189,$,$);
+#13199=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_65','Pre-tensioned concrete beam deck systems',#13189,$,$);
+#13200=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_70','Reinforced concrete arch bridge systems',#13189,$,$);
+#13201=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_25_80','Solid steel slab systems',#13189,$,$);
+#13202=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_30','Abutment and pier component systems',#13160,$,$);
+#13203=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_30_11','Capping beam systems',#13202,$,$);
+#13204=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_30_37','Bridge headwall systems',#13202,$,$);
+#13205=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_30_80','Spandrel arch wall systems',#13202,$,$);
+#13206=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_35','Bridge cable systems',#13160,$,$);
+#13207=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_35_11','Cable-stayed bridge cable systems',#13206,$,$);
+#13208=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_35_85','Suspension bridge cable systems',#13206,$,$);
+#13209=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_40','Bridge expansion and movement joint systems',#13160,$,$);
+#13210=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_40_04','Asphaltic plug joint systems',#13209,$,$);
+#13211=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_40_09','Buried expansion joint systems',#13209,$,$);
+#13212=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_40_56','Nosing expansion joint systems with poured sealants',#13209,$,$);
+#13213=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_40_57','Nosing expansion joint systems with preformed compression seals',#13209,$,$);
+#13214=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_90','Bridge deck waterproofing systems',#13160,$,$);
+#13215=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_90_08','Bridge deck sheet waterproofing systems',#13214,$,$);
+#13216=IFCCLASSIFICATIONREFERENCE($,'Ss_20_50_90_10','Bridge deck sprayed liquid waterproofing systems',#13214,$,$);
+#13217=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60','Retaining wall systems',#13070,$,$);
+#13218=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30','Embedded retaining wall systems',#13217,$,$);
+#13219=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_03','Anchored steel sheet pile retaining wall systems',#13218,$,$);
+#13220=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_08','Bored king post retaining wall systems',#13218,$,$);
+#13221=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_13','Combi retaining wall systems',#13218,$,$);
+#13222=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_15','Contiguous pile retaining wall systems',#13218,$,$);
+#13223=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_24','Driven king post retaining wall systems',#13218,$,$);
+#13224=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_70','Reinforced concrete diaphragm retaining wall systems',#13218,$,$);
+#13225=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_80','Secant pile retaining wall systems',#13218,$,$);
+#13226=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_83','Slurry diaphragm retaining wall systems',#13218,$,$);
+#13227=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_85','Steel sheet pile retaining wall systems',#13218,$,$);
+#13228=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_30_92','Unreinforced concrete diaphragm retaining wall systems',#13218,$,$);
+#13229=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35','Gravity retaining wall systems',#13217,$,$);
+#13230=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_06','Bagwork retaining wall systems',#13229,$,$);
+#13231=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_10','Caged fill retaining wall systems',#13229,$,$);
+#13232=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_13','Concrete bagwork retaining wall systems',#13229,$,$);
+#13233=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_15','Crib retaining wall systems',#13229,$,$);
+#13234=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_25','Drystack masonry unit retaining wall systems',#13229,$,$);
+#13235=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_50','Masonry retaining wall systems',#13229,$,$);
+#13236=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_53','Mesh formwork and geogrid retaining wall systems',#13229,$,$);
+#13237=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_66','Precast concrete stem wall retaining wall systems',#13229,$,$);
+#13238=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_70','Reinforced concrete retaining wall systems',#13229,$,$);
+#13239=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_72','Reinforced earth retaining wall systems',#13229,$,$);
+#13240=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_90','Timber retaining wall systems',#13229,$,$);
+#13241=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_35_91','Tyre bale retaining wall systems',#13229,$,$);
+#13242=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_40','Headwall systems',#13217,$,$);
+#13243=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_40_20','Culvert headwall systems',#13242,$,$);
+#13244=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_40_40','Inlet headwall systems',#13242,$,$);
+#13245=IFCCLASSIFICATIONREFERENCE($,'Ss_20_60_40_60','Outfall headwall systems',#13242,$,$);
+#13246=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70','Structural protection systems',#13070,$,$);
+#13247=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10','Cathodic protection systems',#13246,$,$);
+#13248=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_02','Adhesive-backed zinc sheet anode systems',#13247,$,$);
+#13249=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_09','Buried galvanic anode systems',#13247,$,$);
+#13250=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_10','Buried impressed current anode systems',#13247,$,$);
+#13251=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_27','Embedded impressed current anode systems',#13247,$,$);
+#13252=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_28','Embedded zinc anode systems',#13247,$,$);
+#13253=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_41','Immersed galvanic anode systems',#13247,$,$);
+#13254=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_42','Immersed impressed current anode systems',#13247,$,$);
+#13255=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_72','Recess-mounted impressed current anode systems',#13247,$,$);
+#13256=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_85','Surface-mounted impressed current anode systems',#13247,$,$);
+#13257=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_10_99','Zinc mesh in overlay systems',#13247,$,$);
+#13258=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_15','Concrete protection systems',#13246,$,$);
+#13259=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_65','Protective painting systems',#13246,$,$);
+#13260=IFCCLASSIFICATIONREFERENCE($,'Ss_20_70_80','Steel encasement systems',#13246,$,$);
+#13261=IFCCLASSIFICATIONREFERENCE($,'Ss_20_80','Structure accessory systems',#13070,$,$);
+#13262=IFCCLASSIFICATIONREFERENCE($,'Ss_20_80_12','Bearing systems',#13261,$,$);
+#13263=IFCCLASSIFICATIONREFERENCE($,'Ss_20_80_12_28','Expansion bearings systems',#13262,$,$);
+#13264=IFCCLASSIFICATIONREFERENCE($,'Ss_20_80_12_30','Fixed bearings systems',#13262,$,$);
+#13265=IFCCLASSIFICATIONREFERENCE($,'Ss_20_80_60','Permanent formwork systems',#13261,$,$);
+#13266=IFCCLASSIFICATIONREFERENCE($,'Ss_25','Wall and barrier systems',#7,$,$);
+#13267=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10','Framed wall systems',#13266,$,$);
+#13268=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_20','Curtain walling systems',#13267,$,$);
+#13269=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_20_85','Stick curtain walling systems',#13268,$,$);
+#13270=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_20_90','Unitized curtain walling systems',#13268,$,$);
+#13271=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_30','Framed partition systems',#13267,$,$);
+#13272=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_30_35','Gypsum board partition systems',#13271,$,$);
+#13273=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_30_70','Rigid sheet partition systems',#13271,$,$);
+#13274=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32','Framed wall structure systems',#13267,$,$);
+#13275=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_03','Aluminium wall framing systems',#13274,$,$);
+#13276=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_35','Heavy steel wall framing systems',#13274,$,$);
+#13277=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_45','Light steel wall framing systems',#13274,$,$);
+#13278=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_58','Plastics wall framing systems',#13274,$,$);
+#13279=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_62','Post-tensioned concrete wall systems',#13274,$,$);
+#13280=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_65','Precast concrete wall systems',#13274,$,$);
+#13281=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_70','Reinforced concrete wall structure systems',#13274,$,$);
+#13282=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_32_90','Timber wall framing systems',#13274,$,$);
+#13283=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_35','Framed glazed wall systems',#13267,$,$);
+#13284=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_35_35','Glazed screen systems',#13283,$,$);
+#13285=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_35_95','Vertical patent glazing systems',#13283,$,$);
+#13286=IFCCLASSIFICATIONREFERENCE($,'Ss_25_10_35_97','Window wall glazed screen systems',#13283,$,$);
+#13287=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11','Monolithic wall structure systems',#13266,$,$);
+#13288=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_13','Cob wall systems',#13287,$,$);
+#13289=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_15','Concrete form masonry unit wall systems',#13287,$,$);
+#13290=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_16','Concrete wall systems',#13287,$,$);
+#13291=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_16_80','Sprayed concrete wall structure systems',#13290,$,$);
+#13292=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_70','Rammed earth wall systems',#13287,$,$);
+#13293=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_70_55','Non-stabilized rammed earth wall systems',#13292,$,$);
+#13294=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_70_83','Stabilized rammed earth plinth systems',#13292,$,$);
+#13295=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_70_85','Stabilized rammed earth wall systems',#13292,$,$);
+#13296=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_90','Timber wall systems',#13287,$,$);
+#13297=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_90_15','Cross-laminated timber wall systems',#13296,$,$);
+#13298=IFCCLASSIFICATIONREFERENCE($,'Ss_25_11_90_96','Wood log wall systems',#13296,$,$);
+#13299=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12','Panel wall structure systems',#13266,$,$);
+#13300=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_10','Brick panel wall systems',#13299,$,$);
+#13301=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_10_14','Clay brick panel wall systems',#13300,$,$);
+#13302=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_10_16','Concrete brick panel wall systems',#13300,$,$);
+#13303=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_15','Concrete panel wall systems',#13299,$,$);
+#13304=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_15_05','Autoclaved aerated concrete (AAC) panel wall systems',#13303,$,$);
+#13305=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_15_15','Composite concrete panel wall systems',#13303,$,$);
+#13306=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_60','Panel enclosure systems',#13299,$,$);
+#13307=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_60_30','Fully-framed panel cubicle systems',#13306,$,$);
+#13308=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_60_60','Panel cubicle systems',#13306,$,$);
+#13309=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_60_65','Privacy screen systems',#13306,$,$);
+#13310=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65','Partitioning systems',#13299,$,$);
+#13311=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_50','Media wall systems',#13310,$,$);
+#13312=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_55','Mesh panel partition systems',#13310,$,$);
+#13313=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_60','Plasterboard laminated partition systems',#13310,$,$);
+#13314=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_65','Panel partition systems',#13310,$,$);
+#13315=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_70','Relocatable partition and ceiling systems',#13310,$,$);
+#13316=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_75','Relocatable partition systems',#13310,$,$);
+#13317=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_65_85','Storage wall systems',#13310,$,$);
+#13318=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_70','Retractable partition systems',#13299,$,$);
+#13319=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_70_30','Fabric dividing partition systems',#13318,$,$);
+#13320=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_70_80','Sliding stacking panel partition systems',#13318,$,$);
+#13321=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_80','Structural glass wall systems',#13299,$,$);
+#13322=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_80_65','Point-fixed structural glass wall systems',#13321,$,$);
+#13323=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_80_83','Stacked structural glass wall systems',#13321,$,$);
+#13324=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_80_85','Suspended structural glass wall systems',#13321,$,$);
+#13325=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_85','Structural steel panel wall systems',#13299,$,$);
+#13326=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_85_60','Prefabricated metal wall systems',#13325,$,$);
+#13327=IFCCLASSIFICATIONREFERENCE($,'Ss_25_12_85_63','Profile metal sheet wall systems',#13325,$,$);
+#13328=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13','Unit wall structure systems',#13266,$,$);
+#13329=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_05','Adobe block wall systems',#13328,$,$);
+#13330=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_24','Dry stone wall systems',#13328,$,$);
+#13331=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_33','Glass wall systems',#13328,$,$);
+#13332=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_33_33','Glass block wall systems',#13331,$,$);
+#13333=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_33_64','Prefabricated glass block wall systems',#13331,$,$);
+#13334=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_35','Gypsum block wall systems',#13328,$,$);
+#13335=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_45','Lead brick wall systems',#13328,$,$);
+#13336=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_50','Masonry wall systems',#13328,$,$);
+#13337=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_50_49','Masonry exposed feature systems',#13336,$,$);
+#13338=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_50_51','Masonry wall leaf systems',#13336,$,$);
+#13339=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_50_54','Masonry free-standing wall leaf systems',#13336,$,$);
+#13340=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_50_56','Masonry internal partition systems',#13336,$,$);
+#13341=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_70','Reinforced masonry wall systems',#13328,$,$);
+#13342=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_70_71','Reinforced masonry wall leaf systems',#13341,$,$);
+#13343=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_70_74','Reinforced masonry free-standing wall leaf systems',#13341,$,$);
+#13344=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_70_76','Reinforced masonry internal partition systems',#13341,$,$);
+#13345=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_85','Straw bale wall systems',#13328,$,$);
+#13346=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_85_30','Framed straw bale wall systems',#13345,$,$);
+#13347=IFCCLASSIFICATIONREFERENCE($,'Ss_25_13_85_95','Unframed straw bale wall systems',#13345,$,$);
+#13348=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14','Fence systems',#13266,$,$);
+#13349=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_30','Framed fence systems',#13348,$,$);
+#13350=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_30_56','Natural stone fencing systems',#13349,$,$);
+#13351=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_55','Monolithic fence systems',#13348,$,$);
+#13352=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63','Post, rail and board fence systems',#13348,$,$);
+#13353=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_08','Board or palisade fencing systems',#13352,$,$);
+#13354=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_11','Carbon steel continuous bar fencing systems',#13352,$,$);
+#13355=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_51','Metal post and rail fencing systems',#13352,$,$);
+#13356=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_52','Metal vertical pale fencing systems',#13352,$,$);
+#13357=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_56','Natural hurdle fencing systems',#13352,$,$);
+#13358=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_62','Post and panel fencing systems',#13352,$,$);
+#13359=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_63','Post and rail fencing systems',#13352,$,$);
+#13360=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_64','Precast concrete palisade fencing systems',#13352,$,$);
+#13361=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_65','Precast concrete post and panel fencing systems',#13352,$,$);
+#13362=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_66','Precast concrete post and rail fencing systems',#13352,$,$);
+#13363=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_67','Prefabricated wood or plastics panel fencing systems',#13352,$,$);
+#13364=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_84','Steel hurdle fencing systems',#13352,$,$);
+#13365=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_85','Steel palisade panel fencing systems',#13352,$,$);
+#13366=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_86','Steel vertical bar fencing systems',#13352,$,$);
+#13367=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_95','Wood close boarded fencing systems',#13352,$,$);
+#13368=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_96','Wood palisade fencing systems',#13352,$,$);
+#13369=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_97','Wood post and rail fencing systems',#13352,$,$);
+#13370=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_63_98','Wrought iron panel fencing systems',#13352,$,$);
+#13371=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67','Post, wire and mesh fence systems',#13348,$,$);
+#13372=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_12','Chain link fencing systems',#13371,$,$);
+#13373=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_14','Cleft chestnut pale fencing systems',#13371,$,$);
+#13374=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_15','Continuous mesh fencing systems',#13371,$,$);
+#13375=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_24','Dropper pattern strained wire fencing systems',#13371,$,$);
+#13376=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_27','Electric fencing systems',#13371,$,$);
+#13377=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_28','Electric security fencing systems',#13371,$,$);
+#13378=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_33','General pattern strained wire fencing systems',#13371,$,$);
+#13379=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_34','General pattern wire mesh fencing systems',#13371,$,$);
+#13380=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_51','Metal mesh panel fencing systems',#13371,$,$);
+#13381=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_70','Rope or chain fencing systems',#13371,$,$);
+#13382=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_80','Spring steel and high tensile wire mesh fencing systems',#13371,$,$);
+#13383=IFCCLASSIFICATIONREFERENCE($,'Ss_25_14_67_97','Wire fencing systems',#13371,$,$);
+#13384=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15','Fixed pedestrian barrier systems',#13266,$,$);
+#13385=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60','Pedestrian safety barrier and guarding systems',#13384,$,$);
+#13386=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_14','Composite barrier systems',#13385,$,$);
+#13387=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_15','Composite pedestrian parapet systems',#13385,$,$);
+#13388=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_16','Composite post and panel barrier systems',#13385,$,$);
+#13389=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_17','Composite post and rail barrier systems',#13385,$,$);
+#13390=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_18','Concrete post and rail barrier systems',#13385,$,$);
+#13391=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_37','Hoop barrier systems',#13385,$,$);
+#13392=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_52','Metal modular barrier systems',#13385,$,$);
+#13393=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_53','Metal pedestrian parapet systems',#13385,$,$);
+#13394=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_54','Metal post and mesh panel barrier systems',#13385,$,$);
+#13395=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_55','Metal post and panel barrier systems',#13385,$,$);
+#13396=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_56','Metal post and rail barrier systems',#13385,$,$);
+#13397=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_57','Metal vertical bar pedestrian guard rail systems',#13385,$,$);
+#13398=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_60','Pedestrian parapet systems',#13385,$,$);
+#13399=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_65','Post and panel barrier systems',#13385,$,$);
+#13400=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_66','Post and rail barrier systems',#13385,$,$);
+#13401=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_67','Post and rope barrier systems',#13385,$,$);
+#13402=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_68','Post and wire barrier systems',#13385,$,$);
+#13403=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_96','Wood post and panel barrier systems',#13385,$,$);
+#13404=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_60_97','Wood post and rail barrier systems',#13385,$,$);
+#13405=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_85','Sports barrier systems',#13384,$,$);
+#13406=IFCCLASSIFICATIONREFERENCE($,'Ss_25_15_85_55','Multi-use games fencing systems',#13405,$,$);
+#13407=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16','Fixed traffic and protective barrier systems',#13266,$,$);
+#13408=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_04','Artificial reef systems',#13407,$,$);
+#13409=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_05','Avalanche and snow barrier systems',#13407,$,$);
+#13410=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_08','Blast barrier systems',#13407,$,$);
+#13411=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_08_44','Jet blast deflection systems',#13410,$,$);
+#13412=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_21','Debris flow barrier systems',#13407,$,$);
+#13413=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_46','Landslide barrier systems',#13407,$,$);
+#13414=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50','Coastal, river and waterways protection systems',#13407,$,$);
+#13415=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50_72','Rock armour systems',#13414,$,$);
+#13416=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50_77','Scouring protection systems',#13414,$,$);
+#13417=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50_80','Sea wall systems',#13414,$,$);
+#13418=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50_82','Splash deck systems',#13414,$,$);
+#13419=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_50_84','Splash wall systems',#13414,$,$);
+#13420=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73','Road and rail barrier systems',#13407,$,$);
+#13421=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73_03','Acoustic barrier systems',#13420,$,$);
+#13422=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73_05','Anti-throw barrier systems',#13420,$,$);
+#13423=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73_26','Environment protection screen systems',#13420,$,$);
+#13424=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73_79','Sight barrier systems',#13420,$,$);
+#13425=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_73_80','Socket for temporary barrier systems',#13420,$,$);
+#13426=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_76','Rockfall barrier systems',#13407,$,$);
+#13427=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94','Vehicle restraint systems',#13407,$,$);
+#13428=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_10','Bollard systems',#13427,$,$);
+#13429=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_14','Combined metal and concrete vehicle safety parapet systems',#13427,$,$);
+#13430=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_16','Concrete safety barrier (CSB) systems',#13427,$,$);
+#13431=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_44','Low-speed precast concrete safety parapet (PCONC) systems',#13427,$,$);
+#13432=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_46','Low-speed masonry safety parapet (PMAS) systems',#13427,$,$);
+#13433=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_48','Low-speed metal vehicle safety parapet systems',#13427,$,$);
+#13434=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_50','Metal vehicle safety fence systems',#13427,$,$);
+#13435=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_65','Protective rail systems',#13427,$,$);
+#13436=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_95','Vehicle safety control systems',#13427,$,$);
+#13437=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_96','Vehicle security barrier systems',#13427,$,$);
+#13438=IFCCLASSIFICATIONREFERENCE($,'Ss_25_16_94_97','Wire rope safety fence (WRSF) systems',#13427,$,$);
+#13439=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17','Dam and levee structure systems',#13266,$,$);
+#13440=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17_05','Arch dam systems',#13439,$,$);
+#13441=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17_10','Buttress dam systems',#13439,$,$);
+#13442=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17_25','Embankment dam and levee systems',#13439,$,$);
+#13443=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17_35','Gravity dam systems',#13439,$,$);
+#13444=IFCCLASSIFICATIONREFERENCE($,'Ss_25_17_35_60','Orifice check dam systems',#13443,$,$);
+#13445=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20','Wall cladding systems',#13266,$,$);
+#13446=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_08','Board cladding systems',#13445,$,$);
+#13447=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_08_95','Weatherboarding systems',#13446,$,$);
+#13448=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_14','Composite panel cladding systems',#13445,$,$);
+#13449=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_14_10','Built-up metal insulating sandwich panel cladding systems',#13448,$,$);
+#13450=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_14_52','Metal composite panel cladding systems',#13448,$,$);
+#13451=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_14_54','Metal insulating sandwich panel cladding systems',#13448,$,$);
+#13452=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_14_55','Metal semi-composite panel cladding systems',#13448,$,$);
+#13453=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_15','Concrete cladding systems',#13445,$,$);
+#13454=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_15_16','Concrete panel cladding systems',#13453,$,$);
+#13455=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_33','Glass fibre-reinforced concrete (GRC) cladding systems',#13445,$,$);
+#13456=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_33_35','Glass fibre-reinforced concrete (GRC) wall cladding systems',#13455,$,$);
+#13457=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_34','Glass fibre-reinforced gypsum (GRG) cladding systems',#13445,$,$);
+#13458=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_34_35','Glass fibre-reinforced gypsum (GRG) wall cladding systems',#13457,$,$);
+#13459=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_35','Glass fibre-reinforced plastics (GRP) cladding systems',#13445,$,$);
+#13460=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_35_35','Glass fibre-reinforced plastics (GRP) wall cladding systems',#13459,$,$);
+#13461=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50','Metal sheet fully supported wall-covering systems',#13445,$,$);
+#13462=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_05','Aluminium sheet fully supported wall-covering systems',#13461,$,$);
+#13463=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_11','Carbon steel sheet fully supported wall-covering systems',#13461,$,$);
+#13464=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_15','Copper sheet fully supported wall-covering systems',#13461,$,$);
+#13465=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_45','Lead sheet fully supported wall-covering systems',#13461,$,$);
+#13466=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_50','Lead-wrapped panel cladding systems',#13461,$,$);
+#13467=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_85','Stainless steel sheet fully supported wall-covering systems',#13461,$,$);
+#13468=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_50_95','Zinc sheet fully supported wall-covering systems',#13461,$,$);
+#13469=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_60','Panel and sheet cladding systems',#13445,$,$);
+#13470=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_68','Profiled sheet self-supporting cladding systems',#13445,$,$);
+#13471=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_68_30','Fibre cement profiled sheet self-supporting cladding systems',#13470,$,$);
+#13472=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_68_50','Metal profiled sheet self-supporting cladding systems',#13470,$,$);
+#13473=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_68_65','Plastics profiled sheet self-supporting cladding systems',#13470,$,$);
+#13474=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_70','Rainscreen cladding systems',#13445,$,$);
+#13475=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_70_25','Drained and back-ventilated rainscreen cladding systems',#13474,$,$);
+#13476=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_70_65','Pressure equalized rainscreen cladding systems',#13474,$,$);
+#13477=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_72','Sheet cladding systems',#13445,$,$);
+#13478=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_72_72','Rigid sheet cladding systems',#13477,$,$);
+#13479=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_85','Stone cladding systems',#13445,$,$);
+#13480=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_85_50','Manufactured stone cladding systems',#13479,$,$);
+#13481=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_85_55','Natural stone slab cladding systems',#13479,$,$);
+#13482=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90','Unit cladding systems',#13445,$,$);
+#13483=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_08','Brick slip cladding systems',#13482,$,$);
+#13484=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_13','Clay plain tile cladding systems',#13482,$,$);
+#13485=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_15','Concrete plain tile cladding systems',#13482,$,$);
+#13486=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_30','Fibre cement slate cladding systems',#13482,$,$);
+#13487=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_50','Metal tile cladding systems',#13482,$,$);
+#13488=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_55','Natural slate cladding systems',#13482,$,$);
+#13489=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_65','Precast concrete panel cladding systems',#13482,$,$);
+#13490=IFCCLASSIFICATIONREFERENCE($,'Ss_25_20_90_95','Wood shingle or shake cladding systems',#13482,$,$);
+#13491=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25','Wall lining systems',#13266,$,$);
+#13492=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_05','Acoustic panel systems',#13491,$,$);
+#13493=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45','Lining and casing systems',#13491,$,$);
+#13494=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_25','Duct and wall panel lining systems',#13493,$,$);
+#13495=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_33','Gypsum board casing systems',#13493,$,$);
+#13496=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_35','Gypsum board wall lining systems',#13493,$,$);
+#13497=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_47','Linear wall lining systems',#13493,$,$);
+#13498=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_50','Metal framed wall lining systems',#13493,$,$);
+#13499=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_68','Rigid sheet casing systems',#13493,$,$);
+#13500=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_70','Rigid sheet wall lining systems',#13493,$,$);
+#13501=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_88','Timber board casing systems',#13493,$,$);
+#13502=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_45_90','Timber board wall lining systems',#13493,$,$);
+#13503=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_70','Radiation shielding lining systems',#13491,$,$);
+#13504=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_70_08','Brick and block radiation shielding lining systems',#13503,$,$);
+#13505=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_70_78','Sheeted radiation shielding lining systems',#13503,$,$);
+#13506=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_70_96','Wet-applied radiation shielding lining systems',#13503,$,$);
+#13507=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75','Rigid sheet fine lining and panelling systems',#13491,$,$);
+#13508=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_05','Acoustic panel lining systems',#13507,$,$);
+#13509=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_63','Plastics panel lining systems',#13507,$,$);
+#13510=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_65','Plastics veneered panel lining systems',#13507,$,$);
+#13511=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_85','Specialist faced panel lining systems',#13507,$,$);
+#13512=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_94','Wood panel lining systems',#13507,$,$);
+#13513=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_75_95','Wood veneered panel lining systems',#13507,$,$);
+#13514=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_85','Stone lining systems',#13491,$,$);
+#13515=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_85_50','Manufactured stone lining systems',#13514,$,$);
+#13516=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_85_55','Natural stone lining systems',#13514,$,$);
+#13517=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_95','Wall sheathing systems',#13491,$,$);
+#13518=IFCCLASSIFICATIONREFERENCE($,'Ss_25_25_95_28','External wall sheathing systems',#13517,$,$);
+#13519=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30','Door and window systems',#13266,$,$);
+#13520=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_15','Concrete wall glazing systems',#13519,$,$);
+#13521=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_15_66','Precast concrete security window systems',#13520,$,$);
+#13522=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20','Door, shutter and hatch systems',#13519,$,$);
+#13523=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_16','Collapsible gate and grille doorset systems',#13522,$,$);
+#13524=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_22','Door assembly systems',#13522,$,$);
+#13525=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_25','Doorset systems',#13522,$,$);
+#13526=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_30','Frame and door leaf systems',#13522,$,$);
+#13527=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_32','Frameless glass door systems',#13522,$,$);
+#13528=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_35','Hatch systems',#13522,$,$);
+#13529=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_37','High-security doorset systems',#13522,$,$);
+#13530=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_38','High-speed doorset systems',#13522,$,$);
+#13531=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_39','Hinged doorset systems',#13522,$,$);
+#13532=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_40','Industrial doorset systems',#13522,$,$);
+#13533=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_45','Loading bay doorset systems',#13522,$,$);
+#13534=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_46','Louvre doorset systems',#13522,$,$);
+#13535=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_62','Pivot doorset systems',#13522,$,$);
+#13536=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_65','Platform door systems',#13522,$,$);
+#13537=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_70','Revolving doorset systems',#13522,$,$);
+#13538=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_73','Roller grille doorset systems',#13522,$,$);
+#13539=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_74','Roller shutter doorset systems',#13522,$,$);
+#13540=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_76','Sectional overhead doorset systems',#13522,$,$);
+#13541=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_77','Sliding doorset systems',#13522,$,$);
+#13542=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_78','Sliding folding doorset systems',#13522,$,$);
+#13543=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_84','Strip curtain doorset systems',#13522,$,$);
+#13544=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_20_93','Up-and-over doorset systems',#13522,$,$);
+#13545=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_29','Fire and smoke curtain systems',#13519,$,$);
+#13546=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_29_30','Fire curtain systems',#13545,$,$);
+#13547=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_29_80','Smoke curtain systems',#13545,$,$);
+#13548=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_95','Window and window walling systems',#13519,$,$);
+#13549=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_95_11','Casement window systems',#13548,$,$);
+#13550=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_95_75','Sash window systems',#13548,$,$);
+#13551=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_95_95','Window systems',#13548,$,$);
+#13552=IFCCLASSIFICATIONREFERENCE($,'Ss_25_30_95_96','Window walling systems',#13548,$,$);
+#13553=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32','Gate and access control systems',#13266,$,$);
+#13554=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35','Gate systems',#13553,$,$);
+#13555=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_05','Animal gate systems',#13554,$,$);
+#13556=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_15','Chicane systems',#13554,$,$);
+#13557=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_30','Folding gate systems',#13554,$,$);
+#13558=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_37','Hinged gate systems',#13554,$,$);
+#13559=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_41','In-line inhibitor systems',#13554,$,$);
+#13560=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_45','Kissing gate systems',#13554,$,$);
+#13561=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_80','Sliding gate systems',#13554,$,$);
+#13562=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_85','Stile systems',#13554,$,$);
+#13563=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_35_90','Turnstile systems',#13554,$,$);
+#13564=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_60','Access control gate systems',#13553,$,$);
+#13565=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_60_15','Controlled pedestrian access systems',#13564,$,$);
+#13566=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_60_26','e-passport gate systems',#13564,$,$);
+#13567=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_60_60','Passport gate systems',#13564,$,$);
+#13568=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_70','Railway platform barrier systems',#13553,$,$);
+#13569=IFCCLASSIFICATIONREFERENCE($,'Ss_25_32_70_64','Platform end barrier gate systems',#13568,$,$);
+#13570=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36','Operable barrier systems',#13266,$,$);
+#13571=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_24','Dry dock automated gate systems',#13570,$,$);
+#13572=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_30','Flood and storm surge barrier systems',#13570,$,$);
+#13573=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_30_30','Flood gate systems',#13572,$,$);
+#13574=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_50','Marina and sea gate automated systems',#13570,$,$);
+#13575=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_58','Operable rail barrier systems',#13570,$,$);
+#13576=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_62','Operable water barrier systems',#13570,$,$);
+#13577=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_62_47','Lock gate systems',#13576,$,$);
+#13578=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_62_96','Water control gate systems',#13576,$,$);
+#13579=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_64','Operable bridge barrier systems',#13570,$,$);
+#13580=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_66','Operable tunnel barrier systems',#13570,$,$);
+#13581=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_70','Railway crossing systems',#13570,$,$);
+#13582=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95','Vehicle access point control systems',#13570,$,$);
+#13583=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_05','Automated heavy-duty gate systems',#13582,$,$);
+#13584=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_35','Heavy-duty sliding beam barrier systems',#13582,$,$);
+#13585=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_36','Height restrictor systems',#13582,$,$);
+#13586=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_38','Horizontal swing gate systems',#13582,$,$);
+#13587=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_40','Hydraulic ramp systems',#13582,$,$);
+#13588=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_50','Movable bollard and car park post systems',#13582,$,$);
+#13589=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_70','Rising arm barrier systems',#13582,$,$);
+#13590=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_72','Rising bollard systems',#13582,$,$);
+#13591=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_85','Static bollard systems',#13582,$,$);
+#13592=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_94','Vehicle flow plate systems',#13582,$,$);
+#13593=IFCCLASSIFICATIONREFERENCE($,'Ss_25_36_95_96','Vehicle stop systems',#13582,$,$);
+#13594=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38','Wall and barrier opening hardware systems',#13266,$,$);
+#13595=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_10','Barrier and gate control systems',#13594,$,$);
+#13596=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_10_33','Gate hardware systems',#13595,$,$);
+#13597=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_10_95','Water control gate displacer systems',#13595,$,$);
+#13598=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20','Door and window hardware systems',#13594,$,$);
+#13599=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_20','Door hardware systems',#13598,$,$);
+#13600=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_30','Garage door hardware systems',#13598,$,$);
+#13601=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_35','Hatch hardware systems',#13598,$,$);
+#13602=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_70','Relocatable partition hardware systems',#13598,$,$);
+#13603=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_80','Shutter hardware systems',#13598,$,$);
+#13604=IFCCLASSIFICATIONREFERENCE($,'Ss_25_38_20_95','Window hardware systems',#13598,$,$);
+#13605=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45','Wall covering and finish systems',#13266,$,$);
+#13606=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_02','Acoustic covering systems',#13605,$,$);
+#13607=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_12','Cavity wall insulation systems',#13605,$,$);
+#13608=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_12_40','Injected and blown cavity wall insulation systems',#13607,$,$);
+#13609=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_25','Drapery systems',#13605,$,$);
+#13610=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_70','Render and roughcast coating systems',#13605,$,$);
+#13611=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_70_55','Multicoat render systems',#13610,$,$);
+#13612=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_70_60','One-coat render systems',#13610,$,$);
+#13613=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_70_65','Parge coat systems',#13610,$,$);
+#13614=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_70_90','Tiling and mosaic render substrate systems',#13610,$,$);
+#13615=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72','Wall insulation systems',#13605,$,$);
+#13616=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72_02','Adhesive-fixed external wall insulation systems',#13615,$,$);
+#13617=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72_28','External wall insulation systems',#13615,$,$);
+#13618=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72_42','Insulated plinth systems',#13615,$,$);
+#13619=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72_44','Internal wall insulation systems',#13615,$,$);
+#13620=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_72_70','Rail-fixed external wall insulation systems',#13615,$,$);
+#13621=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_74','Rolled paper and fabric covering systems',#13605,$,$);
+#13622=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_74_70','Rolled covering systems',#13621,$,$);
+#13623=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_85','Sprayed coating systems',#13605,$,$);
+#13624=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_85_82','Sprayed external monolithic coating systems',#13623,$,$);
+#13625=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_85_85','Sprayed internal monolithic coating systems',#13623,$,$);
+#13626=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_86','Suspended render systems',#13605,$,$);
+#13627=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_88','Tiling systems',#13605,$,$);
+#13628=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_88_25','External wall tiling systems',#13627,$,$);
+#13629=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_88_40','Internal wall tiling systems',#13627,$,$);
+#13630=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_88_90','Tiling and mosaic mortar substrate systems',#13627,$,$);
+#13631=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_90','Unit facing systems',#13605,$,$);
+#13632=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_92','Terrazzo wall tiling and screed systems',#13605,$,$);
+#13633=IFCCLASSIFICATIONREFERENCE($,'Ss_25_45_92_88','Terrazzo wall tiling systems',#13632,$,$);
+#13634=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50','Wall-mounted canopy and screen systems',#13266,$,$);
+#13635=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45','Louvre and screening systems',#13634,$,$);
+#13636=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45_22','Decorative screen systems',#13635,$,$);
+#13637=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45_35','Grille systems',#13635,$,$);
+#13638=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45_45','Louvre screen systems',#13635,$,$);
+#13639=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45_60','Panellized louvre screen systems',#13635,$,$);
+#13640=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_45_80','Shutter systems',#13635,$,$);
+#13641=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_75','Shading systems',#13634,$,$);
+#13642=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_75_05','Awning systems',#13641,$,$);
+#13643=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_75_10','Canopy systems',#13641,$,$);
+#13644=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_75_30','Facade-aligned brise soleil systems',#13641,$,$);
+#13645=IFCCLASSIFICATIONREFERENCE($,'Ss_25_50_75_65','Projecting brise soleil systems',#13641,$,$);
+#13646=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60','Wall and barrier accessory systems',#13266,$,$);
+#13647=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_05','Balustrade and handrail systems',#13646,$,$);
+#13648=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_05_05','Balustrade and guarding systems',#13647,$,$);
+#13649=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_05_35','Handrail systems',#13647,$,$);
+#13650=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_10','Cavity wall tie renewal and insertion systems',#13646,$,$);
+#13651=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30','Fire-stopping systems',#13646,$,$);
+#13652=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30_40','Individual services penetrations fire-stopping systems',#13651,$,$);
+#13653=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30_45','Linear gap fire-stopping systems',#13651,$,$);
+#13654=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30_48','Loose fire-stopping systems',#13651,$,$);
+#13655=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30_55','Multiple services penetrations fire-stopping systems',#13651,$,$);
+#13656=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_30_62','Pipe collar fire-stopping systems',#13651,$,$);
+#13657=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35','Glazing systems',#13646,$,$);
+#13658=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_06','Bead-fixed insulating glazing systems',#13657,$,$);
+#13659=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_08','Bead-fixed single glazing systems',#13657,$,$);
+#13660=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_30','Fire-resistant glazing systems',#13657,$,$);
+#13661=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_33','Glazing film systems',#13657,$,$);
+#13662=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_35','Groove-fixed single glazing systems',#13657,$,$);
+#13663=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_40','Internal use bead and tape, groove or channel glazing systems',#13657,$,$);
+#13664=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_50','Mirror glazing systems',#13657,$,$);
+#13665=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_65','Putty-fronted single glazing systems',#13657,$,$);
+#13666=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_75','Single-sided gasket glazing systems',#13657,$,$);
+#13667=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_85','Structural zipper gasket glazing systems',#13657,$,$);
+#13668=IFCCLASSIFICATIONREFERENCE($,'Ss_25_60_35_95','U-profiled glazing systems',#13657,$,$);
+#13669=IFCCLASSIFICATIONREFERENCE($,'Ss_30','Roof, floor and paving systems',#7,$,$);
+#13670=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10','Roof structure systems',#13669,$,$);
+#13671=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30','Framed roof structure systems',#13670,$,$);
+#13672=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_03','Aluminium roof framing systems',#13671,$,$);
+#13673=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_20','Glazed unit roof framing systems',#13671,$,$);
+#13674=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_25','Heavy steel roof framing systems',#13671,$,$);
+#13675=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_30','Heavy steel roof space frame systems',#13671,$,$);
+#13676=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_35','Heavy steel roof space truss systems',#13671,$,$);
+#13677=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_45','Light steel roof framing systems',#13671,$,$);
+#13678=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_58','Plastics roof framing systems',#13671,$,$);
+#13679=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_60','Precast concrete roof structure systems',#13671,$,$);
+#13680=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_70','Reinforced concrete roof framing systems',#13671,$,$);
+#13681=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_30_85','Timber roof framing systems',#13671,$,$);
+#13682=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_50','Monolithic roof structure systems',#13670,$,$);
+#13683=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_50_70','Sprayed concrete roof systems',#13682,$,$);
+#13684=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_60','Air-pressurized panel roof structure systems',#13670,$,$);
+#13685=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_60_28','Ethylene tetrafluoroethylene (ETFE) roof systems',#13684,$,$);
+#13686=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_90','Unit roof structure systems',#13670,$,$);
+#13687=IFCCLASSIFICATIONREFERENCE($,'Ss_30_10_90_50','Masonry roof systems',#13686,$,$);
+#13688=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12','Floor and deck structure systems',#13669,$,$);
+#13689=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_05','Beam and block floor systems',#13688,$,$);
+#13690=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_15','Concrete plank floor systems',#13688,$,$);
+#13691=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_20','Deck systems',#13688,$,$);
+#13692=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_32','Framed decking systems',#13688,$,$);
+#13693=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_33','Framed floor systems',#13688,$,$);
+#13694=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_33_50','Light steel framed floor systems',#13693,$,$);
+#13695=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_33_90','Timber-framed floor systems',#13693,$,$);
+#13696=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_35','Glass unit masonry floor systems',#13688,$,$);
+#13697=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_45','Lift-up concrete plank floor systems',#13688,$,$);
+#13698=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_50','Masonry (flat arch) floor systems',#13688,$,$);
+#13699=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_60','Pier and jetty structure systems',#13688,$,$);
+#13700=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_64','Platform systems',#13688,$,$);
+#13701=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_64_17','Crosswall platform systems',#13700,$,$);
+#13702=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_64_30','Front wall platform systems',#13700,$,$);
+#13703=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_64_53','Modular platform systems',#13700,$,$);
+#13704=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85','Structural deck systems',#13688,$,$);
+#13705=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_15','Composite concrete deck systems',#13704,$,$);
+#13706=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_16','Composite steel and concrete deck systems',#13704,$,$);
+#13707=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_17','Concrete beam and block deck systems',#13704,$,$);
+#13708=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_18','Concrete deck systems',#13704,$,$);
+#13709=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_30','Glazed unit deck systems',#13704,$,$);
+#13710=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_40','Heavy steel deck systems',#13704,$,$);
+#13711=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_50','Light steel deck systems',#13704,$,$);
+#13712=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_65','Post-tensioned concrete deck systems',#13704,$,$);
+#13713=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_70','Reinforced concrete deck systems',#13704,$,$);
+#13714=IFCCLASSIFICATIONREFERENCE($,'Ss_30_12_85_90','Timber deck systems',#13704,$,$);
+#13715=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14','Paving systems',#13669,$,$);
+#13716=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02','Acrylic and resin bound aggregate paving systems',#13715,$,$);
+#13717=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_30','Fibre-reinforced resin-bound aggregate overlay systems',#13716,$,$);
+#13718=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_41','Impact absorbing synthetic play and sport paving systems',#13716,$,$);
+#13719=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_42','Impervious acrylic coated sports paving systems',#13716,$,$);
+#13720=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_70','Resin-bonded aggregate paving systems',#13716,$,$);
+#13721=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_71','Resin-bound aggregate light-duty paving systems',#13716,$,$);
+#13722=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_72','Resin-bound aggregate heavy-duty paving systems',#13716,$,$);
+#13723=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_73','Resin-bound aggregate overlay systems',#13716,$,$);
+#13724=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_74','Resin-bound stone aggregate sports paving systems',#13716,$,$);
+#13725=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_02_85','Synthetic play surfacing systems',#13716,$,$);
+#13726=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05','Asphalt road and paving systems',#13715,$,$);
+#13727=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_05','Asphalt concrete light-duty paving systems',#13726,$,$);
+#13728=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_06','Asphalt concrete paving systems',#13726,$,$);
+#13729=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_07','Asphalt concrete runway paving systems',#13726,$,$);
+#13730=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_08','Asphalt concrete surface overlay systems',#13726,$,$);
+#13731=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_35','Hot-rolled asphalt paving systems',#13726,$,$);
+#13732=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_36','Hot-rolled asphalt runway paving systems',#13726,$,$);
+#13733=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_40','Hot-rolled asphalt sports paving systems',#13726,$,$);
+#13734=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_50','Mastic asphalt pedestrian paving systems',#13726,$,$);
+#13735=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_65','Porous asphalt concrete paving systems',#13726,$,$);
+#13736=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_70','Porous asphalt concrete sports paving systems',#13726,$,$);
+#13737=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_73','Porous asphalt surfacing systems',#13726,$,$);
+#13738=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_75','Stone mastic asphalt paving systems',#13726,$,$);
+#13739=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_80','Slurry surfacing overlay systems',#13726,$,$);
+#13740=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_05_85','Surface dressing overlay systems',#13726,$,$);
+#13741=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_15','Concrete road and paving systems',#13715,$,$);
+#13742=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_15_14','Concrete grass-filled paving systems',#13741,$,$);
+#13743=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_15_16','Concrete paving systems',#13741,$,$);
+#13744=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_15_17','Concrete porous paving systems',#13741,$,$);
+#13745=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_15_18','Concrete runway paving systems',#13741,$,$);
+#13746=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_50','Mat and sheet paving systems',#13715,$,$);
+#13747=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_50_25','Dry ski slope synthetic matting systems',#13746,$,$);
+#13748=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_50_65','Polymeric sports paving systems',#13746,$,$);
+#13749=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_50_80','Synthetic grass surfacing systems',#13746,$,$);
+#13750=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65','Paving structure systems',#13715,$,$);
+#13751=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_06','Base layer systems',#13750,$,$);
+#13752=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_08','Binder course systems',#13750,$,$);
+#13753=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_25','Drainage layer systems',#13750,$,$);
+#13754=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_40','Improvement layer systems',#13750,$,$);
+#13755=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_41','Intermediate layer systems',#13750,$,$);
+#13756=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_82','Sub-base layer systems',#13750,$,$);
+#13757=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_83','Subgrade layer systems',#13750,$,$);
+#13758=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_65_85','Surface layer systems',#13750,$,$);
+#13759=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80','Unbound aggregate paving systems',#13715,$,$);
+#13760=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_30','Fast dry clay sports paving systems',#13759,$,$);
+#13761=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_37','Hoggin paving systems',#13759,$,$);
+#13762=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_40','Hard binding gravel paving systems',#13759,$,$);
+#13763=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_45','Loose laid aggregate paving systems',#13759,$,$);
+#13764=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_47','Loose aggregate overlay systems',#13759,$,$);
+#13765=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_48','Loose gravel paving systems',#13759,$,$);
+#13766=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_75','Sand play surfacing systems',#13759,$,$);
+#13767=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_90','Unbound aggregate cycle paving systems',#13759,$,$);
+#13768=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_95','Woodchip and stone trim trail paving systems',#13759,$,$);
+#13769=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_80_98','Woodchip and woodfibre surface paving systems',#13759,$,$);
+#13770=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90','Unit paving systems',#13715,$,$);
+#13771=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_11','Cellular plastics grass-filled paving systems',#13770,$,$);
+#13772=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_12','Cellular plastics gravel-filled paving systems',#13770,$,$);
+#13773=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_30','Flag and slab bound paving systems',#13770,$,$);
+#13774=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_32','Flag and slab paving overlay systems',#13770,$,$);
+#13775=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_34','Flag and slab pedestal-supported paving systems',#13770,$,$);
+#13776=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_36','Flag and slab unbound paving systems',#13770,$,$);
+#13777=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_50','Mosaic paving systems',#13770,$,$);
+#13778=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_60','Permeable flag and slab paving systems',#13770,$,$);
+#13779=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_62','Permeable small unit paving systems',#13770,$,$);
+#13780=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_70','Rail track paving systems',#13770,$,$);
+#13781=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_75','Small unit bound paving systems',#13770,$,$);
+#13782=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_80','Small unit paving overlay systems',#13770,$,$);
+#13783=IFCCLASSIFICATIONREFERENCE($,'Ss_30_14_90_85','Small unit unbound paving systems',#13770,$,$);
+#13784=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20','Flooring and decking systems',#13669,$,$);
+#13785=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10','Board and rigid sheet floor systems',#13784,$,$);
+#13786=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_10','Battened timber board floating floor systems',#13785,$,$);
+#13787=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_15','Battened wood-based rigid sheet floating floor systems',#13785,$,$);
+#13788=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_43','Joist-supported mineral-based sheet and board floor systems',#13785,$,$);
+#13789=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_45','Joist-supported timber board floor systems',#13785,$,$);
+#13790=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_50','Joist-supported wood-based rigid sheet floor systems',#13785,$,$);
+#13791=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_10_95','Wood-based rigid sheet floating floor systems',#13785,$,$);
+#13792=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_22','Demountable athletics floor systems',#13784,$,$);
+#13793=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_30','External deck and boardwalk systems',#13784,$,$);
+#13794=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_30_10','Boardwalk systems',#13793,$,$);
+#13795=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_30_25','Decking systems',#13793,$,$);
+#13796=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_70','Raised flooring systems',#13784,$,$);
+#13797=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_70_37','Hollow floor systems',#13796,$,$);
+#13798=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_70_70','Raised access floor systems',#13796,$,$);
+#13799=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_90','Wood and composite unit flooring systems',#13784,$,$);
+#13800=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_90_15','Composition block flooring systems',#13799,$,$);
+#13801=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_90_50','Mosaic parquet panel flooring systems',#13799,$,$);
+#13802=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_90_95','Wood block flooring systems',#13799,$,$);
+#13803=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95','Wood strip and board fine flooring systems',#13784,$,$);
+#13804=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95_10','Battened wood floating floor systems',#13803,$,$);
+#13805=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95_15','Composite laminate floating floor systems',#13803,$,$);
+#13806=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95_20','Direct-fixed wood floor systems',#13803,$,$);
+#13807=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95_25','Direct-glued wood floor systems',#13803,$,$);
+#13808=IFCCLASSIFICATIONREFERENCE($,'Ss_30_20_95_95','Wood floating floor systems',#13803,$,$);
+#13809=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25','Ceiling and soffit systems',#13669,$,$);
+#13810=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10','Board and sheet ceiling systems',#13809,$,$);
+#13811=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_10','Board suspended ceiling systems',#13810,$,$);
+#13812=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_26','External ceiling systems',#13810,$,$);
+#13813=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_28','External soffit systems',#13810,$,$);
+#13814=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_35','Gypsum board suspended ceiling systems',#13810,$,$);
+#13815=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_52','Monolithic suspended ceiling systems',#13810,$,$);
+#13816=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_10_80','Soffit lining and beam casing systems',#13810,$,$);
+#13817=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22','Demountable suspended ceiling systems',#13809,$,$);
+#13818=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22_01','Acoustic baffle suspended ceiling systems',#13817,$,$);
+#13819=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22_30','Fabric membrane ceiling systems',#13817,$,$);
+#13820=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22_47','Linear ceiling lining systems',#13817,$,$);
+#13821=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22_51','Modular suspended ceiling systems',#13817,$,$);
+#13822=IFCCLASSIFICATIONREFERENCE($,'Ss_30_25_22_70','Raft or island suspended ceiling systems',#13817,$,$);
+#13823=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30','Roof and floor opening systems',#13669,$,$);
+#13824=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_15','Concrete roof and floor glazing systems',#13823,$,$);
+#13825=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_15_42','In situ concrete roof and floor glazing systems',#13824,$,$);
+#13826=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_15_64','Precast concrete lift-out access roof and floor glazing systems',#13824,$,$);
+#13827=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_15_65','Precast concrete roof and floor glazing systems',#13824,$,$);
+#13828=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_30','Floor hatch systems',#13823,$,$);
+#13829=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_34','Glass unit masonry roof light systems',#13823,$,$);
+#13830=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_71','Roof hatch systems',#13823,$,$);
+#13831=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_72','Rooflight and roof window systems',#13823,$,$);
+#13832=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_72_21','Daylight pipe systems',#13831,$,$);
+#13833=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_72_72','Rooflight systems',#13831,$,$);
+#13834=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_72_73','Roof window systems',#13831,$,$);
+#13835=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_73','Roof ventilator systems',#13823,$,$);
+#13836=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_73_60','Passive roof natural ventilator systems',#13835,$,$);
+#13837=IFCCLASSIFICATIONREFERENCE($,'Ss_30_30_73_72','Roof smoke ventilator systems',#13835,$,$);
+#13838=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34','Pavement opening systems',#13669,$,$);
+#13839=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_03','Animal grid systems',#13838,$,$);
+#13840=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_03_11','Cattle grid systems',#13839,$,$);
+#13841=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_15','Pavement glazing systems',#13838,$,$);
+#13842=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_15_15','Concrete pavement glazing systems',#13841,$,$);
+#13843=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_15_64','Precast concrete lift-out access pavement glazing systems',#13841,$,$);
+#13844=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_15_65','Precast concrete pavement glazing systems',#13841,$,$);
+#13845=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_16','Pavement smoke venting systems',#13838,$,$);
+#13846=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_16_15','Concrete pavement glazing smoke venting systems',#13845,$,$);
+#13847=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_16_16','Concrete pavement non-glazed smoke venting systems',#13845,$,$);
+#13848=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_16_64','Precast concrete pavement glazing smoke venting systems',#13845,$,$);
+#13849=IFCCLASSIFICATIONREFERENCE($,'Ss_30_34_16_65','Precast concrete pavement non-glazed smoke venting systems',#13845,$,$);
+#13850=IFCCLASSIFICATIONREFERENCE($,'Ss_30_36','Ceiling and soffit opening systems',#13669,$,$);
+#13851=IFCCLASSIFICATIONREFERENCE($,'Ss_30_36_10','Ceiling hatch systems',#13850,$,$);
+#13852=IFCCLASSIFICATIONREFERENCE($,'Ss_30_36_75','Soffit vent systems',#13850,$,$);
+#13853=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40','Roof and balcony covering and finish systems',#13669,$,$);
+#13854=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_10','Board roof covering systems',#13853,$,$);
+#13855=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_10_30','Flat board roof deck systems',#13854,$,$);
+#13856=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_10_60','Pitched board roof sarking systems',#13854,$,$);
+#13857=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30','Flat roof covering systems',#13853,$,$);
+#13858=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_07','Blue roof systems',#13857,$,$);
+#13859=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_40','Liquid-applied cold roof covering systems',#13857,$,$);
+#13860=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_42','Liquid-applied inverted roof covering systems',#13857,$,$);
+#13861=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_43','Liquid-applied warm roof covering systems',#13857,$,$);
+#13862=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_50','Mastic asphalt cold roof covering systems',#13857,$,$);
+#13863=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_52','Mastic asphalt inverted roof covering systems',#13857,$,$);
+#13864=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_55','Mastic asphalt warm roof covering systems',#13857,$,$);
+#13865=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_70','Reinforced bitumen membrane cold roof covering systems',#13857,$,$);
+#13866=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_71','Reinforced bitumen membrane inverted roof covering systems',#13857,$,$);
+#13867=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_72','Reinforced bitumen membrane warm roof covering systems',#13857,$,$);
+#13868=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_78','Single layer sheet cold roof covering systems',#13857,$,$);
+#13869=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_79','Single layer sheet inverted roof covering systems',#13857,$,$);
+#13870=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_30_80','Single layer sheet warm roof covering systems',#13857,$,$);
+#13871=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_32','Framed glazed roof systems',#13853,$,$);
+#13872=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_32_75','Sloping patent glazing systems',#13871,$,$);
+#13873=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_34','Glass roofing systems',#13853,$,$);
+#13874=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_34_15','Cantilevered structural glass beam canopy systems',#13873,$,$);
+#13875=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_34_60','Point-fixed structural glass canopy systems',#13873,$,$);
+#13876=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_34_65','Point-fixed structural glass roof systems',#13873,$,$);
+#13877=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_34_70','Point-fixed structural glass soffit systems',#13873,$,$);
+#13878=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50','Metal sheet fully supported roof and dormer covering systems',#13853,$,$);
+#13879=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_05','Aluminium sheet dormer covering systems',#13878,$,$);
+#13880=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_10','Aluminium sheet fully supported roof covering systems',#13878,$,$);
+#13881=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_12','Carbon steel sheet dormer covering systems',#13878,$,$);
+#13882=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_13','Carbon steel sheet fully supported roof covering systems',#13878,$,$);
+#13883=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_15','Copper sheet dormer covering systems',#13878,$,$);
+#13884=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_20','Copper sheet fully supported roof covering systems',#13878,$,$);
+#13885=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_40','Lead sheet dormer covering systems',#13878,$,$);
+#13886=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_45','Lead sheet fully supported roof covering systems',#13878,$,$);
+#13887=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_50','Lead-wrapped panel systems',#13878,$,$);
+#13888=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_75','Stainless steel sheet dormer covering systems',#13878,$,$);
+#13889=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_80','Stainless steel sheet fully supported roof covering systems',#13878,$,$);
+#13890=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_90','Zinc sheet dormer covering systems',#13878,$,$);
+#13891=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_50_95','Zinc sheet fully supported roof covering systems',#13878,$,$);
+#13892=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_55','Metal composite panel roof covering systems',#13853,$,$);
+#13893=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_55_10','Built up metal insulating sandwich panel roof systems',#13892,$,$);
+#13894=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_55_50','Metal composite panel roofing systems',#13892,$,$);
+#13895=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_55_54','Metal insulating sandwich panel roof systems',#13892,$,$);
+#13896=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_55_55','Metal semi-composite panel roofing systems',#13892,$,$);
+#13897=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_65','Profiled sheet self-supporting roof covering systems',#13853,$,$);
+#13898=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_65_30','Fibre cement profiled self-supporting sheet roof covering systems',#13897,$,$);
+#13899=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_65_50','Metal profiled sheet self-supporting roof covering systems',#13897,$,$);
+#13900=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_65_60','Plastics profiled sheet self-supporting roof covering systems',#13897,$,$);
+#13901=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_90','Tensile fabric roofing systems',#13853,$,$);
+#13902=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_90_40','Internal single layer tensile fabric roofing systems',#13901,$,$);
+#13903=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_90_50','Multilayer tensile fabric roofing systems',#13901,$,$);
+#13904=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_90_75','Single layer tensile fabric roofing systems',#13901,$,$);
+#13905=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_92','Thatch roof covering systems',#13853,$,$);
+#13906=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_92_85','Thatch roofing systems',#13905,$,$);
+#13907=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95','Unit roofing systems',#13853,$,$);
+#13908=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_10','Bitumen membrane shingle roofing systems',#13907,$,$);
+#13909=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_15','Ceramic slate roofing systems',#13907,$,$);
+#13910=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_30','Fibre cement slate roofing systems',#13907,$,$);
+#13911=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_40','Interlocking tile roofing systems',#13907,$,$);
+#13912=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_50','Metal tile roofing systems',#13907,$,$);
+#13913=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_55','Natural slate roofing systems',#13907,$,$);
+#13914=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_60','Natural stone slate roofing systems',#13907,$,$);
+#13915=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_65','Plain tile roofing systems',#13907,$,$);
+#13916=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_70','Reconstituted slate roofing systems',#13907,$,$);
+#13917=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_74','Roofing edges and junction systems',#13907,$,$);
+#13918=IFCCLASSIFICATIONREFERENCE($,'Ss_30_40_95_95','Wood shake or shingle roofing systems',#13907,$,$);
+#13919=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42','Floor covering and finishing systems',#13669,$,$);
+#13920=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_10','Calcium sulfate-based screed systems',#13919,$,$);
+#13921=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_10_10','Bonded calcium sulfate-based screed systems',#13920,$,$);
+#13922=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_10_30','Floating calcium sulfate-based screed systems',#13920,$,$);
+#13923=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_10_90','Unbonded calcium sulfate-based screed systems',#13920,$,$);
+#13924=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_15','Cementitious screed systems',#13919,$,$);
+#13925=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_15_10','Bonded or partially bonded cementitious levelling screed systems',#13924,$,$);
+#13926=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_15_15','Cementitious wearing screed systems',#13924,$,$);
+#13927=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_15_30','Floating cementitious levelling screed systems',#13924,$,$);
+#13928=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_15_90','Unbonded cementitious levelling screed systems',#13924,$,$);
+#13929=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_20','Deck covering systems',#13919,$,$);
+#13930=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_30','Floor coating and paint systems',#13919,$,$);
+#13931=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_30_30','Floor coating systems',#13930,$,$);
+#13932=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_32','Floor tiling systems',#13919,$,$);
+#13933=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_32_30','External floor tiling systems',#13932,$,$);
+#13934=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_32_40','Internal floor tiling systems',#13932,$,$);
+#13935=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_40','Ice rink floor systems',#13919,$,$);
+#13936=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_52','Mastic asphalt flooring and floor underlay systems',#13919,$,$);
+#13937=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_52_50','Mastic asphalt flooring systems',#13936,$,$);
+#13938=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_52_52','Mastic asphalt floor underlay systems',#13936,$,$);
+#13939=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_54','Monolithic flooring systems',#13919,$,$);
+#13940=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_54_75','Resin flooring systems',#13939,$,$);
+#13941=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_56','Natural stone flooring systems',#13919,$,$);
+#13942=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_56_56','Natural stone slab flooring systems',#13941,$,$);
+#13943=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_56_57','Natural stone tile flooring systems',#13941,$,$);
+#13944=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72','Resilient and textile floor covering systems',#13919,$,$);
+#13945=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72_05','Adhesive-fixed rolled carpet systems',#13944,$,$);
+#13946=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72_10','Carpet tile systems',#13944,$,$);
+#13947=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72_25','Edge-fixed carpet systems',#13944,$,$);
+#13948=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72_72','Resilient sheet floor covering systems',#13944,$,$);
+#13949=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_72_75','Resilient tile floor covering systems',#13944,$,$);
+#13950=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_90','Terrazzo floor tiling and screed systems',#13919,$,$);
+#13951=IFCCLASSIFICATIONREFERENCE($,'Ss_30_42_90_90','Terrazzo floor covering systems',#13950,$,$);
+#13952=IFCCLASSIFICATIONREFERENCE($,'Ss_30_45','Pavement covering and finishing systems',#13669,$,$);
+#13953=IFCCLASSIFICATIONREFERENCE($,'Ss_30_47','Ceiling and soffit covering and finishing systems',#13669,$,$);
+#13954=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60','Roof, floor and paving accessory systems',#13669,$,$);
+#13955=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_30','Floor feature systems',#13954,$,$);
+#13956=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_30_26','Entrance matting systems',#13955,$,$);
+#13957=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45','Kerb and traffic separation systems',#13954,$,$);
+#13958=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_03','Asphalt kerb systems',#13957,$,$);
+#13959=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_15','Concrete kerb systems',#13957,$,$);
+#13960=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_20','Demarcation paving systems',#13957,$,$);
+#13961=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_45','Light-duty kerb systems',#13957,$,$);
+#13962=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_55','Multi-unit traffic-calming systems',#13957,$,$);
+#13963=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_65','Precast kerb systems',#13957,$,$);
+#13964=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_80','Single-unit traffic-calming systems',#13957,$,$);
+#13965=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_85','Traffic kerb systems',#13957,$,$);
+#13966=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_45_86','Traffic separation systems',#13957,$,$);
+#13967=IFCCLASSIFICATIONREFERENCE($,'Ss_30_60_70','Roof feature systems',#13954,$,$);
+#13968=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75','Roof, floor and paving drainage systems',#13669,$,$);
+#13969=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_40','Surface drainage channel systems',#13968,$,$);
+#13970=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_40_30','Footway grating systems',#13969,$,$);
+#13971=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_40_50','Multi unit surface drainage channel systems',#13969,$,$);
+#13972=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_40_75','Single unit surface drainage channel systems',#13969,$,$);
+#13973=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50','Metal sheet gutter lining systems',#13968,$,$);
+#13974=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_05','Aluminium sheet gutter lining systems',#13973,$,$);
+#13975=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_11','Carbon steel sheet gutter lining systems',#13973,$,$);
+#13976=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_15','Copper sheet gutter lining systems',#13973,$,$);
+#13977=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_45','Lead sheet gutter lining systems',#13973,$,$);
+#13978=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_75','Stainless steel sheet gutter lining systems',#13973,$,$);
+#13979=IFCCLASSIFICATIONREFERENCE($,'Ss_30_75_50_95','Zinc sheet gutter lining systems',#13973,$,$);
+#13980=IFCCLASSIFICATIONREFERENCE($,'Ss_32','Damp-proofing, waterproofing, insulating and plaster-finishing systems',#7,$,$);
+#13981=IFCCLASSIFICATIONREFERENCE($,'Ss_32_10','Insulating treatment systems',#13980,$,$);
+#13982=IFCCLASSIFICATIONREFERENCE($,'Ss_32_10_10','Cavity and void insulation systems',#13981,$,$);
+#13983=IFCCLASSIFICATIONREFERENCE($,'Ss_32_10_10_40','Injected and blown insulation systems',#13982,$,$);
+#13984=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20','Damp-proofing systems',#13980,$,$);
+#13985=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20','Damp-proof course renewal and insertion systems',#13984,$,$);
+#13986=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_15','Chemical injection damp-proof course systems',#13985,$,$);
+#13987=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_47','Lead damp-proof course systems',#13985,$,$);
+#13988=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_62','Physical insertion horizontal damp-proof course systems',#13985,$,$);
+#13989=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_63','Physical insertion horizontal or stepped cavity tray systems',#13985,$,$);
+#13990=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_64','Physical insertion proprietary rising damp remedial systems',#13985,$,$);
+#13991=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_20_65','Physical insertion vertical damp-proof course systems',#13985,$,$);
+#13992=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30','Floor damp-proofing systems',#13984,$,$);
+#13993=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_10','Cementitious mortar slurry floor damp-proofing systems',#13992,$,$);
+#13994=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_15','Cold-applied liquid floor damp-proofing systems',#13992,$,$);
+#13995=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_30','Fully bonded bitumen membrane overslab damp-proofing systems',#13992,$,$);
+#13996=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_35','Fully bonded bitumen membrane underslab damp-proofing systems',#13992,$,$);
+#13997=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_40','Hot-applied liquid floor damp-proofing systems',#13992,$,$);
+#13998=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_45','Loose-laid bitumen membrane overslab damp-proofing systems',#13992,$,$);
+#13999=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_46','Loose-laid bitumen membrane underslab damp-proofing systems',#13992,$,$);
+#14000=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_48','Loose-laid polyethylene membrane oversite damp-proofing systems',#13992,$,$);
+#14001=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_50','Loose-laid polyethylene membrane overslab damp-proofing systems',#13992,$,$);
+#14002=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_51','Loose-laid polyethylene membrane underslab damp-proofing systems',#13992,$,$);
+#14003=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_55','Mastic asphalt floor damp-proofing systems',#13992,$,$);
+#14004=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_60','Plastics studded membrane floor damp-proofing systems',#13992,$,$);
+#14005=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_65','Pre-applied anchored membrane underslab damp-proofing systems',#13992,$,$);
+#14006=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_30_75','Self-adhesive bitumen membrane floor damp-proofing systems',#13992,$,$);
+#14007=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_95','Wall damp-proofing systems',#13984,$,$);
+#14008=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_95_10','Cementitious mortar slurry internal wall damp-proofing systems',#14007,$,$);
+#14009=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_95_15','Cold-applied liquid internal wall damp-proofing systems',#14007,$,$);
+#14010=IFCCLASSIFICATIONREFERENCE($,'Ss_32_20_95_65','Plastics studded membrane internal wall damp-proofing systems',#14007,$,$);
+#14011=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30','Flashing and weathering systems',#13980,$,$);
+#14012=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30','Flashing systems',#14011,$,$);
+#14013=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_03','Aluminium flashing systems',#14012,$,$);
+#14014=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_11','Carbon steel flashing systems',#14012,$,$);
+#14015=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_14','Copper flashing systems',#14012,$,$);
+#14016=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_47','Lead flashing systems',#14012,$,$);
+#14017=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_84','Stainless steel flashing systems',#14012,$,$);
+#14018=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_30_98','Zinc flashing systems',#14012,$,$);
+#14019=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90','Weathering systems',#14011,$,$);
+#14020=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_04','Aluminium weathering systems',#14019,$,$);
+#14021=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_12','Carbon steel weathering systems',#14019,$,$);
+#14022=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_15','Copper weathering systems',#14019,$,$);
+#14023=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_48','Lead weathering systems',#14019,$,$);
+#14024=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_85','Stainless steel weathering systems',#14019,$,$);
+#14025=IFCCLASSIFICATIONREFERENCE($,'Ss_32_30_90_99','Zinc weathering systems',#14019,$,$);
+#14026=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46','Lath and plaster systems',#13980,$,$);
+#14027=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50','Metal lathing and anchored mesh reinforcement systems',#14026,$,$);
+#14028=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50_05','Anchored mesh reinforcement systems',#14027,$,$);
+#14029=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50_50','Metal lathing casing systems',#14027,$,$);
+#14030=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50_51','Metal lathing on framing systems',#14027,$,$);
+#14031=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50_52','Metal lathing on hangers, bearers and runners systems',#14027,$,$);
+#14032=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_50_53','Metal lathing on solid substrate systems',#14027,$,$);
+#14033=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_65','Plaster-coating systems',#14026,$,$);
+#14034=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_65_15','Clay plaster systems',#14033,$,$);
+#14035=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_65_55','Multicoat plaster systems',#14033,$,$);
+#14036=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_65_58','One-coat plaster systems',#14033,$,$);
+#14037=IFCCLASSIFICATIONREFERENCE($,'Ss_32_46_65_90','Tiling and mosaic plaster substrate systems',#14033,$,$);
+#14038=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80','Waterproofing and tanking systems',#13980,$,$);
+#14039=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03','Applied waterproofing and tanking systems',#14038,$,$);
+#14040=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_10','Cementitious proprietary mortar slurry tanking systems',#14039,$,$);
+#14041=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_12','Cementitious site-batched-and-mixed mortar tanking systems',#14039,$,$);
+#14042=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_14','Cold-applied liquid waterproofing systems',#14039,$,$);
+#14043=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_16','Cold-applied liquid sandwiched tanking systems',#14039,$,$);
+#14044=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_18','Crystallization-active cementitious mortar dry shake tanking systems',#14039,$,$);
+#14045=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_20','Crystallization-active cementitious mortar slurry tanking systems',#14039,$,$);
+#14046=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_50','Mastic asphalt external tanking systems',#14039,$,$);
+#14047=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_52','Mastic asphalt sandwiched tanking systems',#14039,$,$);
+#14048=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_54','Mastic asphalt tank lining systems',#14039,$,$);
+#14049=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_03_90','Tunnel spray-applied membrane systems',#14039,$,$);
+#14050=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79','Sheeted waterproofing and tanking systems',#14038,$,$);
+#14051=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_30','Fully bonded bitumen membrane external tanking systems',#14050,$,$);
+#14052=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_32','Fully bonded bitumen membrane sandwiched tanking systems',#14050,$,$);
+#14053=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_33','Fully bonded flexible sheet membrane waterproofing systems',#14050,$,$);
+#14054=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_36','Hard rigid plastics sheet membrane waterproofing systems',#14050,$,$);
+#14055=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_40','High-density plastics studded membrane cavity drain waterproofing systems',#14050,$,$);
+#14056=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_45','Loose-laid bentonite membrane external or sandwiched tanking systems',#14050,$,$);
+#14057=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_75','Self-adhesive bitumen membrane external tanking systems',#14050,$,$);
+#14058=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_77','Self-adhesive bitumen membrane sandwiched tanking systems',#14050,$,$);
+#14059=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_84','Steel membrane waterproofing systems',#14050,$,$);
+#14060=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_86','Structure-supported sheet membrane waterproofing systems',#14050,$,$);
+#14061=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_90','Tunnel sheet membrane systems',#14050,$,$);
+#14062=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_79_92','Unbonded flexible sheet membrane waterproofing systems',#14050,$,$);
+#14063=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_90','Water feature and pond sheet lining systems',#14038,$,$);
+#14064=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_90_35','Ground-supported water retention sheet lining systems',#14063,$,$);
+#14065=IFCCLASSIFICATIONREFERENCE($,'Ss_32_80_90_85','Structure-supported water retention sheet lining systems',#14063,$,$);
+#14066=IFCCLASSIFICATIONREFERENCE($,'Ss_35','Stair and ramp systems',#7,$,$);
+#14067=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10','Stair and ramp structure systems',#14066,$,$);
+#14068=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_25','External stair and ramp systems',#14067,$,$);
+#14069=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_25_34','Ground bearing external ramp systems',#14068,$,$);
+#14070=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_25_35','Ground bearing external stair systems',#14068,$,$);
+#14071=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_25_83','Suspended external ramp systems',#14068,$,$);
+#14072=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_25_85','Suspended external stair systems',#14068,$,$);
+#14073=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30','Fixed utilitarian access systems',#14067,$,$);
+#14074=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30_15','Companionway ladder systems',#14073,$,$);
+#14075=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30_40','Industrial stair systems',#14073,$,$);
+#14076=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30_60','Permanently-fixed roof ladder systems',#14073,$,$);
+#14077=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30_62','Permanently-fixed vertical ladder systems',#14073,$,$);
+#14078=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_30_95','Working platform and walkway systems',#14073,$,$);
+#14079=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_40','Internal stair and ramp systems',#14067,$,$);
+#14080=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_40_20','Curved internal stair systems',#14079,$,$);
+#14081=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_40_40','Internal ramp systems',#14079,$,$);
+#14082=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_40_42','Internal stair systems',#14079,$,$);
+#14083=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_40_84','Straight internal stair systems',#14079,$,$);
+#14084=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_50','Marine and waterside ramp systems',#14067,$,$);
+#14085=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_50_29','Fixed ramp systems',#14084,$,$);
+#14086=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_50_31','Floating pontoon ramp systems',#14084,$,$);
+#14087=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_50_42','Integral pontoon ramp systems',#14084,$,$);
+#14088=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_85','Structural stair and ramp systems',#14067,$,$);
+#14089=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_85_15','Concrete stair or ramp systems',#14088,$,$);
+#14090=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_85_35','Heavy steel stair or ramp systems',#14088,$,$);
+#14091=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_85_65','Precast concrete stair or ramp systems',#14088,$,$);
+#14092=IFCCLASSIFICATIONREFERENCE($,'Ss_35_10_85_90','Timber stair or ramp systems',#14088,$,$);
+#14093=IFCCLASSIFICATIONREFERENCE($,'Ss_35_30','Stair and ramp opening systems',#14066,$,$);
+#14094=IFCCLASSIFICATIONREFERENCE($,'Ss_35_30_15','Concrete stair and ramp glazing systems',#14093,$,$);
+#14095=IFCCLASSIFICATIONREFERENCE($,'Ss_35_30_15_15','Concrete stair tread glazing systems',#14094,$,$);
+#14096=IFCCLASSIFICATIONREFERENCE($,'Ss_35_40','Stair and ramp covering and finishing systems',#14066,$,$);
+#14097=IFCCLASSIFICATIONREFERENCE($,'Ss_35_40_82','Stair carpeting systems',#14096,$,$);
+#14098=IFCCLASSIFICATIONREFERENCE($,'Ss_35_40_82_05','Adhesive-fixed stair carpeting systems',#14097,$,$);
+#14099=IFCCLASSIFICATIONREFERENCE($,'Ss_37','Tunnel, shaft, vessel and tower systems',#7,$,$);
+#14100=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14','Chute systems',#14099,$,$);
+#14101=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_10','Bulk material chute systems',#14100,$,$);
+#14102=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_25','Escape chute systems',#14100,$,$);
+#14103=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_70','Refuse and linen chute systems',#14100,$,$);
+#14104=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_70_08','Built-in linen chute systems',#14103,$,$);
+#14105=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_70_10','Built-in refuse chute systems',#14103,$,$);
+#14106=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_70_63','Post-fixed linen chute systems',#14103,$,$);
+#14107=IFCCLASSIFICATIONREFERENCE($,'Ss_37_14_70_65','Post-fixed refuse chute systems',#14103,$,$);
+#14108=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16','Vessel and trench systems',#14099,$,$);
+#14109=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_02','Above-ground pool systems',#14108,$,$);
+#14110=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_05','Basement water-retaining systems',#14108,$,$);
+#14111=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_10','Bund and sump systems',#14108,$,$);
+#14112=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_10_32','Fuel tank bund systems',#14111,$,$);
+#14113=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_10_42','Impounding sump systems',#14111,$,$);
+#14114=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_10_90','Transformer bund systems',#14111,$,$);
+#14115=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_10_92','Tunnel drainage sump systems',#14111,$,$);
+#14116=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_50','Metal and plastics water-retaining systems',#14108,$,$);
+#14117=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_65','Pond and wetland systems',#14108,$,$);
+#14118=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_65_40','Informal pond systems',#14117,$,$);
+#14119=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_65_70','Raised formal pond systems',#14117,$,$);
+#14120=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_65_85','Submerged formal pond systems',#14117,$,$);
+#14121=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_65_95','Amenity wetland systems',#14117,$,$);
+#14122=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_75','Silo systems',#14108,$,$);
+#14123=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_90','Trench, pipeway and pit systems',#14108,$,$);
+#14124=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_90_11','Cable protection systems',#14123,$,$);
+#14125=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_90_28','External underground service duct systems',#14123,$,$);
+#14126=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_90_63','Pit systems',#14123,$,$);
+#14127=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_95','Watertight structural systems',#14108,$,$);
+#14128=IFCCLASSIFICATIONREFERENCE($,'Ss_37_16_95_78','Sewage treatment vessel systems',#14127,$,$);
+#14129=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17','Tower, chimney and mast systems',#14099,$,$);
+#14130=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_13','Chimney systems',#14129,$,$);
+#14131=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_13_50','Masonry chimney stack systems',#14130,$,$);
+#14132=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_13_65','Pollution control systems',#14130,$,$);
+#14133=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35','Gantry systems',#14129,$,$);
+#14134=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35_11','Cantilever gantry systems',#14133,$,$);
+#14135=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35_32','Full span gantry systems',#14133,$,$);
+#14136=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35_50','Mast arm sign gantry systems',#14133,$,$);
+#14137=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35_60','Portal sign gantry systems',#14133,$,$);
+#14138=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_35_70','Reefer gantry systems',#14133,$,$);
+#14139=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_45','Lattice tower and pylon systems',#14129,$,$);
+#14140=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_50','Mast and pole systems',#14129,$,$);
+#14141=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_50_54','Multi-function pole systems',#14140,$,$);
+#14142=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_50_72','Road mast systems',#14140,$,$);
+#14143=IFCCLASSIFICATIONREFERENCE($,'Ss_37_17_90','Tower systems',#14129,$,$);
+#14144=IFCCLASSIFICATIONREFERENCE($,'Ss_37_40','Tunnel, shaft, vessel and tower covering and finishing systems',#14099,$,$);
+#14145=IFCCLASSIFICATIONREFERENCE($,'Ss_37_40_85','Swimming pool tiling systems',#14144,$,$);
+#14146=IFCCLASSIFICATIONREFERENCE($,'Ss_37_40_85_83','Swimming pool floor tiling systems',#14145,$,$);
+#14147=IFCCLASSIFICATIONREFERENCE($,'Ss_37_40_85_85','Swimming pool wall tiling systems',#14145,$,$);
+#14148=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50','Shaft and tunnel structural systems',#14099,$,$);
+#14149=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80','Shaft structure systems',#14148,$,$);
+#14150=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80_50','Masonry lined shaft systems',#14149,$,$);
+#14151=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80_71','Reinforced concrete shaft structure systems',#14149,$,$);
+#14152=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80_77','Segmental shaft structure systems',#14149,$,$);
+#14153=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80_83','Sprayed concrete shaft lining systems',#14149,$,$);
+#14154=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_80_90','Unit lined shaft systems',#14149,$,$);
+#14155=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92','Tunnel structure systems',#14148,$,$);
+#14156=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_11','Cast concrete tunnel invert systems',#14155,$,$);
+#14157=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_15','Colliery arch tunnel or adit systems',#14155,$,$);
+#14158=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_50','Masonry tunnel structure systems',#14155,$,$);
+#14159=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_64','Primary regulating layer sprayed concrete lining systems',#14155,$,$);
+#14160=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_66','Primary sprayed concrete lining systems',#14155,$,$);
+#14161=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_71','Reinforced concrete tunnel structure systems',#14155,$,$);
+#14162=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_75','Secondary cast concrete lining systems',#14155,$,$);
+#14163=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_76','Secondary regulating layer sprayed concrete lining systems',#14155,$,$);
+#14164=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_77','Secondary sprayed concrete lining systems',#14155,$,$);
+#14165=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_79','Sectional tunnel structure systems',#14155,$,$);
+#14166=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_83','Sprayed concrete tunnel lining systems',#14155,$,$);
+#14167=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_86','Tunnel support systems',#14155,$,$);
+#14168=IFCCLASSIFICATIONREFERENCE($,'Ss_37_50_92_90','Unit lined tunnel systems',#14155,$,$);
+#14169=IFCCLASSIFICATIONREFERENCE($,'Ss_37_55','Tunnel and shaft opening systems',#14099,$,$);
+#14170=IFCCLASSIFICATIONREFERENCE($,'Ss_37_55_60','Opening frame systems',#14169,$,$);
+#14171=IFCCLASSIFICATIONREFERENCE($,'Ss_37_55_60_90','Tunnel opening frame systems',#14170,$,$);
+#14172=IFCCLASSIFICATIONREFERENCE($,'Ss_37_60','Tunnel, shaft, vessel and tower accessory systems',#14099,$,$);
+#14173=IFCCLASSIFICATIONREFERENCE($,'Ss_37_60_30','Tunnel and shaft expansion joint systems',#14172,$,$);
+#14174=IFCCLASSIFICATIONREFERENCE($,'Ss_37_60_30_30','Fire-rated tunnel expansion joint systems',#14173,$,$);
+#14175=IFCCLASSIFICATIONREFERENCE($,'Ss_37_60_90','Tunnel and shaft waterproofing systems',#14172,$,$);
+#14176=IFCCLASSIFICATIONREFERENCE($,'Ss_37_60_90_70','Tunnel regrouting systems',#14175,$,$);
+#14177=IFCCLASSIFICATIONREFERENCE($,'Ss_40','Signage, fittings, furnishings and equipment (FF&E) and general finishing systems',#7,$,$);
+#14178=IFCCLASSIFICATIONREFERENCE($,'Ss_40_05','Modular systems',#14177,$,$);
+#14179=IFCCLASSIFICATIONREFERENCE($,'Ss_40_05_80','Sanitary modular systems',#14178,$,$);
+#14180=IFCCLASSIFICATIONREFERENCE($,'Ss_40_05_80_10','Bathroom pod systems',#14179,$,$);
+#14181=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10','Signage systems',#14177,$,$);
+#14182=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_20','Direction signage systems',#14181,$,$);
+#14183=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_20_70','Route marker signage systems',#14182,$,$);
+#14184=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_20_96','Wayfinding signage systems',#14182,$,$);
+#14185=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_25','External signage and interpretation systems',#14181,$,$);
+#14186=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_25_25','Electrical external signage systems',#14185,$,$);
+#14187=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_25_30','Fixed external signage systems',#14185,$,$);
+#14188=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_25_32','Free-standing external architectural signage systems',#14185,$,$);
+#14189=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30','Fire and safety signage systems',#14181,$,$);
+#14190=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_20','Emergency ''do not enter'' signage systems',#14189,$,$);
+#14191=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_25','Evacuation and safe condition signage systems',#14189,$,$);
+#14192=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_27','Evacuation and safety way guidance systems',#14189,$,$);
+#14193=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_30','Fire signage systems',#14189,$,$);
+#14194=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_36','Hazard signage systems',#14189,$,$);
+#14195=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_70','Regulatory signage systems',#14189,$,$);
+#14196=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_75','Safety signage systems',#14189,$,$);
+#14197=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_93','Warning signage systems',#14189,$,$);
+#14198=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_30_95','Water safety signage systems',#14189,$,$);
+#14199=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_35','Identification signage systems',#14181,$,$);
+#14200=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_35_10','Building signage systems',#14199,$,$);
+#14201=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_35_70','Room signage systems',#14199,$,$);
+#14202=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_35_80','Spaces signage systems',#14199,$,$);
+#14203=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_40','Internal architectural signage systems',#14181,$,$);
+#14204=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_40_25','Electrical internal architectural signage systems',#14203,$,$);
+#14205=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_40_30','Fixed internal architectural signage systems',#14203,$,$);
+#14206=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_40_32','Free-standing internal architectural signage systems',#14203,$,$);
+#14207=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50','Information signage systems',#14181,$,$);
+#14208=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50_03','Advertising signage systems',#14207,$,$);
+#14209=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50_05','Advisory signage systems',#14207,$,$);
+#14210=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50_22','Descriptive signage systems',#14207,$,$);
+#14211=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50_24','Directory signage systems',#14207,$,$);
+#14212=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_50_42','Interpretive signage systems',#14207,$,$);
+#14213=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90','Traffic signage and marking systems',#14181,$,$);
+#14214=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_03','Air traffic signage systems',#14213,$,$);
+#14215=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_18','Crossing road marking systems',#14213,$,$);
+#14216=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_20','Cycle traffic signage systems',#14213,$,$);
+#14217=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_23','Diagrammatic road marking systems',#14213,$,$);
+#14218=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_36','Hatched road marking systems',#14213,$,$);
+#14219=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_50','Marine traffic signage systems',#14213,$,$);
+#14220=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_70','Rail traffic signage systems',#14213,$,$);
+#14221=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_71','Road marker post systems',#14213,$,$);
+#14222=IFCCLASSIFICATIONREFERENCE($,'Ss_40_10_90_72','Road traffic signage systems',#14213,$,$);
+#14223=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15','General fittings, furnishings and equipment (FF&E) systems',#14177,$,$);
+#14224=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_25','Catering FF&E systems',#14223,$,$);
+#14225=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_25_15','Commercial catering FF&E systems',#14224,$,$);
+#14226=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_25_20','Domestic catering FF&E systems',#14224,$,$);
+#14227=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35','General FF&E systems',#14223,$,$);
+#14228=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35_19','Curtain and blind systems',#14227,$,$);
+#14229=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35_29','Fireplace furniture systems',#14227,$,$);
+#14230=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35_31','Free-standing furniture systems',#14227,$,$);
+#14231=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35_35','General fixtures systems',#14227,$,$);
+#14232=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_35_80','Shelving, storage and enclosures systems',#14227,$,$);
+#14233=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_44','Joinery FF&E systems',#14223,$,$);
+#14234=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_44_50','Minor joinery systems',#14233,$,$);
+#14235=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_44_90','Trims, guards and finishing systems',#14233,$,$);
+#14236=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_46','Laundry FF&E systems',#14223,$,$);
+#14237=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_46_15','Commercial laundry FF&E systems',#14236,$,$);
+#14238=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_46_20','Domestic laundry FF&E systems',#14236,$,$);
+#14239=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_58','Office equipment systems',#14223,$,$);
+#14240=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_58_50','Meeting booth systems',#14239,$,$);
+#14241=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_70','Sanitary appliances and FF&E systems',#14223,$,$);
+#14242=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_70_06','Bathroom appliances and FF&E systems',#14241,$,$);
+#14243=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75','Sanitary appliance systems',#14223,$,$);
+#14244=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_02','Accessible WC package systems',#14243,$,$);
+#14245=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_05','Bath systems',#14243,$,$);
+#14246=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_10','Bidet systems',#14243,$,$);
+#14247=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_20','Disposal unit (slop hopper) systems',#14243,$,$);
+#14248=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_25','Drinking fountain systems',#14243,$,$);
+#14249=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_35','Health care macerator systems',#14243,$,$);
+#14250=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_45','Janitorial unit systems',#14243,$,$);
+#14251=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_75','Sanitary accessory systems',#14243,$,$);
+#14252=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_77','Scrub-up trough systems',#14243,$,$);
+#14253=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_78','Shower area systems',#14243,$,$);
+#14254=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_79','Shower cubicle systems',#14243,$,$);
+#14255=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_80','Sink systems',#14243,$,$);
+#14256=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_83','Squatting WC systems',#14243,$,$);
+#14257=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_91','Urinal systems',#14243,$,$);
+#14258=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_92','Washbasin systems',#14243,$,$);
+#14259=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_93','Wash fountain systems',#14243,$,$);
+#14260=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_94','Wash trough systems',#14243,$,$);
+#14261=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_95','Waterless toilet systems',#14243,$,$);
+#14262=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_96','WC and washbasin combination systems',#14243,$,$);
+#14263=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_97','WC systems',#14243,$,$);
+#14264=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_75_98','WC wash and dry combination systems',#14243,$,$);
+#14265=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_77','Sauna FF&E systems',#14223,$,$);
+#14266=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_77_76','Sauna package systems',#14265,$,$);
+#14267=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_85','Steam bath FF&E systems',#14223,$,$);
+#14268=IFCCLASSIFICATIONREFERENCE($,'Ss_40_15_85_85','Steam bath package systems',#14267,$,$);
+#14269=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20','Administrative, commercial and protective service FF&E systems',#14177,$,$);
+#14270=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_01','Administrative FF&E systems',#14269,$,$);
+#14271=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_01_60','Office FF&E systems',#14270,$,$);
+#14272=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_01_71','Reception FF&E systems',#14270,$,$);
+#14273=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_15','Commercial FF&E systems',#14269,$,$);
+#14274=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_15_71','Retail FF&E systems',#14273,$,$);
+#14275=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_15_89','Trading floor FF&E systems',#14273,$,$);
+#14276=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_30','External public realm FF&E systems',#14269,$,$);
+#14277=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_30_01','Acceptance and dispensing systems',#14276,$,$);
+#14278=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_30_28','External furniture systems',#14276,$,$);
+#14279=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_30_30','Fixed bin systems',#14276,$,$);
+#14280=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_30_65','Playground equipment systems',#14276,$,$);
+#14281=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_65','Protective service FF&E systems',#14269,$,$);
+#14282=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_65_22','Detention FF&E systems',#14281,$,$);
+#14283=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_65_25','Emergency shelter FF&E systems',#14281,$,$);
+#14284=IFCCLASSIFICATIONREFERENCE($,'Ss_40_20_65_46','Law court FF&E systems',#14281,$,$);
+#14285=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25','Cultural, educational, scientific and information FF&E systems',#14177,$,$);
+#14286=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20','Cultural FF&E systems',#14285,$,$);
+#14287=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_02','Aquarium FF&E systems',#14286,$,$);
+#14288=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_03','Art gallery FF&E systems',#14286,$,$);
+#14289=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_04','Artwork systems',#14286,$,$);
+#14290=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_05','Auditorium FF&E systems',#14286,$,$);
+#14291=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_22','Display FF&E systems',#14286,$,$);
+#14292=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_28','Exhibition FF&E systems',#14286,$,$);
+#14293=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_85','Studio FF&E systems',#14286,$,$);
+#14294=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_20_90','Theatre FF&E systems',#14286,$,$);
+#14295=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_26','Education and information FF&E systems',#14285,$,$);
+#14296=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_26_15','Classroom FF&E systems',#14295,$,$);
+#14297=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_26_47','Library FF&E systems',#14295,$,$);
+#14298=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_32','Funerary FF&E systems',#14285,$,$);
+#14299=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_32_12','Cemetery equipment systems',#14298,$,$);
+#14300=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_71','Religious FF&E systems',#14285,$,$);
+#14301=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_71_11','Cathedral, church and chapel FF&E systems',#14300,$,$);
+#14302=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_71_52','Mosque FF&E systems',#14300,$,$);
+#14303=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_71_86','Synagogue FF&E systems',#14300,$,$);
+#14304=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_71_90','Temple FF&E systems',#14300,$,$);
+#14305=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_75','Scientific FF&E systems',#14285,$,$);
+#14306=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_75_21','Dark room FF&E systems',#14305,$,$);
+#14307=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_75_45','Laboratory FF&E systems',#14305,$,$);
+#14308=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_75_58','Observatory FF&E systems',#14305,$,$);
+#14309=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_80','Stage FF&E systems',#14285,$,$);
+#14310=IFCCLASSIFICATIONREFERENCE($,'Ss_40_25_80_90','Tension wire grid systems',#14309,$,$);
+#14311=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30','Industrial and agricultural FF&E systems',#14177,$,$);
+#14312=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_02','Agricultural FF&E systems',#14311,$,$);
+#14313=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_02_37','Horticultural FF&E systems',#14312,$,$);
+#14314=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_02_47','Livestock FF&E systems',#14312,$,$);
+#14315=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_42','Industrial FF&E systems',#14311,$,$);
+#14316=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_42_29','Factory FF&E systems',#14315,$,$);
+#14317=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_42_52','Mine FF&E systems',#14315,$,$);
+#14318=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_42_58','Offshore platform FF&E systems',#14315,$,$);
+#14319=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_42_96','Warehouse FF&E systems',#14315,$,$);
+#14320=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_85','Static permanent access and safety equipment systems',#14311,$,$);
+#14321=IFCCLASSIFICATIONREFERENCE($,'Ss_40_30_85_55','Netting systems',#14320,$,$);
+#14322=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45','Living space FF&E systems',#14177,$,$);
+#14323=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37','Hotel living space FF&E systems',#14322,$,$);
+#14324=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37_28','External FF&E systems',#14323,$,$);
+#14325=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37_36','Hotel bedroom FF&E systems',#14323,$,$);
+#14326=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37_38','Hotel dining room FF&E systems',#14323,$,$);
+#14327=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37_45','Kitchen FF&E systems',#14323,$,$);
+#14328=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_37_47','Lounge FF&E systems',#14323,$,$);
+#14329=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70','Residential living space FF&E systems',#14322,$,$);
+#14330=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70_07','Bedroom FF&E systems',#14329,$,$);
+#14331=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70_22','Dining room FF&E systems',#14329,$,$);
+#14332=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70_24','Domestic kitchen FF&E systems',#14329,$,$);
+#14333=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70_33','Garden FF&E systems',#14329,$,$);
+#14334=IFCCLASSIFICATIONREFERENCE($,'Ss_40_45_70_47','Living room FF&E systems',#14329,$,$);
+#14335=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50','Medical, health and welfare FF&E systems',#14177,$,$);
+#14336=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_50','Medical and health FF&E systems',#14335,$,$);
+#14337=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_50_18','Cr\X2\00E8\X0\che FF&E systems',#14336,$,$);
+#14338=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_50_37','Hospital ward FF&E systems',#14336,$,$);
+#14339=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_50_50','Medical and dental surgery FF&E systems',#14336,$,$);
+#14340=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_50_59','Operating theatre FF&E systems',#14336,$,$);
+#14341=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_96','Welfare FF&E systems',#14335,$,$);
+#14342=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_96_04','Animal welfare FF&E systems',#14341,$,$);
+#14343=IFCCLASSIFICATIONREFERENCE($,'Ss_40_50_96_71','Rehabilitation FF&E systems',#14341,$,$);
+#14344=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70','Recreational FF&E systems',#14177,$,$);
+#14345=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_20','Casino FF&E systems',#14344,$,$);
+#14346=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55','Play FF&E systems',#14344,$,$);
+#14347=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_10','Climbing equipment systems',#14346,$,$);
+#14348=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_15','Combination play equipment systems',#14346,$,$);
+#14349=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_35','Gymnastics and exercising equipment systems',#14346,$,$);
+#14350=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_70','Rocking equipment systems',#14346,$,$);
+#14351=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_73','Runway equipment systems',#14346,$,$);
+#14352=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_75','Sand and water play equipment systems',#14346,$,$);
+#14353=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_80','Slide equipment systems',#14346,$,$);
+#14354=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_83','Spinning equipment systems',#14346,$,$);
+#14355=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_55_85','Swinging equipment systems',#14346,$,$);
+#14356=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_60','Pool FF&E systems',#14344,$,$);
+#14357=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_60_15','Competitive swimming pool FF&E systems',#14356,$,$);
+#14358=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_60_25','Diving pool FF&E systems',#14356,$,$);
+#14359=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_60_45','Leisure swimming pool FF&E systems',#14356,$,$);
+#14360=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_60_62','Pool transfer aid equipment systems',#14356,$,$);
+#14361=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_65','Public house FF&E systems',#14344,$,$);
+#14362=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_70','Restaurant FF&E systems',#14344,$,$);
+#14363=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75','Sports FF&E systems',#14344,$,$);
+#14364=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_05','Ball court FF&E systems',#14363,$,$);
+#14365=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_20','Cycle course FF&E systems',#14363,$,$);
+#14366=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_27','Equestrian equipment systems',#14363,$,$);
+#14367=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_50','Multi-use games area FF&E systems',#14363,$,$);
+#14368=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_80','Skate park FF&E systems',#14363,$,$);
+#14369=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_85','Sports pitch FF&E systems',#14363,$,$);
+#14370=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_75_90','Trim trail FF&E systems',#14363,$,$);
+#14371=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_80','Stadium FF&E systems',#14344,$,$);
+#14372=IFCCLASSIFICATIONREFERENCE($,'Ss_40_70_95','Wildlife, eco site and nature conservation FF&E systems',#14344,$,$);
+#14373=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85','Transport FF&E systems',#14177,$,$);
+#14374=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_01','Aerospace FF&E systems',#14373,$,$);
+#14375=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_01_01','Aircraft fire training simulation systems',#14374,$,$);
+#14376=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_11','Cable transport FF&E systems',#14373,$,$);
+#14377=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_50','Marine and waterway FF&E systems',#14373,$,$);
+#14378=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_50_95','Waterside FF&E systems',#14377,$,$);
+#14379=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_70','Rail FF&E systems',#14373,$,$);
+#14380=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_70_60','Passenger concourse FF&E systems',#14379,$,$);
+#14381=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_72','Road FF&E systems',#14373,$,$);
+#14382=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_72_11','Car park equipment systems',#14381,$,$);
+#14383=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_72_20','Cycle parking equipment systems',#14381,$,$);
+#14384=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_72_33','Garage FF&E systems',#14381,$,$);
+#14385=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75','Rolling stock depot systems',#14373,$,$);
+#14386=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_07','Bogie handling systems',#14385,$,$);
+#14387=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_15','Controlled emission toilet (CET) systems',#14385,$,$);
+#14388=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_24','Drop systems',#14385,$,$);
+#14389=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_65','Press systems',#14385,$,$);
+#14390=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_70','Rail lifting systems',#14385,$,$);
+#14391=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_75','Sand feeding systems',#14385,$,$);
+#14392=IFCCLASSIFICATIONREFERENCE($,'Ss_40_85_75_97','Wheel lathe systems',#14385,$,$);
+#14393=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90','General finishing systems',#14177,$,$);
+#14394=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_05','Anodizing systems',#14393,$,$);
+#14395=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_05_05','Aluminium anodic coating systems',#14394,$,$);
+#14396=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_35','Galvanizing systems',#14393,$,$);
+#14397=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_35_26','Electroplated galvanizing systems',#14396,$,$);
+#14398=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_35_35','Hot-dip galvanizing systems',#14396,$,$);
+#14399=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_40','Intumescent systems',#14393,$,$);
+#14400=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_40_40','Intumescent casting systems',#14399,$,$);
+#14401=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_40_42','Intumescent coating systems',#14399,$,$);
+#14402=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60','Painting and clear finishing systems',#14393,$,$);
+#14403=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_05','Anti-graffiti coating systems',#14402,$,$);
+#14404=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_20','Decorative varnish or lacquer systems',#14402,$,$);
+#14405=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_22','Decorative wood stain or dye systems',#14402,$,$);
+#14406=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_55','Multicolour coating systems',#14402,$,$);
+#14407=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_60','Oil gilding systems',#14402,$,$);
+#14408=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_65','Plastic texture coating systems',#14402,$,$);
+#14409=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_80','Solvent-borne paint systems',#14402,$,$);
+#14410=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_85','Special coating systems',#14402,$,$);
+#14411=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_94','Water-based anti-corrosion systems',#14402,$,$);
+#14412=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_60_95','Waterborne paint systems',#14402,$,$);
+#14413=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_65','Powder-coating systems',#14393,$,$);
+#14414=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_65_05','Powder-coating for aluminium systems',#14413,$,$);
+#14415=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_65_85','Powder-coating for steel systems',#14413,$,$);
+#14416=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_95','Wood preservative and fire retardant treatment systems',#14393,$,$);
+#14417=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_95_30','Fire retardant treatment systems',#14416,$,$);
+#14418=IFCCLASSIFICATIONREFERENCE($,'Ss_40_90_95_65','Preservative treatment systems',#14416,$,$);
+#14419=IFCCLASSIFICATIONREFERENCE($,'Ss_45','Flora and fauna systems',#7,$,$);
+#14420=IFCCLASSIFICATIONREFERENCE($,'Ss_45_05','Ecosystems',#14419,$,$);
+#14421=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10','Flora and fauna control systems',#14419,$,$);
+#14422=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10','Bird, insect and vermin control systems',#14421,$,$);
+#14423=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_04','Animal control systems',#14422,$,$);
+#14424=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_10','Bird control systems',#14422,$,$);
+#14425=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_14','Chemical termite protection systems',#14422,$,$);
+#14426=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_40','Insect control systems',#14422,$,$);
+#14427=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_64','Physical termite protection systems',#14422,$,$);
+#14428=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_10_72','Rodent control systems',#14422,$,$);
+#14429=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_40','Invasive microbial and invertebrate control systems',#14421,$,$);
+#14430=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_40_40','Invertebrate control systems',#14429,$,$);
+#14431=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_40_50','Microbial control systems',#14429,$,$);
+#14432=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95','Vegetation control systems',#14421,$,$);
+#14433=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_50','Moss, algae and lichen control systems',#14432,$,$);
+#14434=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_72','Rooted plants on hard surfaces control systems',#14432,$,$);
+#14435=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_80','Selective vegetation control systems',#14432,$,$);
+#14436=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_81','Self-clinging plants on hard surfaces control systems',#14432,$,$);
+#14437=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_83','Site vegetation control systems',#14432,$,$);
+#14438=IFCCLASSIFICATIONREFERENCE($,'Ss_45_10_95_95','Waterborne vegetation control systems',#14432,$,$);
+#14439=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30','Aquatic flora systems',#14419,$,$);
+#14440=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30_05','Aquatic and wetland planting systems',#14439,$,$);
+#14441=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30_05_05','Aquatic planting systems',#14440,$,$);
+#14442=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30_05_50','Marginal planting systems',#14440,$,$);
+#14443=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30_05_70','Reedbed planting systems',#14440,$,$);
+#14444=IFCCLASSIFICATIONREFERENCE($,'Ss_45_30_40','Hydroponic planting systems',#14439,$,$);
+#14445=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35','Ground-based flora systems',#14419,$,$);
+#14446=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05','Amenity and ornamental planting systems',#14445,$,$);
+#14447=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_08','Bed-planted annual, perennial and bulb systems',#14446,$,$);
+#14448=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_35','Grass-planted bulb and wildflower systems',#14446,$,$);
+#14449=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_37','Grass-planted small tree and shrub systems',#14446,$,$);
+#14450=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_42','Long-stem-planted small tree and shrub systems',#14446,$,$);
+#14451=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_62','Pit-planted climber systems',#14446,$,$);
+#14452=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_64','Pit-planted perennial systems',#14446,$,$);
+#14453=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_66','Pit-planted large tree systems',#14446,$,$);
+#14454=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_05_67','Pit-planted small tree and shrub systems',#14446,$,$);
+#14455=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08','Biodiversity and environmental conservation systems',#14445,$,$);
+#14456=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08_29','Flora species introduction systems',#14455,$,$);
+#14457=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08_30','Flora species protection systems',#14455,$,$);
+#14458=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08_35','Habitat creation systems',#14455,$,$);
+#14459=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08_37','Habitat management and enhancement systems',#14455,$,$);
+#14460=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_08_38','Habitat protection systems',#14455,$,$);
+#14461=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30','Forestry, biomass, hedging and roadside planting systems',#14445,$,$);
+#14462=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_40','Hydraulic seeded tree and shrub systems',#14461,$,$);
+#14463=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_55','Notch-planted tree and shrub systems',#14461,$,$);
+#14464=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_62','Pit-planted tree and shrub systems',#14461,$,$);
+#14465=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_72','Ridge and furrow-planted tree and shrub systems',#14461,$,$);
+#14466=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_75','Seeded tree and shrub systems',#14461,$,$);
+#14467=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_30_90','Trench-planted tree and shrub systems',#14461,$,$);
+#14468=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45','Lawn and meadow planting systems',#14445,$,$);
+#14469=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_33','Grass and wildflower seeding systems',#14468,$,$);
+#14470=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_35','Grass seeding systems',#14468,$,$);
+#14471=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_40','Hydraulic seeding systems',#14468,$,$);
+#14472=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_62','Plastics paving and turf systems',#14468,$,$);
+#14473=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_65','Pre-seeded mat systems',#14468,$,$);
+#14474=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_70','Reinforced grass planting systems',#14468,$,$);
+#14475=IFCCLASSIFICATIONREFERENCE($,'Ss_45_35_45_90','Turf planting systems',#14468,$,$);
+#14476=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40','Artificially supported flora systems',#14419,$,$);
+#14477=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_28','External container planting systems',#14476,$,$);
+#14478=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_28_25','External planter systems',#14477,$,$);
+#14479=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_28_32','Free-standing external container planting systems',#14477,$,$);
+#14480=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_28_35','Hanging container planting systems',#14477,$,$);
+#14481=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_28_85','External planting systems',#14477,$,$);
+#14482=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_40','Internal container planting systems',#14476,$,$);
+#14483=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_40_32','Free-standing internal container planting systems',#14482,$,$);
+#14484=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_40_34','Ground level internal container planting systems',#14482,$,$);
+#14485=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_40_41','Internal hanging container planting systems',#14482,$,$);
+#14486=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_40_42','Internal planter systems',#14482,$,$);
+#14487=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_47','Living roof systems',#14476,$,$);
+#14488=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_47_09','Brown roof systems',#14487,$,$);
+#14489=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_47_28','Extensive green roof systems',#14487,$,$);
+#14490=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_47_40','Intensive green roof systems',#14487,$,$);
+#14491=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_47_75','Semi-intensive green roof systems',#14487,$,$);
+#14492=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_95','Vertical planting systems',#14476,$,$);
+#14493=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_95_08','Biofiltration vertical planting systems',#14492,$,$);
+#14494=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_95_52','Membranous vertical planting systems',#14492,$,$);
+#14495=IFCCLASSIFICATIONREFERENCE($,'Ss_45_40_95_54','Modular unit vertical planting systems',#14492,$,$);
+#14496=IFCCLASSIFICATIONREFERENCE($,'Ss_45_50','Artificial flora systems',#14419,$,$);
+#14497=IFCCLASSIFICATIONREFERENCE($,'Ss_45_50_05','Artificial planting systems',#14496,$,$);
+#14498=IFCCLASSIFICATIONREFERENCE($,'Ss_45_50_05_40','Internal artificial planting systems',#14497,$,$);
+#14499=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55','Land fauna systems',#14419,$,$);
+#14500=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_05','Animal conservation systems',#14499,$,$);
+#14501=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_05_29','Animal species introduction systems',#14500,$,$);
+#14502=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_05_30','Animal species protection systems',#14500,$,$);
+#14503=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_10','Avian fauna systems',#14499,$,$);
+#14504=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27','Animal crossing systems',#14499,$,$);
+#14505=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_02','Amphibian tunnel systems',#14504,$,$);
+#14506=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_04','Animal resting post systems',#14504,$,$);
+#14507=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_06','Animal underpass systems',#14504,$,$);
+#14508=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_11','Canopy bridge systems',#14504,$,$);
+#14509=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_13','Cattle creep systems',#14504,$,$);
+#14510=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_18','Crab bridge systems',#14504,$,$);
+#14511=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_34','Green bridge systems',#14504,$,$);
+#14512=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_27_59','Overhead rope crossing systems',#14504,$,$);
+#14513=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_40','Invertebrate fauna systems',#14499,$,$);
+#14514=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_50','Mammalian fauna systems',#14499,$,$);
+#14515=IFCCLASSIFICATIONREFERENCE($,'Ss_45_55_70','Reptilian fauna systems',#14499,$,$);
+#14516=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75','Piscine fauna systems',#14419,$,$);
+#14517=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05','Baffle fish pass systems',#14516,$,$);
+#14518=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05_03','Alaskan A baffle fish pass systems',#14517,$,$);
+#14519=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05_13','Chevron bottom baffle fish pass systems',#14517,$,$);
+#14520=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05_35','Hurn-type baffle fish pass systems',#14517,$,$);
+#14521=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05_46','Larinier super-active baffle fish pass systems',#14517,$,$);
+#14522=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_05_63','Plane baffle Denil fish pass systems',#14517,$,$);
+#14523=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_08','Brush and bristle fish pass systems',#14516,$,$);
+#14524=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_08_13','Combined baffle-brush fish pass systems',#14523,$,$);
+#14525=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_08_16','Cylindrical bristle cluster brush fish pass systems',#14523,$,$);
+#14526=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_08_35','Hassinger brush-furnished fish pass systems',#14523,$,$);
+#14527=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20','Culvert fish pass systems',#14516,$,$);
+#14528=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_13','Corner baffle pipe culvert fish pass systems',#14527,$,$);
+#14529=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_16','Culvert brush fish pass systems',#14527,$,$);
+#14530=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_26','Embedded blockstone culvert fish pass systems',#14527,$,$);
+#14531=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_35','Horizontal slotted baffle culvert fish pass systems',#14527,$,$);
+#14532=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_55','Notch baffle pipe culvert fish pass systems',#14527,$,$);
+#14533=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_59','Offset baffle culvert fish pass systems',#14527,$,$);
+#14534=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_82','Spoiler baffle culvert fish pass systems',#14527,$,$);
+#14535=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_88','Triangular-crested baffle culvert fish pass systems',#14527,$,$);
+#14536=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_20_95','Weir baffle culvert fish pass systems',#14527,$,$);
+#14537=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_25','Fish deterrent systems',#14516,$,$);
+#14538=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_25_05','Fish barrier systems',#14537,$,$);
+#14539=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_25_35','Fish guidance systems',#14537,$,$);
+#14540=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_26','Elevator fish pass systems',#14516,$,$);
+#14541=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_26_10','Borland lift fish pass systems',#14540,$,$);
+#14542=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_26_30','Fish lock fish pass systems',#14540,$,$);
+#14543=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_26_80','Siphon fish pass systems',#14540,$,$);
+#14544=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_26_94','Venturi pump fish pass systems',#14540,$,$);
+#14545=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30','Flap gate and sluice fish pass systems',#14516,$,$);
+#14546=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_04','Automated gate fish pass systems',#14545,$,$);
+#14547=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_15','Counter-balanced gate fish pass systems',#14545,$,$);
+#14548=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_20','Damper and retarder fish pass systems',#14545,$,$);
+#14549=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_24','Duckbill valve fish pass systems',#14545,$,$);
+#14550=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_62','Petflap fish pass systems',#14545,$,$);
+#14551=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_76','Self-regulating gate fish pass systems',#14545,$,$);
+#14552=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_30_79','Side-hung gate fish pass systems',#14545,$,$);
+#14553=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34','Gravity eel pass systems',#14516,$,$);
+#14554=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_04','Bristle substrate cassette eel pass systems',#14553,$,$);
+#14555=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_05','Bristle substrate channel eel pass systems',#14553,$,$);
+#14556=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_07','Bristle substrate recessed eel pass systems',#14553,$,$);
+#14557=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_10','Bristle substrate tilting weir eel pass systems',#14553,$,$);
+#14558=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_15','Combined substrate gravity eel pass systems',#14553,$,$);
+#14559=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_53','Netting substrate eel pass systems',#14553,$,$);
+#14560=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_61','Peg substrate cassette eel pass systems',#14553,$,$);
+#14561=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_62','Peg substrate channel eel pass systems',#14553,$,$);
+#14562=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_64','Peg substrate recessed eel pass systems',#14553,$,$);
+#14563=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_70','Rope eel pass systems',#14553,$,$);
+#14564=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_34_85','Textured substrate gravity eel pass systems',#14553,$,$);
+#14565=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_44','Lamprey pass systems',#14516,$,$);
+#14566=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_55','Nature-like fish pass systems',#14516,$,$);
+#14567=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_55_10','Bypass channel fish pass systems',#14566,$,$);
+#14568=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_55_15','Column bypass fish pass systems',#14566,$,$);
+#14569=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_55_72','Rock ramp fish pass systems',#14566,$,$);
+#14570=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_55_85','Sweep fish pass systems',#14566,$,$);
+#14571=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60','Pool fish pass systems',#14516,$,$);
+#14572=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_21','Deep notch and orifice pool fish pass systems',#14571,$,$);
+#14573=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_23','Deep notch no-orifice pool fish pass systems',#14571,$,$);
+#14574=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_40','Informal pool fish pass systems',#14571,$,$);
+#14575=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_63','Pool and chute fish pass systems',#14571,$,$);
+#14576=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_65','Pool and orifice fish pass systems',#14571,$,$);
+#14577=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_67','Pool and traverse fish pass systems',#14571,$,$);
+#14578=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_69','Pre-barrage fish pass systems',#14571,$,$);
+#14579=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_77','Shallow \X2\2018\X0\V\X2\2019\X0\ notch pool fish pass systems',#14571,$,$);
+#14580=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_60_94','Vertical slot pool fish pass systems',#14571,$,$);
+#14581=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_67','Pumped eel pass systems',#14516,$,$);
+#14582=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_67_05','Bristle substrate eel pass systems',#14581,$,$);
+#14583=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_67_15','Combined substrate pumped eel pass systems',#14581,$,$);
+#14584=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_67_65','Peg substrate eel pass systems',#14581,$,$);
+#14585=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_67_85','Textured substrate pumped eel pass systems',#14581,$,$);
+#14586=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85','Simple fish pass systems',#14516,$,$);
+#14587=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_10','Baulk fish pass systems',#14586,$,$);
+#14588=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_13','Chute fish pass systems',#14586,$,$);
+#14589=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_55','Notch fish pass systems',#14586,$,$);
+#14590=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_59','Orifice fish pass systems',#14586,$,$);
+#14591=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_69','Pre-obstacle bed modification fish pass systems',#14586,$,$);
+#14592=IFCCLASSIFICATIONREFERENCE($,'Ss_45_75_85_88','Slot fish pass systems',#14586,$,$);
+#14593=IFCCLASSIFICATIONREFERENCE($,'Ss_45_85','Artificial fauna systems',#14419,$,$);
+#14594=IFCCLASSIFICATIONREFERENCE($,'Ss_45_85_05','Artificial fauna habitat systems',#14593,$,$);
+#14595=IFCCLASSIFICATIONREFERENCE($,'Ss_45_85_05_56','Artificial nesting platform systems',#14594,$,$);
+#14596=IFCCLASSIFICATIONREFERENCE($,'Ss_45_85_05_70','Artificial reef systems',#14594,$,$);
+#14597=IFCCLASSIFICATIONREFERENCE($,'Ss_50','Disposal systems',#7,$,$);
+#14598=IFCCLASSIFICATIONREFERENCE($,'Ss_50_10','Gas waste collection and distribution systems',#14597,$,$);
+#14599=IFCCLASSIFICATIONREFERENCE($,'Ss_50_10_45','Landfill gas collection and distribution systems',#14598,$,$);
+#14600=IFCCLASSIFICATIONREFERENCE($,'Ss_50_10_95','Waste gas collection and distribution systems',#14598,$,$);
+#14601=IFCCLASSIFICATIONREFERENCE($,'Ss_50_20','Non-aqueous liquid waste collection and distribution systems',#14597,$,$);
+#14602=IFCCLASSIFICATIONREFERENCE($,'Ss_50_20_45','Landfill liquid collection and distribution systems',#14601,$,$);
+#14603=IFCCLASSIFICATIONREFERENCE($,'Ss_50_20_90','Waste liquid fuel collection and distribution systems',#14601,$,$);
+#14604=IFCCLASSIFICATIONREFERENCE($,'Ss_50_20_95','Waste process liquid collection and distribution systems',#14601,$,$);
+#14605=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30','Above-ground drainage collection systems',#14597,$,$);
+#14606=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_02','Rainwater drainage systems',#14605,$,$);
+#14607=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_02_28','External gravity rainwater drainage systems',#14606,$,$);
+#14608=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_02_40','Internal gravity rainwater drainage systems',#14606,$,$);
+#14609=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_02_65','Pressure-assisted full bore rainwater drainage systems',#14606,$,$);
+#14610=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_02_80','Siphonic full bore rainwater drainage systems',#14606,$,$);
+#14611=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04','Above-ground wastewater drainage systems',#14605,$,$);
+#14612=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04_05','Basement wastewater drainage systems',#14611,$,$);
+#14613=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04_15','Commercial catering wastewater drainage systems',#14611,$,$);
+#14614=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04_93','Above-ground vacuum drainage systems',#14611,$,$);
+#14615=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04_95','Above-ground external stack wastewater drainage systems',#14611,$,$);
+#14616=IFCCLASSIFICATIONREFERENCE($,'Ss_50_30_04_97','Above-ground internal stack wastewater drainage systems',#14611,$,$);
+#14617=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35','Wastewater collection systems',#14597,$,$);
+#14618=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03','Wastewater collection pipeline systems',#14617,$,$);
+#14619=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_08','Brine gravity collection pipeline systems',#14618,$,$);
+#14620=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_09','Brine pressure collection pipeline systems',#14618,$,$);
+#14621=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_13','Wastewater channel systems',#14618,$,$);
+#14622=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_15','Wastewater control chamber systems',#14618,$,$);
+#14623=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_26','Wastewater emergency relief structure systems',#14618,$,$);
+#14624=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_34','Wastewater gravity pipeline systems',#14618,$,$);
+#14625=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_40','Wastewater inspection chamber systems',#14618,$,$);
+#14626=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_50','Wastewater maintenance hole systems',#14618,$,$);
+#14627=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_59','Wastewater overflow structure systems',#14618,$,$);
+#14628=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_65','Wastewater pressure pipeline systems',#14618,$,$);
+#14629=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_67','Wastewater pressure relief systems',#14618,$,$);
+#14630=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_03_78','Wastewater siphon systems',#14618,$,$);
+#14631=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06','Below-ground inspection systems',#14617,$,$);
+#14632=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_06','Brick manhole systems',#14631,$,$);
+#14633=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_08','Brick shallow inspection chamber systems',#14631,$,$);
+#14634=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_10','Brick shallow silt trap and flow control chamber systems',#14631,$,$);
+#14635=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_12','Concrete deep manhole systems',#14631,$,$);
+#14636=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_14','Concrete manhole systems',#14631,$,$);
+#14637=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_16','Concrete shallow inspection chamber systems',#14631,$,$);
+#14638=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_18','Concrete silt trap and flow control chamber systems',#14631,$,$);
+#14639=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_62','Plastics deep non-entry inspection chamber systems',#14631,$,$);
+#14640=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_64','Plastics distribution and sampling chamber systems',#14631,$,$);
+#14641=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_06_66','Plastics shallow inspection chamber systems',#14631,$,$);
+#14642=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_08','Below-ground gravity drainage systems',#14617,$,$);
+#14643=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_08_15','Combined below-ground drainage pipeline systems',#14642,$,$);
+#14644=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_08_16','Combined sewer overflow systems',#14642,$,$);
+#14645=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_08_30','Foul wastewater below-ground drainage pipeline systems',#14642,$,$);
+#14646=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_08_85','Surface water below-ground drainage pipeline systems',#14642,$,$);
+#14647=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_10','Below-ground pumped drainage systems',#14617,$,$);
+#14648=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_10_06','Below-ground package pumping station and pressure pipeline drainage systems',#14647,$,$);
+#14649=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_10_08','Below-ground pressure pipeline drainage systems',#14647,$,$);
+#14650=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_10_10','Below-ground pumping station drainage systems',#14647,$,$);
+#14651=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_68','Wastewater collection pumping systems',#14617,$,$);
+#14652=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_68_24','Wastewater collection dry well pumping systems',#14651,$,$);
+#14653=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_68_96','Wastewater collection wet well pumping systems',#14651,$,$);
+#14654=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_85','Wastewater collection storage systems',#14617,$,$);
+#14655=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_85_02','Wastewater collection above-ground storage systems',#14654,$,$);
+#14656=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_85_07','Wastewater collection below-ground storage systems',#14654,$,$);
+#14657=IFCCLASSIFICATIONREFERENCE($,'Ss_50_35_85_64','Wastewater collection pipeline storage systems',#14654,$,$);
+#14658=IFCCLASSIFICATIONREFERENCE($,'Ss_50_40','Solid waste collection and distribution systems',#14597,$,$);
+#14659=IFCCLASSIFICATIONREFERENCE($,'Ss_50_40_95','Waste collection systems',#14658,$,$);
+#14660=IFCCLASSIFICATIONREFERENCE($,'Ss_50_40_95_65','Pneumatic waste collection systems',#14659,$,$);
+#14661=IFCCLASSIFICATIONREFERENCE($,'Ss_50_50','Gas waste storage, treatment and disposal systems',#14597,$,$);
+#14662=IFCCLASSIFICATIONREFERENCE($,'Ss_50_50_45','Landfill gas disposal systems',#14661,$,$);
+#14663=IFCCLASSIFICATIONREFERENCE($,'Ss_50_50_95','Waste gas treatment and disposal systems',#14661,$,$);
+#14664=IFCCLASSIFICATIONREFERENCE($,'Ss_50_60','Non-aqueous liquid waste storage, treatment and disposal systems',#14597,$,$);
+#14665=IFCCLASSIFICATIONREFERENCE($,'Ss_50_60_45','Landfill liquid disposal systems',#14664,$,$);
+#14666=IFCCLASSIFICATIONREFERENCE($,'Ss_50_60_90','Waste liquid fuel storage and treatment systems',#14664,$,$);
+#14667=IFCCLASSIFICATIONREFERENCE($,'Ss_50_60_95','Waste process liquid storage and treatment systems',#14664,$,$);
+#14668=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70','Drainage storage, treatment and disposal systems',#14597,$,$);
+#14669=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05','Below-ground drainage disposal systems',#14668,$,$);
+#14670=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_20','Below-ground drainage wastewater drainage field systems',#14669,$,$);
+#14671=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_22','Below-ground drainage foul wastewater grease separator and converter systems',#14669,$,$);
+#14672=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_23','Below-ground drainage septic tank systems',#14669,$,$);
+#14673=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_24','Below-ground drainage packaged sewage treatment systems',#14669,$,$);
+#14674=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_25','Below-ground drainage foul wastewater storage tank systems',#14669,$,$);
+#14675=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_79','Below-ground drainage concrete soakaway systems',#14669,$,$);
+#14676=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_80','Below-ground drainage granular fill soakaway systems',#14669,$,$);
+#14677=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_81','Below-ground drainage modular plastics attenuation or storage tank systems',#14669,$,$);
+#14678=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_82','Below-ground drainage modular plastics soakaway systems',#14669,$,$);
+#14679=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_83','Below-ground drainage oil and petrol separator systems',#14669,$,$);
+#14680=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_84','Below-ground drainage packaged silt trap systems',#14669,$,$);
+#14681=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_85','Below-ground drainage surface water storage tank systems',#14669,$,$);
+#14682=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_86','Below-ground drainage wet well systems',#14669,$,$);
+#14683=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_05_95','Below-ground drainage outfall systems',#14669,$,$);
+#14684=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_24','Drainage disposal systems',#14668,$,$);
+#14685=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_24_80','Soakaway borehole systems',#14684,$,$);
+#14686=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45','Land drainage systems',#14668,$,$);
+#14687=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_08','Blanket drain land drainage systems',#14686,$,$);
+#14688=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_20','Culvert land drainage systems',#14686,$,$);
+#14689=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_30','Filter drain land drainage systems',#14686,$,$);
+#14690=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_32','Fin drain land drainage systems',#14686,$,$);
+#14691=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_53','Mole and subsoiling drain land drainage systems',#14686,$,$);
+#14692=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_75','Slitting and grooving drain land drainage systems',#14686,$,$);
+#14693=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_85','Subsoil drainage pipe drain systems',#14686,$,$);
+#14694=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_45_90','Trenchless drain land drainage systems',#14686,$,$);
+#14695=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_60','Private drainage treatment systems',#14668,$,$);
+#14696=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_60_70','Radioactive wastewater treatment systems',#14695,$,$);
+#14697=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_65','Pressure relief drainage systems',#14668,$,$);
+#14698=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_65_08','Blanket drain pressure relief systems',#14697,$,$);
+#14699=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_65_30','Filter drain pressure relief systems',#14697,$,$);
+#14700=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_65_35','Geocomposite sheet fin drain pressure relief systems',#14697,$,$);
+#14701=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_80','Storm water gravity drainage systems',#14668,$,$);
+#14702=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_80_10','Bifurcation storm water overflow systems',#14701,$,$);
+#14703=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_80_72','Rigid attenuation or storage tank for storm water flood attenuation systems',#14701,$,$);
+#14704=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_82','Surface and wastewater gravity drainage systems',#14668,$,$);
+#14705=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_82_41','Inlet drainage systems',#14704,$,$);
+#14706=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_82_59','Outlet drainage systems',#14704,$,$);
+#14707=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_82_73','Road drainage systems',#14704,$,$);
+#14708=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_83','Surface water tank systems',#14668,$,$);
+#14709=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85','Sustainable drainage systems (SuDS)',#14668,$,$);
+#14710=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_00','SuDS management train systems',#14709,$,$);
+#14711=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_06','Below-ground surface water storage tank systems',#14709,$,$);
+#14712=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_08','Bioretention area systems',#14709,$,$);
+#14713=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_15','Conveyance swale systems',#14709,$,$);
+#14714=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_21','Detention basin systems',#14709,$,$);
+#14715=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_24','Dry swale systems',#14709,$,$);
+#14716=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_30','Filter strip systems',#14709,$,$);
+#14717=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_31','Filter drain systems',#14709,$,$);
+#14718=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_32','Filtration and separation systems',#14709,$,$);
+#14719=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_33','Geocellular attenuation tank systems',#14709,$,$);
+#14720=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_34','Geocellular soakaway systems',#14709,$,$);
+#14721=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_35','Granular fill soakaway systems',#14709,$,$);
+#14722=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_41','Infiltration basin systems',#14709,$,$);
+#14723=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_42','Infiltration trench systems',#14709,$,$);
+#14724=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_58','Open channel conveyance systems',#14709,$,$);
+#14725=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_61','Pervious pavement systems',#14709,$,$);
+#14726=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_64','Pond systems',#14709,$,$);
+#14727=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_66','Precast concrete soakaway systems',#14709,$,$);
+#14728=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_70','Rainwater harvesting systems',#14709,$,$);
+#14729=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_75','Sand filter bed systems',#14709,$,$);
+#14730=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_76','Sand filter bed surface systems',#14709,$,$);
+#14731=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_85','Swale systems',#14709,$,$);
+#14732=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_96','Water butt systems',#14709,$,$);
+#14733=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_97','Wet swale systems',#14709,$,$);
+#14734=IFCCLASSIFICATIONREFERENCE($,'Ss_50_70_85_98','Wetland systems',#14709,$,$);
+#14735=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75','Wastewater storage, treatment and disposal systems',#14597,$,$);
+#14736=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_01','Aeration systems',#14735,$,$);
+#14737=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_01_22','Diffused aeration systems',#14736,$,$);
+#14738=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_01_44','Jet aeration systems',#14736,$,$);
+#14739=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_01_51','Mechanical aeration systems',#14736,$,$);
+#14740=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_01_90','Tray cascade aeration systems',#14736,$,$);
+#14741=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_03','Aquaculture disposal systems',#14735,$,$);
+#14742=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_03_21','Aquaculture degasser systems',#14741,$,$);
+#14743=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_03_23','Aquaculture discharge systems',#14741,$,$);
+#14744=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_03_80','Aquaculture sludge treatment systems',#14741,$,$);
+#14745=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_20','Decanting systems',#14735,$,$);
+#14746=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_20_96','Wastewater decanting systems',#14745,$,$);
+#14747=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21','Wastewater sludge management systems',#14735,$,$);
+#14748=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_13','Wastewater sludge collection systems',#14747,$,$);
+#14749=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_15','Wastewater sludge concentrate treatment systems',#14747,$,$);
+#14750=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_23','Wastewater sludge drying systems',#14747,$,$);
+#14751=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_33','Wastewater sludge gas treatment systems',#14747,$,$);
+#14752=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_64','Wastewater sludge post-treatment systems',#14747,$,$);
+#14753=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_66','Wastewater sludge pre-treatment systems',#14747,$,$);
+#14754=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_70','Wastewater sludge recuperation systems',#14747,$,$);
+#14755=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_76','Wastewater sludge blanket settling systems',#14747,$,$);
+#14756=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_79','Wastewater sludge biosolids systems',#14747,$,$);
+#14757=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_81','Wastewater sludge dewatering systems',#14747,$,$);
+#14758=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_82','Sludge treatment systems',#14747,$,$);
+#14759=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_83','Wastewater sludge digestion systems',#14747,$,$);
+#14760=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_21_95','Wastewater sludge thickening systems',#14747,$,$);
+#14761=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22','Wastewater disinfection systems',#14735,$,$);
+#14762=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_13','Wastewater chloramine disinfection systems',#14761,$,$);
+#14763=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_15','Wastewater chlorine dioxide disinfection systems',#14761,$,$);
+#14764=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_17','Wastewater chlorine disinfection systems',#14761,$,$);
+#14765=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_21','Wastewater dechlorination systems',#14761,$,$);
+#14766=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_59','Wastewater ozone disinfection systems',#14761,$,$);
+#14767=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_22_93','Wastewater ultraviolet (UV) radiation disinfection systems',#14761,$,$);
+#14768=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_26','Effluent transfer and disposal pipeline systems',#14735,$,$);
+#14769=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_26_08','Brine gravity pipeline systems',#14768,$,$);
+#14770=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_26_09','Brine pressure pipeline systems',#14768,$,$);
+#14771=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_26_34','Effluent gravity pipeline systems',#14768,$,$);
+#14772=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_26_65','Effluent pressure pipeline systems',#14768,$,$);
+#14773=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_27','Effluent transfer and disposal pumping systems',#14735,$,$);
+#14774=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_27_24','Effluent dry well pumping systems',#14773,$,$);
+#14775=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_27_68','Effluent storage systems',#14773,$,$);
+#14776=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_27_96','Effluent wet well pumping systems',#14773,$,$);
+#14777=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_30','Wastewater fixed-film attached-growth process systems',#14735,$,$);
+#14778=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_30_08','Wastewater biological aerated filter systems',#14777,$,$);
+#14779=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_30_30','Wastewater filter bed systems',#14777,$,$);
+#14780=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_30_70','Wastewater rotating biological contactor systems',#14777,$,$);
+#14781=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_30_80','Wastewater soil biotechnology systems',#14777,$,$);
+#14782=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_34','Grit treatment and removal systems',#14735,$,$);
+#14783=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_34_16','Cross-flow grit removal systems',#14782,$,$);
+#14784=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_34_60','Package grit treatment and removal systems',#14782,$,$);
+#14785=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_34_94','Vortex grit removal systems',#14782,$,$);
+#14786=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_41','Inlet works systems',#14735,$,$);
+#14787=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_41_15','Concrete inlet works systems',#14786,$,$);
+#14788=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_41_60','Package inlet works systems',#14786,$,$);
+#14789=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_41_66','Prefabricated inlet works systems',#14786,$,$);
+#14790=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_56','Wastewater nutrient removal systems',#14735,$,$);
+#14791=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_56_08','Biological nutrient removal systems',#14790,$,$);
+#14792=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_56_13','Chemical nutrient removal systems',#14790,$,$);
+#14793=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_72','Wastewater receival systems',#14735,$,$);
+#14794=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_72_08','Wastewater brine receival systems',#14793,$,$);
+#14795=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_72_78','Wastewater septage receival systems',#14793,$,$);
+#14796=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_72_81','Wastewater solid organic waste receival systems',#14793,$,$);
+#14797=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_75','Wastewater floatables removal systems',#14735,$,$);
+#14798=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_75_96','Wastewater scum removal systems',#14797,$,$);
+#14799=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_77','Wastewater activated sludge systems',#14735,$,$);
+#14800=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_77_01','Wastewater activated sludge aeration tank systems',#14799,$,$);
+#14801=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_77_07','Wastewater biological filter tank systems',#14799,$,$);
+#14802=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_77_70','Wastewater return activated sludge systems',#14799,$,$);
+#14803=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_82','Wastewater lagoon systems',#14735,$,$);
+#14804=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_82_02','Wastewater aerobic lagoon systems',#14803,$,$);
+#14805=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_82_04','Wastewater anaerobic lagoon systems',#14803,$,$);
+#14806=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_92','Wastewater chemical dosing systems',#14735,$,$);
+#14807=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_92_32','Wastewater gas dosing systems',#14806,$,$);
+#14808=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_92_48','Wastewater liquid dosing systems',#14806,$,$);
+#14809=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_92_82','Wastewater solid dosing systems',#14806,$,$);
+#14810=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_93','Wastewater filtration systems',#14735,$,$);
+#14811=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_93_07','Wastewater biological percolating filtration systems',#14810,$,$);
+#14812=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_93_31','Wastewater fixed media bed filtration systems',#14810,$,$);
+#14813=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_93_33','Wastewater fluidized bed filtration systems',#14810,$,$);
+#14814=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_93_52','Wastewater membrane filtration systems',#14810,$,$);
+#14815=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_94','Wastewater screenings handling systems',#14735,$,$);
+#14816=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_94_16','Combined screenings capture and handling systems',#14815,$,$);
+#14817=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_94_56','Screenings capture systems',#14815,$,$);
+#14818=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_94_64','Screenings handling systems',#14815,$,$);
+#14819=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_95','Wastewater treatment pumping systems',#14735,$,$);
+#14820=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_95_24','Wastewater treatment dry well pumping systems',#14819,$,$);
+#14821=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_95_96','Wastewater treatment wet well pumping systems',#14819,$,$);
+#14822=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_98','Wastewater storage systems',#14735,$,$);
+#14823=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_98_01','Wastewater treatment above-ground storage systems',#14822,$,$);
+#14824=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_98_10','Wastewater treatment below-ground storage systems',#14822,$,$);
+#14825=IFCCLASSIFICATIONREFERENCE($,'Ss_50_75_98_96','Wastewater tank flushing systems',#14822,$,$);
+#14826=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80','Solid waste storage, treatment and disposal systems',#14597,$,$);
+#14827=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_40','Incinerator systems',#14826,$,$);
+#14828=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_80','Solid waste compacting systems',#14826,$,$);
+#14829=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_80_96','Waste compactor systems',#14828,$,$);
+#14830=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_82','Solid waste sorting systems',#14826,$,$);
+#14831=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_96','Weighbridge systems',#14826,$,$);
+#14832=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_96_00','Above-ground weighbridge systems',#14831,$,$);
+#14833=IFCCLASSIFICATIONREFERENCE($,'Ss_50_80_96_63','Pit weighbridge systems',#14831,$,$);
+#14834=IFCCLASSIFICATIONREFERENCE($,'Ss_55','Piped supply systems',#7,$,$);
+#14835=IFCCLASSIFICATIONREFERENCE($,'Ss_55_05','Gas extraction, treatment and storage systems',#14834,$,$);
+#14836=IFCCLASSIFICATIONREFERENCE($,'Ss_55_05_30','Gas extraction systems',#14835,$,$);
+#14837=IFCCLASSIFICATIONREFERENCE($,'Ss_55_05_75','Gas storage tank systems',#14835,$,$);
+#14838=IFCCLASSIFICATIONREFERENCE($,'Ss_55_05_85','Gas treatment systems',#14835,$,$);
+#14839=IFCCLASSIFICATIONREFERENCE($,'Ss_55_05_95','Gas well systems',#14835,$,$);
+#14840=IFCCLASSIFICATIONREFERENCE($,'Ss_55_10','Liquid fuel extraction, treatment and storage systems',#14834,$,$);
+#14841=IFCCLASSIFICATIONREFERENCE($,'Ss_55_10_70','Liquid fuel extraction systems',#14840,$,$);
+#14842=IFCCLASSIFICATIONREFERENCE($,'Ss_55_10_75','Liquid fuel storage tank systems',#14840,$,$);
+#14843=IFCCLASSIFICATIONREFERENCE($,'Ss_55_10_85','Liquid fuel treatment systems',#14840,$,$);
+#14844=IFCCLASSIFICATIONREFERENCE($,'Ss_55_10_95','Liquid fuel well systems',#14840,$,$);
+#14845=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15','Water extraction, treatment and storage systems',#14834,$,$);
+#14846=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_10','Raw water pipeline systems',#14845,$,$);
+#14847=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_10_13','Raw water channel systems',#14846,$,$);
+#14848=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_10_35','Raw water gravity pipeline systems',#14846,$,$);
+#14849=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_10_65','Raw water pressure pipeline systems',#14846,$,$);
+#14850=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_10_85','Raw water siphon systems',#14846,$,$);
+#14851=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_20','Raw water pumping systems',#14845,$,$);
+#14852=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_20_23','Raw water dry well pumping systems',#14851,$,$);
+#14853=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_20_95','Raw water wet well pumping systems',#14851,$,$);
+#14854=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_30','Raw water storage systems',#14845,$,$);
+#14855=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_30_02','Raw water above-ground storage systems',#14854,$,$);
+#14856=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_30_06','Raw water below-ground storage systems',#14854,$,$);
+#14857=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_30_65','Raw water pipeline storage systems',#14854,$,$);
+#14858=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50','Water treatment pre-oxidation systems',#14845,$,$);
+#14859=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_10','Chlorine dioxide pre-disinfection systems',#14858,$,$);
+#14860=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_12','Chlorine pre-disinfection systems',#14858,$,$);
+#14861=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_14','Chloramine pre-disinfection systems',#14858,$,$);
+#14862=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_16','Coagulation systems',#14858,$,$);
+#14863=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_30','Flocculation systems',#14858,$,$);
+#14864=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_60','Ozone pre-disinfection systems',#14858,$,$);
+#14865=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_50_64','Potassium permanganate pre-disinfection systems',#14858,$,$);
+#14866=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55','Water treatment sludge management systems',#14845,$,$);
+#14867=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_15','Sludge collection systems',#14866,$,$);
+#14868=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_22','Water treatment sludge dewatering systems',#14866,$,$);
+#14869=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_44','Sludge lagoon systems',#14866,$,$);
+#14870=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_46','Sludge lamella plate settling systems',#14866,$,$);
+#14871=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_70','Sludge-removal systems',#14866,$,$);
+#14872=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_76','Sludge blanket settling systems',#14866,$,$);
+#14873=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_78','Sludge contact systems',#14866,$,$);
+#14874=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_55_87','Sludge-thickening systems',#14866,$,$);
+#14875=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_60','Water treatment adsorption systems',#14845,$,$);
+#14876=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_60_34','Granular activated carbon adsorption systems',#14875,$,$);
+#14877=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_60_64','Powdered activated carbon adsorption systems',#14875,$,$);
+#14878=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_60_72','Resin adsorption systems',#14875,$,$);
+#14879=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_72','Water extraction and monitoring systems',#14845,$,$);
+#14880=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_72_20','Water extraction borehole systems',#14879,$,$);
+#14881=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_72_50','Water monitoring borehole systems',#14879,$,$);
+#14882=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80','Water treatment disinfection systems',#14845,$,$);
+#14883=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80_10','Chlorine dioxide disinfection systems',#14882,$,$);
+#14884=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80_12','Chlorine disinfection systems',#14882,$,$);
+#14885=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80_14','Chloramine disinfection systems',#14882,$,$);
+#14886=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80_60','Ozone disinfection systems',#14882,$,$);
+#14887=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_80_90','Ultraviolet (UV) radiation disinfection systems',#14882,$,$);
+#14888=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85','Water treatment filtration systems',#14845,$,$);
+#14889=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_08','Biological aerated flooded filtration systems',#14888,$,$);
+#14890=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_31','Fixed media bed filtration systems',#14888,$,$);
+#14891=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_33','Fluidized bed filtration systems',#14888,$,$);
+#14892=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_46','Lamella plate filtration systems',#14888,$,$);
+#14893=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_50','Water treatment membrane filtration systems',#14888,$,$);
+#14894=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_85_85','Submerged aerated filtration systems',#14888,$,$);
+#14895=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_90','Water treatment chemical dosing systems',#14845,$,$);
+#14896=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_90_32','Water treatment gas dosing systems',#14895,$,$);
+#14897=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_90_48','Water treatment liquid dosing systems',#14895,$,$);
+#14898=IFCCLASSIFICATIONREFERENCE($,'Ss_55_15_90_82','Water treatment solid dosing systems',#14895,$,$);
+#14899=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20','Gas and vacuum distribution and supply systems',#14834,$,$);
+#14900=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_14','Central vacuum systems',#14899,$,$);
+#14901=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_14_40','Industrial central vacuum systems',#14900,$,$);
+#14902=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_14_70','Residential central vacuum systems',#14900,$,$);
+#14903=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_33','Gas distribution network systems',#14899,$,$);
+#14904=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_33_56','Natural gas distribution network systems',#14903,$,$);
+#14905=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34','Gas supply systems',#14899,$,$);
+#14906=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34_05','Biogas supply systems',#14905,$,$);
+#14907=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34_40','Incoming gas supply systems',#14905,$,$);
+#14908=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34_46','Liquefied petroleum gas (LPG) supply systems',#14905,$,$);
+#14909=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34_57','Natural gas supply systems',#14905,$,$);
+#14910=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_34_95','Welding gas supply systems',#14905,$,$);
+#14911=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_40','Inert gas supply systems',#14899,$,$);
+#14912=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45','Laboratory gas supply systems',#14899,$,$);
+#14913=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_05','Laboratory argon supply systems',#14912,$,$);
+#14914=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_15','Laboratory compressed air supply systems',#14912,$,$);
+#14915=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_36','Laboratory helium supply systems',#14912,$,$);
+#14916=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_39','Laboratory hydrogen supply systems',#14912,$,$);
+#14917=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_56','Laboratory nitrogen supply systems',#14912,$,$);
+#14918=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_45_59','Laboratory oxygen supply systems',#14912,$,$);
+#14919=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51','Medical gas and vacuum systems',#14899,$,$);
+#14920=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_03','Medical anaesthetic gas scavenging systems',#14919,$,$);
+#14921=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_15','Medical compressed air supply systems',#14919,$,$);
+#14922=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_36','Medical helium/ oxygen mixture supply systems',#14919,$,$);
+#14923=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_56','Medical nitrous oxide supply systems',#14919,$,$);
+#14924=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_57','Medical nitrous oxide/ oxygen mixture supply systems',#14919,$,$);
+#14925=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_59','Medical oxygen supply systems',#14919,$,$);
+#14926=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_51_94','Medical vacuum systems',#14919,$,$);
+#14927=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_60','Process gas systems',#14899,$,$);
+#14928=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_60_15','Compressed air supply systems',#14927,$,$);
+#14929=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_60_33','Gas vaporizing systems',#14927,$,$);
+#14930=IFCCLASSIFICATIONREFERENCE($,'Ss_55_20_85','Specialist and high purity gas supply systems',#14899,$,$);
+#14931=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30','Fire-extinguishing systems',#14834,$,$);
+#14932=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_30','Foam fire-extinguishing and fire-suppression systems',#14931,$,$);
+#14933=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_30_31','Foam fire-extinguishing systems',#14932,$,$);
+#14934=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_35','Gaseous fire-extinguishing systems',#14931,$,$);
+#14935=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_35_10','Carbon dioxide fire-extinguishing systems',#14934,$,$);
+#14936=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_35_35','Halocarbon gas total flooding fire-extinguishing systems',#14934,$,$);
+#14937=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_35_40','Inert gas total flooding fire-extinguishing systems',#14934,$,$);
+#14938=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_60','Particle-based fire-extinguishing systems',#14931,$,$);
+#14939=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_60_15','Condensed aerosol fire-suppression systems',#14938,$,$);
+#14940=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_60_24','Dry chemical fire-extinguishing systems',#14938,$,$);
+#14941=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_65','Portable fire-extinguishing systems',#14931,$,$);
+#14942=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_65_30','Fire blanket systems',#14941,$,$);
+#14943=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_65_35','Fire bucket systems',#14941,$,$);
+#14944=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_65_65','Portable fire extinguisher systems',#14941,$,$);
+#14945=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96','Water firefighting systems',#14931,$,$);
+#14946=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_24','Dry dropper systems',#14945,$,$);
+#14947=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_25','Dry riser systems',#14945,$,$);
+#14948=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_29','Fire hose reel systems',#14945,$,$);
+#14949=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_30','Fire hydrant systems',#14945,$,$);
+#14950=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_95','Water cannon firefighting systems',#14945,$,$);
+#14951=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_96_97','Wet riser systems',#14945,$,$);
+#14952=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98','Water fire suppression systems',#14931,$,$);
+#14953=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98_21','Deluge systems',#14952,$,$);
+#14954=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98_23','Domestic and residential sprinkler systems',#14952,$,$);
+#14955=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98_70','Residential water mist systems',#14952,$,$);
+#14956=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98_85','Sprinkler systems',#14952,$,$);
+#14957=IFCCLASSIFICATIONREFERENCE($,'Ss_55_30_98_96','Water mist systems',#14952,$,$);
+#14958=IFCCLASSIFICATIONREFERENCE($,'Ss_55_40','Steam distribution and supply systems',#14834,$,$);
+#14959=IFCCLASSIFICATIONREFERENCE($,'Ss_55_40_85','Steam supply and condensate systems',#14958,$,$);
+#14960=IFCCLASSIFICATIONREFERENCE($,'Ss_55_40_85_38','Hospital steam supply and condensate systems',#14959,$,$);
+#14961=IFCCLASSIFICATIONREFERENCE($,'Ss_55_40_85_41','Industrial steam supply and condensate systems',#14959,$,$);
+#14962=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50','Liquid fuel distribution and supply systems',#14834,$,$);
+#14963=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_46','Liquid fuel distribution network systems',#14962,$,$);
+#14964=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_46_58','Oil distribution network systems',#14963,$,$);
+#14965=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47','Liquid fuel supply systems',#14962,$,$);
+#14966=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_10','Biodiesel supply systems',#14965,$,$);
+#14967=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_12','Bioethanol supply systems',#14965,$,$);
+#14968=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_21','Diesel supply systems',#14965,$,$);
+#14969=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_32','Fuel oil supply systems',#14965,$,$);
+#14970=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_45','Kerosene/ jet fuel supply systems',#14965,$,$);
+#14971=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_46','Liquid biofuel supply systems',#14965,$,$);
+#14972=IFCCLASSIFICATIONREFERENCE($,'Ss_55_50_47_61','Petrol supply systems',#14965,$,$);
+#14973=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60','Process liquid distribution and supply systems',#14834,$,$);
+#14974=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60_45','Liquid acids and bases supply systems',#14973,$,$);
+#14975=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60_47','Liquid chemicals supply systems',#14973,$,$);
+#14976=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60_50','Liquid polymer supply systems',#14973,$,$);
+#14977=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60_55','Lubrication supply systems',#14973,$,$);
+#14978=IFCCLASSIFICATIONREFERENCE($,'Ss_55_60_55_70','Rail lubrication supply systems',#14977,$,$);
+#14979=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70','Water distribution and supply systems',#14834,$,$);
+#14980=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03','Aquaculture supply and recirculation systems',#14979,$,$);
+#14981=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_29','Feeding systems',#14980,$,$);
+#14982=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_31','Freshwater intake systems',#14980,$,$);
+#14983=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_70','Recirculating aquaculture systems',#14980,$,$);
+#14984=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_78','Seawater intake systems',#14980,$,$);
+#14985=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_80','Skimming systems',#14980,$,$);
+#14986=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_03_94','Vaccination systems',#14980,$,$);
+#14987=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38','Hot and cold water supply systems',#14979,$,$);
+#14988=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_15','Cold water supply systems',#14987,$,$);
+#14989=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_20','Direct hot water storage supply systems',#14987,$,$);
+#14990=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_40','Incoming water supply systems',#14987,$,$);
+#14991=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_42','Indirect hot water storage supply systems',#14987,$,$);
+#14992=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_45','Instantaneous hot water supply systems',#14987,$,$);
+#14993=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_38_65','Pumped cold water supply systems',#14987,$,$);
+#14994=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_39','Hydroelectric pressure water supply systems',#14979,$,$);
+#14995=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_39_10','Buried pressure pipeline systems',#14994,$,$);
+#14996=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42','Irrigation systems',#14979,$,$);
+#14997=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42_20','Drip irrigation systems',#14996,$,$);
+#14998=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42_50','Manual irrigation systems',#14996,$,$);
+#14999=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42_60','Passive irrigation systems',#14996,$,$);
+#15000=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42_85','Sprinkler irrigation systems',#14996,$,$);
+#15001=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_42_87','Subirrigation systems',#14996,$,$);
+#15002=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_65','Treated water storage systems',#14979,$,$);
+#15003=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_65_02','Treated water above-ground storage systems',#15002,$,$);
+#15004=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_65_06','Treated water below-ground storage systems',#15002,$,$);
+#15005=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_70','Treated water pumping systems',#14979,$,$);
+#15006=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_70_23','Treated water dry well pumping systems',#15005,$,$);
+#15007=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_70_95','Treated water wet well pumping systems',#15005,$,$);
+#15008=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_94','Washing systems',#14979,$,$);
+#15009=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_94_94','Wash plant systems',#15008,$,$);
+#15010=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_94_96','Wheel washing systems',#15008,$,$);
+#15011=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_95','Water distribution network systems',#14979,$,$);
+#15012=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_95_34','Treated water gravity pipeline systems',#15011,$,$);
+#15013=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_95_50','Treated water pressure pipeline systems',#15011,$,$);
+#15014=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_95_66','Private water distribution network systems',#15011,$,$);
+#15015=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_95_85','Treated water siphon systems',#15011,$,$);
+#15016=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_96','Water feature systems',#14979,$,$);
+#15017=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_96_15','Cascade and waterfall systems',#15016,$,$);
+#15018=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_96_31','Fountain and jet systems',#15016,$,$);
+#15019=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_96_83','Self-contained water feature systems',#15016,$,$);
+#15020=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_96_96','Water play systems',#15016,$,$);
+#15021=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_97','Consumer water reclamation systems',#14979,$,$);
+#15022=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_97_35','Grey water reclamation systems',#15021,$,$);
+#15023=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_97_70','Rainwater reclamation systems',#15021,$,$);
+#15024=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_98','Consumer water treatment systems',#14979,$,$);
+#15025=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_98_08','Bore water treatment systems',#15024,$,$);
+#15026=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_98_13','Chemical-free water treatment systems',#15024,$,$);
+#15027=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_98_85','Swimming pool water treatment systems',#15024,$,$);
+#15028=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_98_92','Ultrapure water treatment systems',#15024,$,$);
+#15029=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_99','Water movement systems',#14979,$,$);
+#15030=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_99_84','Stoplog systems',#15029,$,$);
+#15031=IFCCLASSIFICATIONREFERENCE($,'Ss_55_70_99_96','Water baffle systems',#15029,$,$);
+#15032=IFCCLASSIFICATIONREFERENCE($,'Ss_55_90','Piped solids distribution and supply systems',#14834,$,$);
+#15033=IFCCLASSIFICATIONREFERENCE($,'Ss_55_90_65','Piped granule and powder supply systems',#15032,$,$);
+#15034=IFCCLASSIFICATIONREFERENCE($,'Ss_60','Heating, cooling and refrigeration systems',#7,$,$);
+#15035=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30','Rail and paving heating systems',#15034,$,$);
+#15036=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_60','Pavement heating systems',#15035,$,$);
+#15037=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_60_27','Electric pavement heating systems',#15036,$,$);
+#15038=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_70','Railway heating systems',#15035,$,$);
+#15039=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_70_65','Points heating systems',#15038,$,$);
+#15040=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_75','Runway heating systems',#15035,$,$);
+#15041=IFCCLASSIFICATIONREFERENCE($,'Ss_60_30_90','Tramway heating systems',#15035,$,$);
+#15042=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40','Space heating and cooling systems',#15034,$,$);
+#15043=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_13','Climatic ceiling and beam systems',#15042,$,$);
+#15044=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_13_13','Climatic beam systems',#15043,$,$);
+#15045=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_13_14','Climatic ceiling systems',#15043,$,$);
+#15046=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_15','Combined heating, cooling and power systems',#15042,$,$);
+#15047=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_15_40','Combined heat and power systems',#15046,$,$);
+#15048=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17','Cooling systems',#15042,$,$);
+#15049=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17_12','Chilled water systems',#15048,$,$);
+#15050=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17_15','Condenser water systems',#15048,$,$);
+#15051=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17_21','District cooling systems',#15048,$,$);
+#15052=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17_40','Ice storage systems',#15048,$,$);
+#15053=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_17_96','Water cooling systems',#15048,$,$);
+#15054=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_36','Heat pump systems',#15042,$,$);
+#15055=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_36_05','Air source heat pump systems',#15054,$,$);
+#15056=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_36_35','Ground source heat pump systems',#15054,$,$);
+#15057=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_36_96','Water source heat pump systems',#15054,$,$);
+#15058=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37','Heating systems',#15042,$,$);
+#15059=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_21','Direct gas-fired heating systems',#15058,$,$);
+#15060=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_22','District heating systems',#15058,$,$);
+#15061=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_26','Electric heating systems',#15058,$,$);
+#15062=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_48','Low-temperature hot water heating systems',#15058,$,$);
+#15063=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_51','Medium-temperature hot water heating systems',#15058,$,$);
+#15064=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_81','Solar heating systems',#15058,$,$);
+#15065=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_37_85','Steam heating systems',#15058,$,$);
+#15066=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_84','Space heating and cooling distribution network systems',#15042,$,$);
+#15067=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_84_21','District cooling distribution network systems',#15066,$,$);
+#15068=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_84_22','District heating distribution network systems',#15066,$,$);
+#15069=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_90','Trace heating systems',#15042,$,$);
+#15070=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_90_28','Electrical resistance trace heating systems',#15069,$,$);
+#15071=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_92','Underfloor heating and cooling systems',#15042,$,$);
+#15072=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_92_15','Combined underfloor heating and cooling systems',#15071,$,$);
+#15073=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_92_27','Electric underfloor heating systems',#15071,$,$);
+#15074=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_92_92','Underfloor chilled water systems',#15071,$,$);
+#15075=IFCCLASSIFICATIONREFERENCE($,'Ss_60_40_92_94','Underfloor low-temperature hot water heating systems',#15071,$,$);
+#15076=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60','Refrigeration systems',#15034,$,$);
+#15077=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_15','Cold room systems',#15076,$,$);
+#15078=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_15_10','Catering cold room systems',#15077,$,$);
+#15079=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_15_50','Mortuary cold room systems',#15077,$,$);
+#15080=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_17','Cold storage systems',#15076,$,$);
+#15081=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_70','Refrigerant systems',#15076,$,$);
+#15082=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_70_15','Refrigerant charging systems',#15081,$,$);
+#15083=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_70_70','Refrigerant recovery systems',#15081,$,$);
+#15084=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_70_71','Refrigerant cooling systems',#15081,$,$);
+#15085=IFCCLASSIFICATIONREFERENCE($,'Ss_60_60_70_94','Variable refrigerant flow systems',#15081,$,$);
+#15086=IFCCLASSIFICATIONREFERENCE($,'Ss_60_80','Drying systems',#15034,$,$);
+#15087=IFCCLASSIFICATIONREFERENCE($,'Ss_60_80_08','Bottle and can drying systems',#15086,$,$);
+#15088=IFCCLASSIFICATIONREFERENCE($,'Ss_65','Ventilation and air conditioning systems',#7,$,$);
+#15089=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40','Ventilation systems',#15088,$,$);
+#15090=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_32','Fume extract systems',#15089,$,$);
+#15091=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_32_32','Fume cupboard extract systems',#15090,$,$);
+#15092=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_32_70','Recirculatory fume cupboard systems',#15090,$,$);
+#15093=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_32_75','Safety cabinet extract systems',#15090,$,$);
+#15094=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33','General space ventilation systems',#15089,$,$);
+#15095=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_45','Kitchen extract ventilation systems',#15094,$,$);
+#15096=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_48','Local extract ventilation systems',#15094,$,$);
+#15097=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_50','Mechanical extract ventilation systems',#15094,$,$);
+#15098=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_51','Mechanical supply ventilation systems',#15094,$,$);
+#15099=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_52','Mechanical and whole building ventilation systems',#15094,$,$);
+#15100=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_56','Natural ventilation systems',#15094,$,$);
+#15101=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_60','Passive stack ventilation systems',#15094,$,$);
+#15102=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_33_90','Toilet extract ventilation systems',#15094,$,$);
+#15103=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_42','Industrial fume extract systems',#15089,$,$);
+#15104=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_42_25','Dust extract systems',#15103,$,$);
+#15105=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_42_36','Hazardous area extract systems',#15103,$,$);
+#15106=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_42_45','Local exhaust ventilation systems',#15103,$,$);
+#15107=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_42_95','Vehicle exhaust extract systems',#15103,$,$);
+#15108=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_80','Smoke extract and control systems',#15089,$,$);
+#15109=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_80_56','Natural smoke and heat exhaust ventilation systems',#15108,$,$);
+#15110=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_80_65','Pressure differential systems',#15108,$,$);
+#15111=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_80_80','Smoke and heat exhaust ventilation systems',#15108,$,$);
+#15112=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_94','Vehicular space ventilation systems',#15089,$,$);
+#15113=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_94_10','Car park extract systems',#15112,$,$);
+#15114=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_94_11','Car park supply systems',#15112,$,$);
+#15115=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_94_88','Tunnel pressurization systems',#15112,$,$);
+#15116=IFCCLASSIFICATIONREFERENCE($,'Ss_65_40_94_90','Tunnel ventilation systems',#15112,$,$);
+#15117=IFCCLASSIFICATIONREFERENCE($,'Ss_65_60','Specialist ventilation systems',#15088,$,$);
+#15118=IFCCLASSIFICATIONREFERENCE($,'Ss_65_60_55','Hazardous processes ventilation systems',#15117,$,$);
+#15119=IFCCLASSIFICATIONREFERENCE($,'Ss_65_60_55_22','Decontamination areas ventilation systems',#15118,$,$);
+#15120=IFCCLASSIFICATIONREFERENCE($,'Ss_65_60_55_36','Helium quench pipe systems',#15118,$,$);
+#15121=IFCCLASSIFICATIONREFERENCE($,'Ss_65_60_95','Wind tunnel systems',#15117,$,$);
+#15122=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80','Air conditioning systems',#15088,$,$);
+#15123=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_05','Central air conditioning systems',#15122,$,$);
+#15124=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_05_10','Centralized all-air conditioning systems',#15123,$,$);
+#15125=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_05_30','Fan coil unit air conditioning systems',#15123,$,$);
+#15126=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_05_40','Induction unit air conditioning systems',#15123,$,$);
+#15127=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_15','Controlled environment systems',#15122,$,$);
+#15128=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_15_14','Chilled air aisle containment systems',#15127,$,$);
+#15129=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_15_30','Fan wall systems',#15127,$,$);
+#15130=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_15_36','Hot air aisle containment systems',#15127,$,$);
+#15131=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_45','Local air conditioning systems',#15122,$,$);
+#15132=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_45_25','Evaporative cooling systems',#15131,$,$);
+#15133=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_45_48','Local underfloor air conditioning systems',#15131,$,$);
+#15134=IFCCLASSIFICATIONREFERENCE($,'Ss_65_80_45_72','Room air conditioning systems',#15131,$,$);
+#15135=IFCCLASSIFICATIONREFERENCE($,'Ss_70','Electrical systems',#7,$,$);
+#15136=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10','Electrical power generation and transmission systems',#15135,$,$);
+#15137=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_30','Fossil fuel power generation systems',#15136,$,$);
+#15138=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_30_33','Gas power generating systems',#15137,$,$);
+#15139=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_30_70','Reciprocating internal combustion engine',#15137,$,$);
+#15140=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_30_72','Reciprocating internal combustion engine driven alternating current generator systems',#15137,$,$);
+#15141=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_35','High-voltage transmission systems',#15136,$,$);
+#15142=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70','Renewable power generation systems',#15136,$,$);
+#15143=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_33','Geothermal power generation systems',#15142,$,$);
+#15144=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_35','Grid-connected photovoltaic systems',#15142,$,$);
+#15145=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_36','Hydroelectric power generation systems',#15142,$,$);
+#15146=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_80','Small-scale wave and tidal power generation systems',#15142,$,$);
+#15147=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_82','Small-scale wind-powered electricity generation systems',#15142,$,$);
+#15148=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_85','Stand-alone photovoltaic systems',#15142,$,$);
+#15149=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_95','Water mill systems',#15142,$,$);
+#15150=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_97','Water turbine systems',#15142,$,$);
+#15151=IFCCLASSIFICATIONREFERENCE($,'Ss_70_10_70_98','Wind power generating systems',#15142,$,$);
+#15152=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30','Electricity distribution systems',#15135,$,$);
+#15153=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_10','Cable management systems',#15152,$,$);
+#15154=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_10_28','Extra-low-voltage cable management systems',#15153,$,$);
+#15155=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_10_35','High-voltage cable management systems',#15153,$,$);
+#15156=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_10_45','Low-voltage cable management systems',#15153,$,$);
+#15157=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_25','Electrical protection systems',#15152,$,$);
+#15158=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_25_25','Earthing and bonding systems',#15157,$,$);
+#15159=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_25_45','Lightning protection systems',#15157,$,$);
+#15160=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_35','High-voltage systems',#15152,$,$);
+#15161=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_35_30','High-voltage site connection systems',#15160,$,$);
+#15162=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_35_35','High-voltage distribution systems',#15160,$,$);
+#15163=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_45','Low-voltage systems',#15152,$,$);
+#15164=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_45_28','Extra-low-voltage distribution systems',#15163,$,$);
+#15165=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_45_40','Low-voltage site connection systems',#15163,$,$);
+#15166=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_45_45','Low-voltage distribution systems',#15163,$,$);
+#15167=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_45_92','Uninterruptible power supply systems',#15163,$,$);
+#15168=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_50','Medium-voltage systems',#15152,$,$);
+#15169=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_50_50','Medium-voltage site connection systems',#15168,$,$);
+#15170=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_50_55','Medium-voltage distribution systems',#15168,$,$);
+#15171=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60','Overhead line traction power distribution systems',#15152,$,$);
+#15172=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_05','Autotransformer feeder (ATF) systems',#15171,$,$);
+#15173=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_11','Catenary cantilever overhead line systems',#15171,$,$);
+#15174=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_58','Overhead wiring mast arm gantry systems',#15171,$,$);
+#15175=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_59','Overhead wiring portal gantry systems',#15171,$,$);
+#15176=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_71','Retractable overhead wiring systems',#15171,$,$);
+#15177=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_60_89','Trolley wire overhead line systems',#15171,$,$);
+#15178=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_80','Small power systems',#15152,$,$);
+#15179=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_80_35','Hardwired low-voltage small power systems',#15178,$,$);
+#15180=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_80_45','Low-voltage small power systems with prefabricated wiring',#15178,$,$);
+#15181=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_90','Conductor rail traction power distribution systems',#15152,$,$);
+#15182=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_90_15','Conductor rail electrification systems',#15181,$,$);
+#15183=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_94','Vehicle charging systems',#15152,$,$);
+#15184=IFCCLASSIFICATIONREFERENCE($,'Ss_70_30_94_27','Electric vehicle charging systems',#15183,$,$);
+#15185=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80','Lighting systems',#15135,$,$);
+#15186=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01','Aeronautical lighting systems',#15185,$,$);
+#15187=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_02','Approach lighting systems',#15186,$,$);
+#15188=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_03','Apron lighting systems',#15186,$,$);
+#15189=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_36','Heliport lighting systems',#15186,$,$);
+#15190=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_47','Lighting beacon systems',#15186,$,$);
+#15191=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_65','Precision approach path indicator systems',#15186,$,$);
+#15192=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_74','Runway lighting systems',#15186,$,$);
+#15193=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_01_87','Taxiway lighting systems',#15186,$,$);
+#15194=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25','External lighting systems',#15185,$,$);
+#15195=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_05','Amenity lighting systems',#15194,$,$);
+#15196=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_59','Outdoor workplace lighting systems',#15194,$,$);
+#15197=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_65','Platform lighting systems',#15194,$,$);
+#15198=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_69','Railway lighting systems',#15194,$,$);
+#15199=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_70','Roadway lighting systems',#15194,$,$);
+#15200=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_80','Shaft lighting systems',#15194,$,$);
+#15201=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_88','Tunnel emergency lighting systems',#15194,$,$);
+#15202=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_25_90','Tunnel lighting systems',#15194,$,$);
+#15203=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33','General lighting systems',#15185,$,$);
+#15204=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33_12','Central battery-supplied emergency lighting systems',#15203,$,$);
+#15205=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33_30','Fibre-optic lighting systems',#15203,$,$);
+#15206=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33_33','General lighting systems with prefabricated wiring',#15203,$,$);
+#15207=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33_35','Hardwired general lighting systems',#15203,$,$);
+#15208=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_33_88','Theatrical/ stage lighting systems',#15203,$,$);
+#15209=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_85','Submersible lighting systems',#15185,$,$);
+#15210=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_85_92','Underwater lighting systems',#15209,$,$);
+#15211=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_95','Vehicle lighting systems',#15185,$,$);
+#15212=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_95_28','External vehicle lighting systems',#15211,$,$);
+#15213=IFCCLASSIFICATIONREFERENCE($,'Ss_70_80_95_40','Internal vehicle lighting systems',#15211,$,$);
+#15214=IFCCLASSIFICATIONREFERENCE($,'Ss_75','Communications, security, safety, control and protection systems',#7,$,$);
+#15215=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10','Communications systems',#15214,$,$);
+#15216=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21','Data distribution and telecommunications systems',#15215,$,$);
+#15217=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21_21','Data distribution systems',#15216,$,$);
+#15218=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21_48','Local area network (LAN) systems',#15216,$,$);
+#15219=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21_52','Mobile telecommunications systems',#15216,$,$);
+#15220=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21_88','Telecommunications systems',#15216,$,$);
+#15221=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_21_97','Wide area network (WAN) systems',#15216,$,$);
+#15222=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_46','Listening systems',#15215,$,$);
+#15223=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_46_05','Audio frequency induction loop systems',#15222,$,$);
+#15224=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_46_42','Infrared listening systems',#15222,$,$);
+#15225=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_51','Medical communications systems',#15215,$,$);
+#15226=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_51_51','Medical audiovisual systems',#15225,$,$);
+#15227=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68','Public communications systems',#15215,$,$);
+#15228=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_02','Advertising display systems',#15227,$,$);
+#15229=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_07','Bell communication systems',#15227,$,$);
+#15230=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_13','Clock systems',#15227,$,$);
+#15231=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_42','Information display systems',#15227,$,$);
+#15232=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_68','Public address systems',#15227,$,$);
+#15233=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_68_69','Queue management systems',#15227,$,$);
+#15234=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_70','Radio and television distribution systems',#15215,$,$);
+#15235=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_70_70','Radio distribution systems',#15234,$,$);
+#15236=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_70_88','Television distribution systems',#15234,$,$);
+#15237=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_72','Emergency communication systems',#15215,$,$);
+#15238=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_72_30','Firefighting intercom systems',#15237,$,$);
+#15239=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_72_70','Radio communications systems',#15237,$,$);
+#15240=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_72_72','Roadway emergency communication systems',#15237,$,$);
+#15241=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_88','Timing and scoring systems',#15215,$,$);
+#15242=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_88_05','Athletics timing and scoring systems',#15241,$,$);
+#15243=IFCCLASSIFICATIONREFERENCE($,'Ss_75_10_88_86','Swimming pool timing and scoring systems',#15241,$,$);
+#15244=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30','Signal systems',#15214,$,$);
+#15245=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_35','Road signal and control systems',#15244,$,$);
+#15246=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_35_60','Pedestrian crossing signal systems',#15245,$,$);
+#15247=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_35_70','Ramp metering systems',#15245,$,$);
+#15248=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_35_86','Toll systems',#15245,$,$);
+#15249=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_35_88','Traffic signal systems',#15245,$,$);
+#15250=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_50','Marine signal systems',#15244,$,$);
+#15251=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_60','Obstacle beacon systems',#15244,$,$);
+#15252=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70','Railway signal and control systems',#15244,$,$);
+#15253=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_02','Automatic train operation (ATO) systems',#15252,$,$);
+#15254=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_03','Automatic train protection (ATP) systems',#15252,$,$);
+#15255=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_04','Automatic train stop (ATS) systems',#15252,$,$);
+#15256=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_05','Automatic warning systems (AWS)',#15252,$,$);
+#15257=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_15','Communications based train control (CBTC) systems',#15252,$,$);
+#15258=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_27','Emergency traction current discharge systems (ETCDS)',#15252,$,$);
+#15259=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_30','Fixed block signalling systems',#15252,$,$);
+#15260=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_42','Interlocking systems',#15252,$,$);
+#15261=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_53','Moving block signalling systems',#15252,$,$);
+#15262=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_70','Rail signal systems',#15252,$,$);
+#15263=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_70_90','Train protection warning systems (TPWS)',#15252,$,$);
+#15264=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_90','Tramway signal systems',#15244,$,$);
+#15265=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_97','Waterway signal systems',#15244,$,$);
+#15266=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_98','Wind direction indication systems',#15244,$,$);
+#15267=IFCCLASSIFICATIONREFERENCE($,'Ss_75_30_98_96','Windsock systems',#15266,$,$);
+#15268=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40','Security systems',#15214,$,$);
+#15269=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_02','Access control systems',#15268,$,$);
+#15270=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_02_05','Audio intercom systems',#15269,$,$);
+#15271=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_02_11','Card access control systems',#15269,$,$);
+#15272=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_02_94','Video intercom systems',#15269,$,$);
+#15273=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_53','Monitoring systems',#15268,$,$);
+#15274=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_53_70','Radio-frequency identification (RFID) tagging systems',#15273,$,$);
+#15275=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_53_86','Surveillance CCTV systems',#15273,$,$);
+#15276=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_53_90','Train dispatch CCTV systems',#15273,$,$);
+#15277=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_53_95','Voice recording systems',#15273,$,$);
+#15278=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_73','Security screening systems',#15268,$,$);
+#15279=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_73_11','Cabin baggage screening systems',#15278,$,$);
+#15280=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_73_60','Passenger screening systems',#15278,$,$);
+#15281=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_75','Security detection alarm systems',#15268,$,$);
+#15282=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_75_02','Aerospace security detection and warning systems',#15281,$,$);
+#15283=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_75_40','Intrusion and hold-up alarm systems',#15281,$,$);
+#15284=IFCCLASSIFICATIONREFERENCE($,'Ss_75_40_75_50','Marine and waterway security detection and warning systems',#15281,$,$);
+#15285=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50','Safety and protection systems',#15214,$,$);
+#15286=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_11','Emergency call systems',#15285,$,$);
+#15287=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_11_07','Baby protection systems',#15286,$,$);
+#15288=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_11_25','Emergency assistance call systems',#15286,$,$);
+#15289=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_11_27','Emergency voice communication systems',#15286,$,$);
+#15290=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_11_57','Nurse call systems',#15286,$,$);
+#15291=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_26','Debris detection systems',#15285,$,$);
+#15292=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_26_30','Foreign object debris (FOD) detection systems',#15291,$,$);
+#15293=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28','Fire and smoke detection and alarm systems',#15285,$,$);
+#15294=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28_05','Aspirating smoke detector systems',#15293,$,$);
+#15295=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28_22','Domestic premises'' fire detection and alarm systems',#15293,$,$);
+#15296=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28_24','Duct smoke detector systems',#15293,$,$);
+#15297=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28_29','Fire detection and alarm systems',#15293,$,$);
+#15298=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_28_95','Voice alarm systems',#15293,$,$);
+#15299=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_33','Gas detection and alarm systems',#15285,$,$);
+#15300=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_33_30','Fixed gas detection and alarm systems',#15299,$,$);
+#15301=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_33_32','Flow sample gas detection and alarm systems',#15299,$,$);
+#15302=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_33_71','Refrigerant leak detection and alarm systems',#15299,$,$);
+#15303=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_35','Healthcare imaging systems',#15285,$,$);
+#15304=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_50','Liquid detection and alarm systems',#15285,$,$);
+#15305=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_50_45','Liquid presence detection and alarm systems',#15304,$,$);
+#15306=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_50_96','Water leak detection and alarm systems',#15304,$,$);
+#15307=IFCCLASSIFICATIONREFERENCE($,'Ss_75_50_60','Patient monitoring and telemetry systems',#15285,$,$);
+#15308=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60','Environmental safety systems',#15214,$,$);
+#15309=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_45','Manmade disaster warning systems',#15308,$,$);
+#15310=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_45_15','Chemical spill detection and alarm systems',#15309,$,$);
+#15311=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_45_60','Oil spill detection and alarm systems',#15309,$,$);
+#15312=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_45_70','Radiation detection and alarm systems',#15309,$,$);
+#15313=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_50','Meteorological systems',#15308,$,$);
+#15314=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_50_50','Meteorological detection and warning systems',#15313,$,$);
+#15315=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_50_95','Weather observation systems',#15313,$,$);
+#15316=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55','Natural disaster warning and protection systems',#15308,$,$);
+#15317=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_25','Earthquake warning systems',#15316,$,$);
+#15318=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_29','Flood resilience systems',#15316,$,$);
+#15319=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_30','Flood warning systems',#15316,$,$);
+#15320=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_75','Seismic instrumentation systems',#15316,$,$);
+#15321=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_90','Tsunami warning systems',#15316,$,$);
+#15322=IFCCLASSIFICATIONREFERENCE($,'Ss_75_60_55_95','Volcanic eruption warning systems',#15316,$,$);
+#15323=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70','Control and management systems',#15214,$,$);
+#15324=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_05','Airport control systems',#15323,$,$);
+#15325=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_05_04','Automatic aircraft docking systems',#15324,$,$);
+#15326=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_10','Bridge control systems',#15323,$,$);
+#15327=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_20','Dam control systems',#15323,$,$);
+#15328=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_50','Marine control systems',#15323,$,$);
+#15329=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52','Mechanical engineering services control and management systems',#15323,$,$);
+#15330=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_03','Air-to-air heat pump control systems',#15329,$,$);
+#15331=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_14','Climatic ceiling panels and beams control systems',#15329,$,$);
+#15332=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_15','Combined heat and power control systems',#15329,$,$);
+#15333=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_16','Constant volume air conditioning control systems',#15329,$,$);
+#15334=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_17','Cooling system control systems',#15329,$,$);
+#15335=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_23','Domestic heating system control systems',#15329,$,$);
+#15336=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_28','Extract ventilation control systems',#15329,$,$);
+#15337=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_29','Fan coil unit air conditioning control systems',#15329,$,$);
+#15338=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_32','Fuel supply control systems',#15329,$,$);
+#15339=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_33','Gas-fired heating control systems',#15329,$,$);
+#15340=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_36','Heating system control systems',#15329,$,$);
+#15341=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_38','Heat pump control systems',#15329,$,$);
+#15342=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_52','Mixed mode ventilation control systems',#15329,$,$);
+#15343=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_56','Natural ventilation control systems',#15329,$,$);
+#15344=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_70','Radiant heating control systems',#15329,$,$);
+#15345=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_80','Smoke and heat detection extract control systems',#15329,$,$);
+#15346=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_81','Smoke and heat detection shut down control systems',#15329,$,$);
+#15347=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_85','Steam and condensate control systems',#15329,$,$);
+#15348=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_93','Variable volume air conditioning control systems',#15329,$,$);
+#15349=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_94','Ventilation control systems',#15329,$,$);
+#15350=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_96','Water supply control systems',#15329,$,$);
+#15351=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_52_97','Water-to-air heat pump control systems',#15329,$,$);
+#15352=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54','Metering, monitoring and management systems',#15323,$,$);
+#15353=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_03','Active water monitoring systems',#15352,$,$);
+#15354=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_05','Air quality monitoring systems',#15352,$,$);
+#15355=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_10','Building monitoring and management systems',#15352,$,$);
+#15356=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_15','Communications monitoring and management systems',#15352,$,$);
+#15357=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_25','Electricity metering systems',#15352,$,$);
+#15358=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_28','Fire systems management and control systems',#15352,$,$);
+#15359=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_30','Fuel metering systems',#15352,$,$);
+#15360=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_41','Instrumentation, automation and control systems',#15352,$,$);
+#15361=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_60','Passive water monitoring systems',#15352,$,$);
+#15362=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_75','Supervisory control and data acquisition (SCADA) systems',#15352,$,$);
+#15363=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_88','Telemetry systems',#15352,$,$);
+#15364=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_95','Water metering systems',#15352,$,$);
+#15365=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_96','Water quality monitoring systems',#15352,$,$);
+#15366=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_54_97','Wastewater quality monitoring systems',#15352,$,$);
+#15367=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_75','Rail control and monitoring systems',#15323,$,$);
+#15368=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_75_10','Brake monitoring systems (BMS)',#15367,$,$);
+#15369=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_75_70','Railway power control systems',#15367,$,$);
+#15370=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85','Structural monitoring systems',#15323,$,$);
+#15371=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_18','Crack gauge monitoring systems',#15370,$,$);
+#15372=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_27','Electrolevel monitoring systems',#15370,$,$);
+#15373=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_30','Fibre-optic monitoring systems',#15370,$,$);
+#15374=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_47','Liquid levelling monitoring systems',#15370,$,$);
+#15375=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_48','Load cell monitoring systems',#15370,$,$);
+#15376=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_62','Piezometer monitoring systems',#15370,$,$);
+#15377=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_66','Precise levelling monitoring systems',#15370,$,$);
+#15378=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_67','Prism monitoring systems',#15370,$,$);
+#15379=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_84','Strain gauge monitoring systems',#15370,$,$);
+#15380=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_86','Subsurface monitoring array systems',#15370,$,$);
+#15381=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_87','Tape extensometer monitoring systems',#15370,$,$);
+#15382=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_90','Tilt sensor monitoring systems',#15370,$,$);
+#15383=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_85_92','Total station monitoring systems',#15370,$,$);
+#15384=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90','Transport management systems',#15323,$,$);
+#15385=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90_05','Automatic number plate recognition (ANPR) systems',#15384,$,$);
+#15386=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90_90','Traffic enforcement camera systems',#15384,$,$);
+#15387=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90_91','Traffic management control systems',#15384,$,$);
+#15388=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90_92','Traveller information systems',#15384,$,$);
+#15389=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_90_94','Vehicle tag-reading systems',#15384,$,$);
+#15390=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_96','Water supply and wastewater control systems',#15323,$,$);
+#15391=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_96_21','Desludging control systems',#15390,$,$);
+#15392=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_96_30','Flow measurement and control systems',#15390,$,$);
+#15393=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_96_96','Wastewater supply control systems',#15390,$,$);
+#15394=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_96_98','Water supply quality control systems',#15390,$,$);
+#15395=IFCCLASSIFICATIONREFERENCE($,'Ss_75_70_97','Waterway control systems',#15323,$,$);
+#15396=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90','Ticket management systems',#15214,$,$);
+#15397=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_80','Ticketing systems',#15396,$,$);
+#15398=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_80_88','Ticket-dispensing systems',#15397,$,$);
+#15399=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_93','Ticket validation systems',#15396,$,$);
+#15400=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_93_11','Card reading systems',#15399,$,$);
+#15401=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_93_60','Passenger check-in systems',#15399,$,$);
+#15402=IFCCLASSIFICATIONREFERENCE($,'Ss_75_90_93_88','Ticket reading systems',#15399,$,$);
+#15403=IFCCLASSIFICATIONREFERENCE($,'Ss_80','Transport systems',#7,$,$);
+#15404=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10','Cable transport systems',#15403,$,$);
+#15405=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_05','Aerial tram systems',#15404,$,$);
+#15406=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_10','Cable car systems',#15404,$,$);
+#15407=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_15','Chairlift systems',#15404,$,$);
+#15408=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_30','Funicular systems',#15404,$,$);
+#15409=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_35','Gondola systems',#15404,$,$);
+#15410=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_70','Ropeway tow systems',#15404,$,$);
+#15411=IFCCLASSIFICATIONREFERENCE($,'Ss_80_10_85','Surface lift systems',#15404,$,$);
+#15412=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20','Conveying systems',#15403,$,$);
+#15413=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_05','Automatic guided vehicle systems',#15412,$,$);
+#15414=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_06','Baggage handling systems',#15412,$,$);
+#15415=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_06_04','Airport baggage handling systems',#15414,$,$);
+#15416=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_10','Bulk material conveying systems',#15412,$,$);
+#15417=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_11','Cargo handling systems',#15412,$,$);
+#15418=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_23','Document conveying systems',#15412,$,$);
+#15419=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_23_65','Pneumatic document conveying systems',#15418,$,$);
+#15420=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_60','Parcel sorting systems',#15412,$,$);
+#15421=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_62','People conveying systems',#15412,$,$);
+#15422=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_62_28','Escalator systems',#15421,$,$);
+#15423=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_62_53','Moving walkway systems',#15421,$,$);
+#15424=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_63','Piece conveying systems',#15412,$,$);
+#15425=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_63_59','Overhead piece conveying systems',#15424,$,$);
+#15426=IFCCLASSIFICATIONREFERENCE($,'Ss_80_20_65','Pneumatic conveying systems',#15412,$,$);
+#15427=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30','Crane and hoist systems',#15403,$,$);
+#15428=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_15','Crane systems',#15427,$,$);
+#15429=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_15_10','Bulk handling crane systems',#15428,$,$);
+#15430=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_15_15','Container handling crane systems',#15428,$,$);
+#15431=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_15_59','Overhead crane systems',#15428,$,$);
+#15432=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_20','Derrick systems',#15427,$,$);
+#15433=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25','Dynamic permanent access and safety equipment systems',#15427,$,$);
+#15434=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_30','Fixed rig suspended access systems',#15433,$,$);
+#15435=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_32','Gantry access systems',#15433,$,$);
+#15436=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_35','Guided type fall arrest systems',#15433,$,$);
+#15437=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_50','Mobile rig monorail suspended access systems',#15433,$,$);
+#15438=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_52','Mobile rig tracked suspended access systems',#15433,$,$);
+#15439=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_55','Mobile rig trackless suspended access systems',#15433,$,$);
+#15440=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_75','Robotic cleaning systems',#15433,$,$);
+#15441=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_80','Single point anchorage fall arrest systems',#15433,$,$);
+#15442=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_25_90','Travelling ladder access systems',#15433,$,$);
+#15443=IFCCLASSIFICATIONREFERENCE($,'Ss_80_30_40','Hoist systems',#15427,$,$);
+#15444=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50','Lift systems',#15403,$,$);
+#15445=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01','Accessible goods-only and service lift systems',#15444,$,$);
+#15446=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01_05','Electric accessible goods-only lift (AGOL) systems',#15445,$,$);
+#15447=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01_26','Electric service lift systems',#15445,$,$);
+#15448=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01_39','Hydraulic accessible goods-only lift (AGOL) systems',#15445,$,$);
+#15449=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01_40','Hydraulic service lift systems',#15445,$,$);
+#15450=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_01_50','Manual dumb waiter systems',#15445,$,$);
+#15451=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_02','Accessibility lifts and platform systems',#15444,$,$);
+#15452=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_02_65','Powered homelift systems',#15451,$,$);
+#15453=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_02_83','Stairlift systems',#15451,$,$);
+#15454=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_02_85','Step lift systems',#15451,$,$);
+#15455=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_02_94','Vertical lifting platform systems',#15451,$,$);
+#15456=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_60','Passenger and goods lift systems',#15444,$,$);
+#15457=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_60_26','Electric passenger and goods-passenger lift systems',#15456,$,$);
+#15458=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_60_39','Hydraulic passenger and goods-passenger lift systems',#15456,$,$);
+#15459=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_60_60','Paternoster systems',#15456,$,$);
+#15460=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_92','Vehicle and boat lifting systems',#15444,$,$);
+#15461=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_92_08','Boat lifting systems',#15460,$,$);
+#15462=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_94','Vehicle and boat stacking systems',#15444,$,$);
+#15463=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_94_08','Boat-stacking systems',#15462,$,$);
+#15464=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_94_11','Car-stacking systems',#15462,$,$);
+#15465=IFCCLASSIFICATIONREFERENCE($,'Ss_80_50_96','Warehouse stacking systems',#15444,$,$);
+#15466=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70','Track systems',#15403,$,$);
+#15467=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_46','Level crossing systems',#15466,$,$);
+#15468=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_46_60','Pedestrian level crossing systems',#15467,$,$);
+#15469=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_46_93','User worked level crossing systems',#15467,$,$);
+#15470=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_46_95','Vehicular level crossing systems',#15467,$,$);
+#15471=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_50','Monorail systems',#15466,$,$);
+#15472=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_70','Rail track systems',#15466,$,$);
+#15473=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_70_06','Ballasted rail track systems',#15472,$,$);
+#15474=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_70_27','Embedded rail systems',#15472,$,$);
+#15475=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_70_56','Non-embedded slab track rail systems',#15472,$,$);
+#15476=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_70_65','Precast track bed systems',#15472,$,$);
+#15477=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_89','Train arrestor systems',#15466,$,$);
+#15478=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_89_30','Fixed train arrestor systems',#15477,$,$);
+#15479=IFCCLASSIFICATIONREFERENCE($,'Ss_80_70_89_50','Moveable train arrestor systems',#15477,$,$);
+#15480=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80','Turntable systems',#15403,$,$);
+#15481=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80_20','Display turntable systems',#15480,$,$);
+#15482=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80_30','Floor turntable systems',#15480,$,$);
+#15483=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80_40','Industrial turntable systems',#15480,$,$);
+#15484=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80_70','Railway turntable systems',#15480,$,$);
+#15485=IFCCLASSIFICATIONREFERENCE($,'Ss_80_80_85','Stage turntable systems',#15480,$,$);
+#15486=IFCCLASSIFICATIONREFERENCE($,'Ss_80_90','Vehicle access systems',#15403,$,$);
+#15487=IFCCLASSIFICATIONREFERENCE($,'Ss_80_90_05','Aircraft passenger loading bridge systems',#15486,$,$);
+#15488=IFCCLASSIFICATIONREFERENCE($,'Ss_80_90_05_60','Passenger loading bridge systems',#15487,$,$);
+#15489=IFCCLASSIFICATIONREFERENCE($,'Ss_80_90_70','Spacecraft passenger access systems',#15486,$,$);
+#15490=IFCCLASSIFICATIONREFERENCE($,'Ss_80_90_75','Ship passenger loading bridge systems',#15486,$,$);
+#15491=IFCCLASSIFICATIONREFERENCE($,'Ss_82','Vehicle systems',#7,$,$);
+#15492=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70','Railway vehicle systems',#15491,$,$);
+#15493=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_65','Rail power supply systems',#15492,$,$);
+#15494=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_65_05','Auxiliary power supply systems',#15493,$,$);
+#15495=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70','Railway wagon systems',#15492,$,$);
+#15496=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70_09','Brake systems',#15495,$,$);
+#15497=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70_84','Steering systems',#15495,$,$);
+#15498=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70_94','Vehicle body systems',#15495,$,$);
+#15499=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70_95','Vehicle door systems',#15495,$,$);
+#15500=IFCCLASSIFICATIONREFERENCE($,'Ss_82_70_70_97','Wheelset systems',#15495,$,$);
+#15501=IFCCLASSIFICATIONREFERENCE($,'Ss_85','Process engineering systems',#7,$,$);
+#15502=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30','General process systems',#15501,$,$);
+#15503=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58','Odour control systems',#15502,$,$);
+#15504=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_07','Biofiltration systems',#15503,$,$);
+#15505=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_08','Bio-scrubber systems',#15503,$,$);
+#15506=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_10','Carbon filter systems',#15503,$,$);
+#15507=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_11','Catalytic iron filter systems',#15503,$,$);
+#15508=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_23','Dry installation systems',#15503,$,$);
+#15509=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_25','Dust and odour suppression systems',#15503,$,$);
+#15510=IFCCLASSIFICATIONREFERENCE($,'Ss_85_30_58_96','Wet scrubber systems',#15503,$,$);
+#15511=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50','Mechanical power systems',#15501,$,$);
+#15512=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50_65','Power supply systems',#15511,$,$);
+#15513=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50_65_27','Engine cooling systems',#15512,$,$);
+#15514=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50_65_28','Engine exhaust systems',#15512,$,$);
+#15515=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50_65_38','Hydraulic power systems',#15512,$,$);
+#15516=IFCCLASSIFICATIONREFERENCE($,'Ss_85_50_65_40','Internal combustion engine systems',#15512,$,$);
+#15517=IFCCLASSIFICATIONREFERENCE($,'Ss_85_72','Robotic systems',#15501,$,$);
+#15518=IFCCLASSIFICATIONREFERENCE($,'Ss_90','Soft facility management systems',#7,$,$);
+#15519=IFCCLASSIFICATIONREFERENCE($,'Ss_90_05','Demand for space',#15518,$,$);
+#15520=IFCCLASSIFICATIONREFERENCE($,'Ss_90_06','Demand for technical infrastructure',#15518,$,$);
+#15521=IFCCLASSIFICATIONREFERENCE($,'Ss_90_07','Demand for cleaning',#15518,$,$);
+#15522=IFCCLASSIFICATIONREFERENCE($,'Ss_90_08','Demand related to outdoor space',#15518,$,$);
+#15523=IFCCLASSIFICATIONREFERENCE($,'Ss_90_09','Workplace',#15518,$,$);
+#15524=IFCCLASSIFICATIONREFERENCE($,'Ss_90_10','Specific demand related to space and infrastructure',#15518,$,$);
+#15525=IFCCLASSIFICATIONREFERENCE($,'Ss_90_11','Demand for health, safety and security',#15518,$,$);
+#15526=IFCCLASSIFICATIONREFERENCE($,'Ss_90_12','Hospitality demands',#15518,$,$);
+#15527=IFCCLASSIFICATIONREFERENCE($,'Ss_90_13','Demand for information and communication',#15518,$,$);
+#15528=IFCCLASSIFICATIONREFERENCE($,'Ss_90_14','Demand for logistics',#15518,$,$);
+#15529=IFCCLASSIFICATIONREFERENCE($,'Ss_90_15','Demand for integrated management, consultancy and administration',#15518,$,$);
+#15530=IFCCLASSIFICATIONREFERENCE($,'Ss_90_20','Specific demand of administrative, commercial and protective services',#15518,$,$);
+#15531=IFCCLASSIFICATIONREFERENCE($,'Ss_90_25','Specific demand of cultural, educational, scientific and information organizations',#15518,$,$);
+#15532=IFCCLASSIFICATIONREFERENCE($,'Ss_90_30','Specific demand of industrial organizations',#15518,$,$);
+#15533=IFCCLASSIFICATIONREFERENCE($,'Ss_90_35','Specific demand of medical, health, welfare and sanitary organizations',#15518,$,$);
+#15534=IFCCLASSIFICATIONREFERENCE($,'Ss_90_40','Specific demand of recreational organizations',#15518,$,$);
+#15535=IFCCLASSIFICATIONREFERENCE($,'Ss_90_45','Specific demand of residential organizations',#15518,$,$);
+#15536=IFCCLASSIFICATIONREFERENCE($,'Ss_90_50','Specific demand of disposal organizations',#15518,$,$);
+#15537=IFCCLASSIFICATIONREFERENCE($,'Ss_90_55','Specific demand of piped supply organizations',#15518,$,$);
+#15538=IFCCLASSIFICATIONREFERENCE($,'Ss_90_60','Specific demand of heating, cooling and refrigeration organizations',#15518,$,$);
+#15539=IFCCLASSIFICATIONREFERENCE($,'Ss_90_65','Specific demand of ventilation and air conditioning organizations',#15518,$,$);
+#15540=IFCCLASSIFICATIONREFERENCE($,'Ss_90_70','Specific demand of electrical organizations',#15518,$,$);
+#15541=IFCCLASSIFICATIONREFERENCE($,'Ss_90_75','Specific demand of communications, security, safety and protection organizations',#15518,$,$);
+#15542=IFCCLASSIFICATIONREFERENCE($,'Ss_90_80','Specific demand of rail organizations',#15518,$,$);
+#15543=IFCCLASSIFICATIONREFERENCE($,'Ss_90_81','Specific demand of road organizations',#15518,$,$);
+#15544=IFCCLASSIFICATIONREFERENCE($,'Ss_90_82','Specific demand of marine and waterway organizations',#15518,$,$);
+#15545=IFCCLASSIFICATIONREFERENCE($,'Ss_90_83','Specific demand of cable transport organizations',#15518,$,$);
+#15546=IFCCLASSIFICATIONREFERENCE($,'Ss_90_84','Specific demand of aerospace organizations',#15518,$,$);
+#15547=IFCCLASSIFICATIONREFERENCE($,'Ac_05','Project management activities',#2,$,$);
+#15548=IFCCLASSIFICATIONREFERENCE($,'Ac_05_00','Strategy stage activities',#15547,$,$);
+#15549=IFCCLASSIFICATIONREFERENCE($,'Ac_05_00_10','Business case development',#15548,$,$);
+#15550=IFCCLASSIFICATIONREFERENCE($,'Ac_05_00_80','Strategic brief preparation',#15548,$,$);
+#15551=IFCCLASSIFICATIONREFERENCE($,'Ac_05_00_82','Strategic brief submission',#15548,$,$);
+#15552=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10','Brief stage activities',#15547,$,$);
+#15553=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_15','Cost estimate preparation',#15552,$,$);
+#15554=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_17','Cost estimate submission',#15552,$,$);
+#15555=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_29','Feasibility study preparation',#15552,$,$);
+#15556=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_31','Feasibility study submission',#15552,$,$);
+#15557=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_61','Preliminary design preparation',#15552,$,$);
+#15558=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_63','Preliminary design submission',#15552,$,$);
+#15559=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_65','Project brief and objectives preparation',#15552,$,$);
+#15560=IFCCLASSIFICATIONREFERENCE($,'Ac_05_10_67','Project brief and objectives submission',#15552,$,$);
+#15561=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20','Concept stage activities',#15547,$,$);
+#15562=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20_15','Concept cost report preparation',#15561,$,$);
+#15563=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20_17','Concept cost report submission',#15561,$,$);
+#15564=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20_21','Concept design development',#15561,$,$);
+#15565=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20_23','Concept design report preparation',#15561,$,$);
+#15566=IFCCLASSIFICATIONREFERENCE($,'Ac_05_20_25','Concept design report submission',#15561,$,$);
+#15567=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30','Definition stage activities',#15547,$,$);
+#15568=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_03','Agreement negotiating',#15567,$,$);
+#15569=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_10','Building regulation assessing',#15567,$,$);
+#15570=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_21','Definition design cost report preparation',#15567,$,$);
+#15571=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_23','Definition design cost report submission',#15567,$,$);
+#15572=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_25','Definition design development',#15567,$,$);
+#15573=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_27','Definition design report preparation',#15567,$,$);
+#15574=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_28','Definition design submission',#15567,$,$);
+#15575=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_29','Drainage adoption agreeing',#15567,$,$);
+#15576=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_37','Highways adoption agreeing',#15567,$,$);
+#15577=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_60','Party wall notices agreeing',#15567,$,$);
+#15578=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_64','Planning preparation',#15567,$,$);
+#15579=IFCCLASSIFICATIONREFERENCE($,'Ac_05_30_85','Sustainability assessing',#15567,$,$);
+#15580=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40','Design stage activities',#15547,$,$);
+#15581=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_60','Prototype requesting',#15580,$,$);
+#15582=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_70','Sample requesting',#15580,$,$);
+#15583=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_85','Technical design cost report preparation',#15580,$,$);
+#15584=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_87','Technical design development',#15580,$,$);
+#15585=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_89','Technical design report preparation',#15580,$,$);
+#15586=IFCCLASSIFICATIONREFERENCE($,'Ac_05_40_91','Technical design submission',#15580,$,$);
+#15587=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50','Build and commission stage activities',#15547,$,$);
+#15588=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_15','Contractor mobilizing',#15587,$,$);
+#15589=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_41','Information submitting',#15587,$,$);
+#15590=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_43','Inspecting',#15587,$,$);
+#15591=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_51','Measuring',#15587,$,$);
+#15592=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_54','Monitoring activities',#15587,$,$);
+#15593=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_60','Prototype submission',#15587,$,$);
+#15594=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_70','Sample submission',#15587,$,$);
+#15595=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_72','Setting out',#15587,$,$);
+#15596=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_75','Starting on site',#15587,$,$);
+#15597=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_85','Tender analyzing',#15587,$,$);
+#15598=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_87','Tender negotiating',#15587,$,$);
+#15599=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_89','Tender recommendation reporting',#15587,$,$);
+#15600=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_91','Timber sourcing',#15587,$,$);
+#15601=IFCCLASSIFICATIONREFERENCE($,'Ac_05_50_97','Works commencing',#15587,$,$);
+#15602=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60','Handover and closeout stage activities',#15547,$,$);
+#15603=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_10','Building contract administrating',#15602,$,$);
+#15604=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_15','Completing',#15602,$,$);
+#15605=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_30','Final clean',#15602,$,$);
+#15606=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_35','Handing over',#15602,$,$);
+#15607=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_60','Partial handing over',#15602,$,$);
+#15608=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_70','Rectifying non-compliant items',#15602,$,$);
+#15609=IFCCLASSIFICATIONREFERENCE($,'Ac_05_60_80','Sectional completing',#15602,$,$);
+#15610=IFCCLASSIFICATIONREFERENCE($,'Ac_05_70','Operation and end of life stage activities',#15547,$,$);
+#15611=IFCCLASSIFICATIONREFERENCE($,'Ac_05_70_10','Building user assisting',#15610,$,$);
+#15612=IFCCLASSIFICATIONREFERENCE($,'Ac_05_70_48','Logistics',#15610,$,$);
+#15613=IFCCLASSIFICATIONREFERENCE($,'Ac_10','Preparation, construction and repair',#2,$,$);
+#15614=IFCCLASSIFICATIONREFERENCE($,'Ac_10_10','Deconstruction and demolition',#15613,$,$);
+#15615=IFCCLASSIFICATIONREFERENCE($,'Ac_10_10_20','Deconstruction',#15614,$,$);
+#15616=IFCCLASSIFICATIONREFERENCE($,'Ac_10_10_25','Demolition',#15614,$,$);
+#15617=IFCCLASSIFICATIONREFERENCE($,'Ac_10_20','Decontamination',#15613,$,$);
+#15618=IFCCLASSIFICATIONREFERENCE($,'Ac_10_30','Site clearance',#15613,$,$);
+#15619=IFCCLASSIFICATIONREFERENCE($,'Ac_10_30_10','Bush and scrub removal',#15618,$,$);
+#15620=IFCCLASSIFICATIONREFERENCE($,'Ac_10_30_15','Constructed material clearance',#15618,$,$);
+#15621=IFCCLASSIFICATIONREFERENCE($,'Ac_10_30_80','Soil removal',#15618,$,$);
+#15622=IFCCLASSIFICATIONREFERENCE($,'Ac_10_30_90','Tree removal',#15618,$,$);
+#15623=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35','Excavation',#15613,$,$);
+#15624=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35_05','Bench excavation',#15623,$,$);
+#15625=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35_32','Full-face excavation',#15623,$,$);
+#15626=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35_44','Invert excavation',#15623,$,$);
+#15627=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35_70','Pocket excavation',#15623,$,$);
+#15628=IFCCLASSIFICATIONREFERENCE($,'Ac_10_35_92','Top heading excavation',#15623,$,$);
+#15629=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40','Construction',#15613,$,$);
+#15630=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_08','Bricklaying',#15629,$,$);
+#15631=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_11','Carpentry and joinery',#15629,$,$);
+#15632=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_13','Carpet laying',#15629,$,$);
+#15633=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_22','Diamond drilling',#15629,$,$);
+#15634=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_25','Ductwork installing',#15629,$,$);
+#15635=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_27','Electrical system installing',#15629,$,$);
+#15636=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_30','Formwork installing',#15629,$,$);
+#15637=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_35','Ground probing',#15629,$,$);
+#15638=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_41','Internal fitting out',#15629,$,$);
+#15639=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_60','Painting and decorating',#15629,$,$);
+#15640=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_63','Pipe fitting',#15629,$,$);
+#15641=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_65','Plastering and rendering',#15629,$,$);
+#15642=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_67','Plumbing',#15629,$,$);
+#15643=IFCCLASSIFICATIONREFERENCE($,'Ac_10_40_88','Tiling',#15629,$,$);
+#15644=IFCCLASSIFICATIONREFERENCE($,'Ac_10_60','Protection activities',#15613,$,$);
+#15645=IFCCLASSIFICATIONREFERENCE($,'Ac_10_60_90','Tree protecting',#15644,$,$);
+#15646=IFCCLASSIFICATIONREFERENCE($,'Ac_10_70','Remediation, repair and renovation',#15613,$,$);
+#15647=IFCCLASSIFICATIONREFERENCE($,'Ac_10_70_65','Remediation',#15646,$,$);
+#15648=IFCCLASSIFICATIONREFERENCE($,'Ac_10_70_70','Renovation',#15646,$,$);
+#15649=IFCCLASSIFICATIONREFERENCE($,'Ac_10_70_75','Repair',#15646,$,$);
+#15650=IFCCLASSIFICATIONREFERENCE($,'Ac_10_80','Structure moving',#15613,$,$);
+#15651=IFCCLASSIFICATIONREFERENCE($,'Ac_15','Survey activities',#2,$,$);
+#15652=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05','Aquatic surveying',#15651,$,$);
+#15653=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_11','Canals surveying',#15652,$,$);
+#15654=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_15','Coastal surveying',#15652,$,$);
+#15655=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_36','Hydrological surveying',#15652,$,$);
+#15656=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_46','Lakes and ponds surveying',#15652,$,$);
+#15657=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_70','Reservoirs surveying',#15652,$,$);
+#15658=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_72','Rivers and streams surveying',#15652,$,$);
+#15659=IFCCLASSIFICATIONREFERENCE($,'Ac_15_05_73','River estuary surveying',#15652,$,$);
+#15660=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10','Surveying methods',#15651,$,$);
+#15661=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_01','Acoustic surveying',#15660,$,$);
+#15662=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_03','Aerial surveying',#15660,$,$);
+#15663=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_10','Borehole surveying',#15660,$,$);
+#15664=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_14','Closed-circuit television surveying',#15660,$,$);
+#15665=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_16','Cone penetrometer testing (CPT)',#15660,$,$);
+#15666=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_22','Desk top studying',#15660,$,$);
+#15667=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_25','Dynamic cone penetration (DCP) testing',#15660,$,$);
+#15668=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_30','Field research surveying',#15660,$,$);
+#15669=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_32','Geophysical surveying',#15660,$,$);
+#15670=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_34','Ground-penetrating radar surveying',#15660,$,$);
+#15671=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_41','Intrusive site investigating',#15660,$,$);
+#15672=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_49','Light detection and ranging (LIDAR) surveying',#15660,$,$);
+#15673=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_70','Radio frequency location surveying',#15660,$,$);
+#15674=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_80','Satellite surveying',#15660,$,$);
+#15675=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_88','Thermal imaging surveying',#15660,$,$);
+#15676=IFCCLASSIFICATIONREFERENCE($,'Ac_15_10_90','Trial holes surveying',#15660,$,$);
+#15677=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15','Building services condition surveying',#15651,$,$);
+#15678=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_06','Below-ground services surveying',#15677,$,$);
+#15679=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_08','Boilers, heating and hot water systems surveying',#15677,$,$);
+#15680=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_11','Catering equipment surveying',#15677,$,$);
+#15681=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_15','Cold water and water treatment systems surveying',#15677,$,$);
+#15682=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_16','Control systems surveying',#15677,$,$);
+#15683=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_28','Escalator and moving pavement systems surveying',#15677,$,$);
+#15684=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_30','Fire alarm systems surveying',#15677,$,$);
+#15685=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_34','Generators system surveying',#15677,$,$);
+#15686=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_47','Lift installation surveying',#15677,$,$);
+#15687=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_48','Low-voltage general power electrical installations surveying',#15677,$,$);
+#15688=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_71','Refrigeration systems surveying',#15677,$,$);
+#15689=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_82','Sprinkler systems surveying',#15677,$,$);
+#15690=IFCCLASSIFICATIONREFERENCE($,'Ac_15_15_95','Ventilation and air conditioning systems surveying',#15677,$,$);
+#15691=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20','Ecological and environmental surveying',#15651,$,$);
+#15692=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_03','Animal conservation assessment surveying',#15691,$,$);
+#15693=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_05','Arboricultural surveying',#15691,$,$);
+#15694=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_08','Bird and pest surveying',#15691,$,$);
+#15695=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_25','Ecological building surveying',#15691,$,$);
+#15696=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_27','Ecological site surveying',#15691,$,$);
+#15697=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_28','Environmental impact assessment surveying',#15691,$,$);
+#15698=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_40','Invasive species surveying',#15691,$,$);
+#15699=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_46','Landscape character assessing',#15691,$,$);
+#15700=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_48','Landscape visual assessing',#15691,$,$);
+#15701=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_56','Nuisance animal species surveying',#15691,$,$);
+#15702=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_58','Ornithological surveying',#15691,$,$);
+#15703=IFCCLASSIFICATIONREFERENCE($,'Ac_15_20_85','Strategic environmental assessing',#15691,$,$);
+#15704=IFCCLASSIFICATIONREFERENCE($,'Ac_15_30','Geometric surveying',#15651,$,$);
+#15705=IFCCLASSIFICATIONREFERENCE($,'Ac_15_30_50','Measured and metric surveying',#15704,$,$);
+#15706=IFCCLASSIFICATIONREFERENCE($,'Ac_15_30_90','Topographical surveying',#15704,$,$);
+#15707=IFCCLASSIFICATIONREFERENCE($,'Ac_15_40','Hazardous material surveying',#15651,$,$);
+#15708=IFCCLASSIFICATIONREFERENCE($,'Ac_15_40_05','Asbestos surveying',#15707,$,$);
+#15709=IFCCLASSIFICATIONREFERENCE($,'Ac_15_40_45','Lead paint surveying',#15707,$,$);
+#15710=IFCCLASSIFICATIONREFERENCE($,'Ac_15_40_70','Radon and hazardous ground gases surveying',#15707,$,$);
+#15711=IFCCLASSIFICATIONREFERENCE($,'Ac_15_45','Historic building and site surveying',#15651,$,$);
+#15712=IFCCLASSIFICATIONREFERENCE($,'Ac_15_45_04','Archaeological surveying',#15711,$,$);
+#15713=IFCCLASSIFICATIONREFERENCE($,'Ac_15_45_35','Historic building surveying',#15711,$,$);
+#15714=IFCCLASSIFICATIONREFERENCE($,'Ac_15_45_37','Historic site surveying',#15711,$,$);
+#15715=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50','Building surveying',#15651,$,$);
+#15716=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_10','Building fabric surveying',#15715,$,$);
+#15717=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_12','Building measurement surveying',#15715,$,$);
+#15718=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_15','Concealed elements surveying',#15715,$,$);
+#15719=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_17','Concrete cover surveying',#15715,$,$);
+#15720=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_18','Concrete defects surveying',#15715,$,$);
+#15721=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_20','Damp ingress and excess moisture surveying',#15715,$,$);
+#15722=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_22','Dilapidations surveying',#15715,$,$);
+#15723=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_25','Doors, windows and glazing defects surveying',#15715,$,$);
+#15724=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_50','Masonry defects surveying',#15715,$,$);
+#15725=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_52','Metalwork defects surveying',#15715,$,$);
+#15726=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_73','Roof defects surveying',#15715,$,$);
+#15727=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_85','Structural surveying',#15715,$,$);
+#15728=IFCCLASSIFICATIONREFERENCE($,'Ac_15_50_90','Timber defects surveying',#15715,$,$);
+#15729=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55','Performance surveying',#15651,$,$);
+#15730=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_02','Access auditing',#15729,$,$);
+#15731=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_04','Acoustics and noise transfer surveying',#15729,$,$);
+#15732=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_06','Airtightness surveying',#15729,$,$);
+#15733=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_26','Energy assessment surveying',#15729,$,$);
+#15734=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_30','Fire protection surveying',#15729,$,$);
+#15735=IFCCLASSIFICATIONREFERENCE($,'Ac_15_55_75','Security auditing',#15729,$,$);
+#15736=IFCCLASSIFICATIONREFERENCE($,'Ac_15_60','Rail track surveying',#15651,$,$);
+#15737=IFCCLASSIFICATIONREFERENCE($,'Ac_15_70','Road and bridge surveying',#15651,$,$);
+#15738=IFCCLASSIFICATIONREFERENCE($,'Ac_15_70_70','Road safety auditing',#15737,$,$);
+#15739=IFCCLASSIFICATIONREFERENCE($,'Ac_15_70_90','Traffic surveying',#15737,$,$);
+#15740=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75','Ground investigating',#15651,$,$);
+#15741=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_20','Geochemical surveying',#15740,$,$);
+#15742=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_25','Geoenvironmental exploratory investigating',#15740,$,$);
+#15743=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_30','Geoenvironmental ground investigating',#15740,$,$);
+#15744=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_35','Geological boundaries surveying',#15740,$,$);
+#15745=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_40','Geological faults surveying',#15740,$,$);
+#15746=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_45','Geological surveying',#15740,$,$);
+#15747=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_50','Geotechnical investigating',#15740,$,$);
+#15748=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_55','Geotechnical substructure investigating',#15740,$,$);
+#15749=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_60','Ground levels surveying',#15740,$,$);
+#15750=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_65','Ground water table surveying',#15740,$,$);
+#15751=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_70','Preliminary site investigating',#15740,$,$);
+#15752=IFCCLASSIFICATIONREFERENCE($,'Ac_15_75_80','Soil surveying',#15740,$,$);
+#15753=IFCCLASSIFICATIONREFERENCE($,'Ac_15_80','Site surveying',#15651,$,$);
+#15754=IFCCLASSIFICATIONREFERENCE($,'Ac_15_80_65','Preliminary site surveying',#15753,$,$);
+#15755=IFCCLASSIFICATIONREFERENCE($,'Ac_15_80_92','Utilities surveying',#15753,$,$);
+#15756=IFCCLASSIFICATIONREFERENCE($,'Ac_15_90','Tunnel surveying',#15651,$,$);
+#15757=IFCCLASSIFICATIONREFERENCE($,'Ac_20','Administrative, commercial and protective services activities',#2,$,$);
+#15758=IFCCLASSIFICATIONREFERENCE($,'Ac_20_10','Legislative activities',#15757,$,$);
+#15759=IFCCLASSIFICATIONREFERENCE($,'Ac_20_10_47','Legislating activities',#15758,$,$);
+#15760=IFCCLASSIFICATIONREFERENCE($,'Ac_20_10_66','Public viewing of legislating activities',#15758,$,$);
+#15761=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15','Administrative office activities',#15757,$,$);
+#15762=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_13','Confidential meetings',#15761,$,$);
+#15763=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_15','Counter service',#15761,$,$);
+#15764=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_22','Desk-based office tasks',#15761,$,$);
+#15765=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_50','Meetings',#15761,$,$);
+#15766=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_59','Office maintenance tasks',#15761,$,$);
+#15767=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_71','Reception tasks',#15761,$,$);
+#15768=IFCCLASSIFICATIONREFERENCE($,'Ac_20_15_73','Recruitment',#15761,$,$);
+#15769=IFCCLASSIFICATIONREFERENCE($,'Ac_20_45','Motor vehicle maintenance and fuelling activities',#15757,$,$);
+#15770=IFCCLASSIFICATIONREFERENCE($,'Ac_20_45_30','Fuel station air and water dispensing',#15769,$,$);
+#15771=IFCCLASSIFICATIONREFERENCE($,'Ac_20_45_31','Fuel station fuel storing',#15769,$,$);
+#15772=IFCCLASSIFICATIONREFERENCE($,'Ac_20_45_51','Motor vehicle fuelling',#15769,$,$);
+#15773=IFCCLASSIFICATIONREFERENCE($,'Ac_20_45_53','Motor vehicle maintaining',#15769,$,$);
+#15774=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50','Commercial activities',#15757,$,$);
+#15775=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_03','Ambient products wholesale selling',#15774,$,$);
+#15776=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_05','Auctioning',#15774,$,$);
+#15777=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_12','Checking out and paying',#15774,$,$);
+#15778=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_22','Department store retail selling',#15774,$,$);
+#15779=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_29','Financial and professional services activity',#15774,$,$);
+#15780=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_32','Food and drink retail selling',#15774,$,$);
+#15781=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_33','General retail selling',#15774,$,$);
+#15782=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_36','Hair and beauty treatment activities',#15774,$,$);
+#15783=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_45','Kiosk retail selling',#15774,$,$);
+#15784=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_47','Livestock wholesale selling',#15774,$,$);
+#15785=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_50','Mail order sorting and despatching',#15774,$,$);
+#15786=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_51','Market retail selling',#15774,$,$);
+#15787=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_55','Motor vehicle selling',#15774,$,$);
+#15788=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_70','Refrigerated products wholesale selling',#15774,$,$);
+#15789=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_85','Supermarket retail selling',#15774,$,$);
+#15790=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_87','Tattooing and piercing',#15774,$,$);
+#15791=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_90','Trying out goods',#15774,$,$);
+#15792=IFCCLASSIFICATIONREFERENCE($,'Ac_20_50_96','Waste and scrap wholesale selling',#15774,$,$);
+#15793=IFCCLASSIFICATIONREFERENCE($,'Ac_20_55','Postal communications activities',#15757,$,$);
+#15794=IFCCLASSIFICATIONREFERENCE($,'Ac_20_55_45','Letter sorting',#15793,$,$);
+#15795=IFCCLASSIFICATIONREFERENCE($,'Ac_20_55_60','Parcel sorting',#15793,$,$);
+#15796=IFCCLASSIFICATIONREFERENCE($,'Ac_20_60','Military protective activities',#15757,$,$);
+#15797=IFCCLASSIFICATIONREFERENCE($,'Ac_20_60_08','Bombardment sheltering',#15796,$,$);
+#15798=IFCCLASSIFICATIONREFERENCE($,'Ac_20_60_70','Radioactive fallout sheltering',#15796,$,$);
+#15799=IFCCLASSIFICATIONREFERENCE($,'Ac_20_62','Parade activities',#15757,$,$);
+#15800=IFCCLASSIFICATIONREFERENCE($,'Ac_20_62_65','Parading',#15799,$,$);
+#15801=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65','Law enforcement activities',#15757,$,$);
+#15802=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_08','Breathalyzing',#15801,$,$);
+#15803=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_15','Counter terrorism activities',#15801,$,$);
+#15804=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_19','Custody activities',#15801,$,$);
+#15805=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_40','Identification parading',#15801,$,$);
+#15806=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_59','Operational activities',#15801,$,$);
+#15807=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_65','Police detaining',#15801,$,$);
+#15808=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_87','Testing for illegal substances',#15801,$,$);
+#15809=IFCCLASSIFICATIONREFERENCE($,'Ac_20_65_94','Victim examining',#15801,$,$);
+#15810=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70','Judicial activities',#15757,$,$);
+#15811=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_15','Conducting trials and hearings',#15810,$,$);
+#15812=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_23','Defendant seating',#15810,$,$);
+#15813=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_27','Evidence drying',#15810,$,$);
+#15814=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_41','Judicial seating',#15810,$,$);
+#15815=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_44','Jury seating',#15810,$,$);
+#15816=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_68','Public gallery viewing',#15810,$,$);
+#15817=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_93','Victim supporting',#15810,$,$);
+#15818=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_94','Vulnerable victim supporting',#15810,$,$);
+#15819=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_95','Vulnerable witness supporting',#15810,$,$);
+#15820=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_97','Witness standing',#15810,$,$);
+#15821=IFCCLASSIFICATIONREFERENCE($,'Ac_20_70_98','Witness supporting',#15810,$,$);
+#15822=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75','Detention activities',#15757,$,$);
+#15823=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_12','Close supervising',#15822,$,$);
+#15824=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_15','Communal inmate day activities',#15822,$,$);
+#15825=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_20','Detainee exercising',#15822,$,$);
+#15826=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_22','Detainee processing',#15822,$,$);
+#15827=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_35','Guarding detainees',#15822,$,$);
+#15828=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_38','Holding of prisoners',#15822,$,$);
+#15829=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_41','Inmate exercising',#15822,$,$);
+#15830=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_44','Juvenile detaining',#15822,$,$);
+#15831=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_67','Prison detaining',#15822,$,$);
+#15832=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_75','Secure entering and exiting',#15822,$,$);
+#15833=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_77','Secure visiting',#15822,$,$);
+#15834=IFCCLASSIFICATIONREFERENCE($,'Ac_20_75_95','Vehicle impounding',#15822,$,$);
+#15835=IFCCLASSIFICATIONREFERENCE($,'Ac_20_80','Weapons training activities',#15757,$,$);
+#15836=IFCCLASSIFICATIONREFERENCE($,'Ac_20_80_29','Firearms training',#15835,$,$);
+#15837=IFCCLASSIFICATIONREFERENCE($,'Ac_20_80_31','Firing of weapons',#15835,$,$);
+#15838=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85','Security activities',#15757,$,$);
+#15839=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85_08','Biometric identifying',#15838,$,$);
+#15840=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85_63','Pedestrian security checking',#15838,$,$);
+#15841=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85_77','Secure activities',#15838,$,$);
+#15842=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85_79','Sensitive activities',#15838,$,$);
+#15843=IFCCLASSIFICATIONREFERENCE($,'Ac_20_85_95','Vehicular security checking',#15838,$,$);
+#15844=IFCCLASSIFICATIONREFERENCE($,'Ac_20_90','Incident support activities',#15757,$,$);
+#15845=IFCCLASSIFICATIONREFERENCE($,'Ac_20_90_31','Fire training',#15844,$,$);
+#15846=IFCCLASSIFICATIONREFERENCE($,'Ac_20_90_41','Incident prevention',#15844,$,$);
+#15847=IFCCLASSIFICATIONREFERENCE($,'Ac_20_90_42','Incident support',#15844,$,$);
+#15848=IFCCLASSIFICATIONREFERENCE($,'Ac_20_90_78','Sheltering from fire',#15844,$,$);
+#15849=IFCCLASSIFICATIONREFERENCE($,'Ac_25','Cultural, educational, scientific and information activities',#2,$,$);
+#15850=IFCCLASSIFICATIONREFERENCE($,'Ac_25_05','Commemoration activities',#15849,$,$);
+#15851=IFCCLASSIFICATIONREFERENCE($,'Ac_25_05_15','Commemoration events',#15850,$,$);
+#15852=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10','Educational activities',#15849,$,$);
+#15853=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_05','Assembling',#15852,$,$);
+#15854=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_15','Communal educational activities',#15852,$,$);
+#15855=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_26','Driving tuition',#15852,$,$);
+#15856=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_35','Group work',#15852,$,$);
+#15857=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_47','Lecturing',#15852,$,$);
+#15858=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_71','Researching',#15852,$,$);
+#15859=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_78','Seminar activities',#15852,$,$);
+#15860=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_84','Studying',#15852,$,$);
+#15861=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_88','Teaching',#15852,$,$);
+#15862=IFCCLASSIFICATIONREFERENCE($,'Ac_25_10_90','Training',#15852,$,$);
+#15863=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20','Design and craft activities',#15849,$,$);
+#15864=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_13','Ceramics making',#15863,$,$);
+#15865=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_15','Craft activities',#15863,$,$);
+#15866=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_21','Designing',#15863,$,$);
+#15867=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_24','Drawing',#15863,$,$);
+#15868=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_60','Painting',#15863,$,$);
+#15869=IFCCLASSIFICATIONREFERENCE($,'Ac_25_20_88','Technical drawing',#15863,$,$);
+#15870=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30','Scientific and laboratory activities',#15849,$,$);
+#15871=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_02','Anechoic chamber activities',#15870,$,$);
+#15872=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_04','Astronomy activities',#15870,$,$);
+#15873=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_07','Biology activities',#15870,$,$);
+#15874=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_10','Bioscience activities',#15870,$,$);
+#15875=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_13','Chemistry activities',#15870,$,$);
+#15876=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_15','Clinical biochemistry activities',#15870,$,$);
+#15877=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_16','Clinical microbiology activities',#15870,$,$);
+#15878=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_17','Clinical pathology activities',#15870,$,$);
+#15879=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_19','Containment activities',#15870,$,$);
+#15880=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_21','Dark room activities',#15870,$,$);
+#15881=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_22','Dental laboratory activities',#15870,$,$);
+#15882=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_23','Dissection',#15870,$,$);
+#15883=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_26','Earth sciences activities',#15870,$,$);
+#15884=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_27','Engineering activities',#15870,$,$);
+#15885=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_28','Experiment controlling',#15870,$,$);
+#15886=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_29','Flow cytometry activities',#15870,$,$);
+#15887=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_30','Food testing',#15870,$,$);
+#15888=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_31','Forensic science activities',#15870,$,$);
+#15889=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_33','Geology activities',#15870,$,$);
+#15890=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_36','Hyperbaric chamber activities',#15870,$,$);
+#15891=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_46','Laboratory cold activities',#15870,$,$);
+#15892=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_47','Laboratory warm activities',#15870,$,$);
+#15893=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_50','Material testing',#15870,$,$);
+#15894=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_66','Physics activities',#15870,$,$);
+#15895=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_68','Psychology activities',#15870,$,$);
+#15896=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_70','Radiation shielded activities',#15870,$,$);
+#15897=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_72','Results interpreting',#15870,$,$);
+#15898=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_76','Scientific instrument activities',#15870,$,$);
+#15899=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_78','Seismograph activities',#15870,$,$);
+#15900=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_85','Sterilizing activities',#15870,$,$);
+#15901=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_89','Tissue culturing',#15870,$,$);
+#15902=IFCCLASSIFICATIONREFERENCE($,'Ac_25_30_90','Toxicology activities',#15870,$,$);
+#15903=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50','Exhibition activities',#15849,$,$);
+#15904=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_04','Art exhibiting',#15903,$,$);
+#15905=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_15','Collection exhibiting',#15903,$,$);
+#15906=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_16','Conservation of art and artefacts',#15903,$,$);
+#15907=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_21','Diorama exhibiting',#15903,$,$);
+#15908=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_29','Fauna exhibiting',#15903,$,$);
+#15909=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_31','Flora exhibiting',#15903,$,$);
+#15910=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_65','Projecting representations of the night sky',#15903,$,$);
+#15911=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_73','Sculpture exhibiting',#15903,$,$);
+#15912=IFCCLASSIFICATIONREFERENCE($,'Ac_25_50_94','Viewing activities',#15903,$,$);
+#15913=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70','Information activities',#15849,$,$);
+#15914=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_04','Archiving',#15913,$,$);
+#15915=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_05','Audiovisual studying',#15913,$,$);
+#15916=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_11','Cataloguing',#15913,$,$);
+#15917=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_23','Domestic book storing and reading',#15913,$,$);
+#15918=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_30','Film storing',#15913,$,$);
+#15919=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_47','Library storing',#15913,$,$);
+#15920=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_71','Reading',#15913,$,$);
+#15921=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_72','Records storing',#15913,$,$);
+#15922=IFCCLASSIFICATIONREFERENCE($,'Ac_25_70_76','Scanning',#15913,$,$);
+#15923=IFCCLASSIFICATIONREFERENCE($,'Ac_25_90','Worship activities',#15849,$,$);
+#15924=IFCCLASSIFICATIONREFERENCE($,'Ac_25_90_12','Ceremonial worship activities',#15923,$,$);
+#15925=IFCCLASSIFICATIONREFERENCE($,'Ac_25_90_15','Conducting acts of worship',#15923,$,$);
+#15926=IFCCLASSIFICATIONREFERENCE($,'Ac_25_90_60','Pastoral care',#15923,$,$);
+#15927=IFCCLASSIFICATIONREFERENCE($,'Ac_25_90_67','Preparing for acts of worship',#15923,$,$);
+#15928=IFCCLASSIFICATIONREFERENCE($,'Ac_30','Industrial activities',#2,$,$);
+#15929=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10','Mineral extraction activities',#15928,$,$);
+#15930=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_57','Offshore oil and gas drilling',#15929,$,$);
+#15931=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_59','Onshore oil and gas drilling',#15929,$,$);
+#15932=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_60','Opencast mining',#15929,$,$);
+#15933=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_69','Quarrying',#15929,$,$);
+#15934=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_91','Underground mining',#15929,$,$);
+#15935=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_93','Underground mine accessing',#15929,$,$);
+#15936=IFCCLASSIFICATIONREFERENCE($,'Ac_30_10_94','Underground mine tunnelling',#15929,$,$);
+#15937=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20','Nuclear and chemical management activities',#15928,$,$);
+#15938=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_30','High-heat highly enriched uranium radioactive waste managing',#15937,$,$);
+#15939=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_35','High-heat mixed oxide fuel radioactive waste managing',#15937,$,$);
+#15940=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_40','High-heat plutonium radioactive waste managing',#15937,$,$);
+#15941=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_45','High-heat radioactive waste managing',#15937,$,$);
+#15942=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_50','High-heat spent fuel radioactive waste managing',#15937,$,$);
+#15943=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_60','Low-heat depleted natural low enrichment uranium managing',#15937,$,$);
+#15944=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_65','Low-heat robust shielded radioactive waste managing',#15937,$,$);
+#15945=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_70','Low-heat shielded radioactive waste managing',#15937,$,$);
+#15946=IFCCLASSIFICATIONREFERENCE($,'Ac_30_20_75','Low-heat unshielded radioactive waste managing',#15937,$,$);
+#15947=IFCCLASSIFICATIONREFERENCE($,'Ac_30_30','Mineral processing activities',#15928,$,$);
+#15948=IFCCLASSIFICATIONREFERENCE($,'Ac_30_30_33','Gas processing',#15947,$,$);
+#15949=IFCCLASSIFICATIONREFERENCE($,'Ac_30_30_58','Oil processing',#15947,$,$);
+#15950=IFCCLASSIFICATIONREFERENCE($,'Ac_30_30_59','Ore processing',#15947,$,$);
+#15951=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40','Animal and plant products processing activities',#15928,$,$);
+#15952=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_06','Baking',#15951,$,$);
+#15953=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_07','Bottling',#15951,$,$);
+#15954=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_09','Brewing',#15951,$,$);
+#15955=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_10','Butter making',#15951,$,$);
+#15956=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_11','Canning',#15951,$,$);
+#15957=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_18','Cheese making',#15951,$,$);
+#15958=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_22','Distilling',#15951,$,$);
+#15959=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_30','Fish processing',#15951,$,$);
+#15960=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_32','Fresh fruit and vegetable packing',#15951,$,$);
+#15961=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_44','Juicing',#15951,$,$);
+#15962=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_52','Meat processing',#15951,$,$);
+#15963=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_54','Milk processing',#15951,$,$);
+#15964=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_55','Milling',#15951,$,$);
+#15965=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_63','Plant fibre sorting',#15951,$,$);
+#15966=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_65','Poultry processing',#15951,$,$);
+#15967=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_80','Slaughtering',#15951,$,$);
+#15968=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_87','Tanning',#15951,$,$);
+#15969=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_88','Threshing',#15951,$,$);
+#15970=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_89','Timber sawing',#15951,$,$);
+#15971=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_90','Tobacco drying',#15951,$,$);
+#15972=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_96','Wine making',#15951,$,$);
+#15973=IFCCLASSIFICATIONREFERENCE($,'Ac_30_40_98','Wool sorting',#15951,$,$);
+#15974=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50','Manufacturing activities',#15928,$,$);
+#15975=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_27','Electronics clean activities',#15974,$,$);
+#15976=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_30','Heavy industrial activities',#15974,$,$);
+#15977=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_53','Light industrial activities',#15974,$,$);
+#15978=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_60','Packaging',#15974,$,$);
+#15979=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_61','Paint spraying',#15974,$,$);
+#15980=IFCCLASSIFICATIONREFERENCE($,'Ac_30_50_64','Printing',#15974,$,$);
+#15981=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60','Cleaning and maintenance activities',#15928,$,$);
+#15982=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_12','Cleaning',#15981,$,$);
+#15983=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_13','Clothes drying and airing',#15981,$,$);
+#15984=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_15','Commercial laundering',#15981,$,$);
+#15985=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_16','Conservation activities',#15981,$,$);
+#15986=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_17','Conservation cleaning',#15981,$,$);
+#15987=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_22','Decontaminating',#15981,$,$);
+#15988=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_23','Domestic laundering',#15981,$,$);
+#15989=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_24','Dry cleaning',#15981,$,$);
+#15990=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_42','Ironing',#15981,$,$);
+#15991=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_47','Laundering',#15981,$,$);
+#15992=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_71','Restoration activities',#15981,$,$);
+#15993=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_75','Service laundering',#15981,$,$);
+#15994=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_94','Vehicle washing',#15981,$,$);
+#15995=IFCCLASSIFICATIONREFERENCE($,'Ac_30_60_96','Washing up',#15981,$,$);
+#15996=IFCCLASSIFICATIONREFERENCE($,'Ac_30_80','Kinetic power generation',#15928,$,$);
+#15997=IFCCLASSIFICATIONREFERENCE($,'Ac_30_85','Marine and waterways storage and maintenance activities',#15928,$,$);
+#15998=IFCCLASSIFICATIONREFERENCE($,'Ac_30_85_08','Boat repairing',#15997,$,$);
+#15999=IFCCLASSIFICATIONREFERENCE($,'Ac_30_85_24','Dry dock ship repairing',#15997,$,$);
+#16000=IFCCLASSIFICATIONREFERENCE($,'Ac_30_85_30','Floating dock ship repairing',#15997,$,$);
+#16001=IFCCLASSIFICATIONREFERENCE($,'Ac_30_85_97','Wet dock ship repairing',#15997,$,$);
+#16002=IFCCLASSIFICATIONREFERENCE($,'Ac_30_90','Warehousing and distribution activities',#15928,$,$);
+#16003=IFCCLASSIFICATIONREFERENCE($,'Ac_30_90_33','Goods delivery',#16002,$,$);
+#16004=IFCCLASSIFICATIONREFERENCE($,'Ac_30_90_48','Loading and unloading',#16002,$,$);
+#16005=IFCCLASSIFICATIONREFERENCE($,'Ac_30_90_80','Sorting and distributing',#16002,$,$);
+#16006=IFCCLASSIFICATIONREFERENCE($,'Ac_30_90_96','Warehousing',#16002,$,$);
+#16007=IFCCLASSIFICATIONREFERENCE($,'Ac_32','Water and land management activities',#2,$,$);
+#16008=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10','Agricultural and horticultural activities',#16007,$,$);
+#16009=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_02','Agricultural maintenance',#16008,$,$);
+#16010=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_26','Farmyard activities',#16008,$,$);
+#16011=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_27','Fertilizing',#16008,$,$);
+#16012=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_29','Fish cultivating',#16008,$,$);
+#16013=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_34','Glasshouse growing',#16008,$,$);
+#16014=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_35','Harvesting',#16008,$,$);
+#16015=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_36','Hedge laying',#16008,$,$);
+#16016=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_38','Horticultural activities',#16008,$,$);
+#16017=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_42','Irrigating',#16008,$,$);
+#16018=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_47','Livestock activities',#16008,$,$);
+#16019=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_52','Milking',#16008,$,$);
+#16020=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_55','Mushroom cultivating',#16008,$,$);
+#16021=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_61','Pest management',#16008,$,$);
+#16022=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_64','Ploughing',#16008,$,$);
+#16023=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_66','Poultry rearing',#16008,$,$);
+#16024=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_68','Propagating',#16008,$,$);
+#16025=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_70','Pruning',#16008,$,$);
+#16026=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_77','Sheep shearing',#16008,$,$);
+#16027=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_78','Sheep dipping',#16008,$,$);
+#16028=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_79','Silviculture',#16008,$,$);
+#16029=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_80','Sowing',#16008,$,$);
+#16030=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_94','Viticulture',#16008,$,$);
+#16031=IFCCLASSIFICATIONREFERENCE($,'Ac_32_10_96','Weed management',#16008,$,$);
+#16032=IFCCLASSIFICATIONREFERENCE($,'Ac_32_50','Marine and water activities',#16007,$,$);
+#16033=IFCCLASSIFICATIONREFERENCE($,'Ac_32_50_30','Flood defending',#16032,$,$);
+#16034=IFCCLASSIFICATIONREFERENCE($,'Ac_32_50_38','Harbour protecting',#16032,$,$);
+#16035=IFCCLASSIFICATIONREFERENCE($,'Ac_32_50_94','Vessel berthing',#16032,$,$);
+#16036=IFCCLASSIFICATIONREFERENCE($,'Ac_32_50_95','Vessel launching',#16032,$,$);
+#16037=IFCCLASSIFICATIONREFERENCE($,'Ac_32_60','Natural spaces activities',#16007,$,$);
+#16038=IFCCLASSIFICATIONREFERENCE($,'Ac_32_60_27','Erosion',#16037,$,$);
+#16039=IFCCLASSIFICATIONREFERENCE($,'Ac_32_60_30','Flooding',#16037,$,$);
+#16040=IFCCLASSIFICATIONREFERENCE($,'Ac_35','Medical, health, welfare and sanitary activities',#2,$,$);
+#16041=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10','Medical activities',#16040,$,$);
+#16042=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_08','Birthing',#16041,$,$);
+#16043=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_10','Burns treating',#16041,$,$);
+#16044=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_15','Consulting',#16041,$,$);
+#16045=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_31','First aiding',#16041,$,$);
+#16046=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_36','Hearing testing',#16041,$,$);
+#16047=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_39','Hydrotherapy',#16041,$,$);
+#16048=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_42','Intensive caring',#16041,$,$);
+#16049=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_43','Isolation caring',#16041,$,$);
+#16050=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_51','Medical scanning',#16041,$,$);
+#16051=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_53','Midwifery',#16041,$,$);
+#16052=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_57','Nursing',#16041,$,$);
+#16053=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_58','Occupational therapy',#16041,$,$);
+#16054=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_61','Patient examining',#16041,$,$);
+#16055=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_62','Patient screening',#16041,$,$);
+#16056=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_64','Pharmaceutical dispensing',#16041,$,$);
+#16057=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_65','Phototherapy',#16041,$,$);
+#16058=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_66','Physiotherapy',#16041,$,$);
+#16059=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_70','Radiography',#16041,$,$);
+#16060=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_71','Radiotherapy',#16041,$,$);
+#16061=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_74','Rehabilitating',#16041,$,$);
+#16062=IFCCLASSIFICATIONREFERENCE($,'Ac_35_10_85','Surgical operating',#16041,$,$);
+#16063=IFCCLASSIFICATIONREFERENCE($,'Ac_35_50','Welfare activities',#16040,$,$);
+#16064=IFCCLASSIFICATIONREFERENCE($,'Ac_35_50_21','Day care',#16063,$,$);
+#16065=IFCCLASSIFICATIONREFERENCE($,'Ac_35_50_42','Infant caring',#16063,$,$);
+#16066=IFCCLASSIFICATIONREFERENCE($,'Ac_35_60','Food management activities',#16040,$,$);
+#16067=IFCCLASSIFICATIONREFERENCE($,'Ac_35_60_16','Cooking',#16066,$,$);
+#16068=IFCCLASSIFICATIONREFERENCE($,'Ac_35_60_30','Food preparation',#16066,$,$);
+#16069=IFCCLASSIFICATIONREFERENCE($,'Ac_35_60_31','Food serving',#16066,$,$);
+#16070=IFCCLASSIFICATIONREFERENCE($,'Ac_35_70','Funerary activities',#16040,$,$);
+#16071=IFCCLASSIFICATIONREFERENCE($,'Ac_35_70_04','Ash urn storing',#16070,$,$);
+#16072=IFCCLASSIFICATIONREFERENCE($,'Ac_35_70_10','Burial',#16070,$,$);
+#16073=IFCCLASSIFICATIONREFERENCE($,'Ac_35_70_18','Cremating',#16070,$,$);
+#16074=IFCCLASSIFICATIONREFERENCE($,'Ac_35_70_42','Interment in a vault or tomb',#16070,$,$);
+#16075=IFCCLASSIFICATIONREFERENCE($,'Ac_35_80','Sanitary activities',#16040,$,$);
+#16076=IFCCLASSIFICATIONREFERENCE($,'Ac_35_80_06','Baby changing',#16075,$,$);
+#16077=IFCCLASSIFICATIONREFERENCE($,'Ac_35_80_07','Bathing',#16075,$,$);
+#16078=IFCCLASSIFICATIONREFERENCE($,'Ac_35_80_80','Showering',#16075,$,$);
+#16079=IFCCLASSIFICATIONREFERENCE($,'Ac_35_85','Animal activities',#16040,$,$);
+#16080=IFCCLASSIFICATIONREFERENCE($,'Ac_35_85_02','Animal care',#16079,$,$);
+#16081=IFCCLASSIFICATIONREFERENCE($,'Ac_35_85_04','Animal exercising',#16079,$,$);
+#16082=IFCCLASSIFICATIONREFERENCE($,'Ac_35_85_88','Tack maintaining',#16079,$,$);
+#16083=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90','Animal medical, health, welfare, funerary and sanitary activities',#16040,$,$);
+#16084=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90_25','Animal drug dispensing',#16083,$,$);
+#16085=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90_32','Animal funerary activities',#16083,$,$);
+#16086=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90_34','Animal grooming',#16083,$,$);
+#16087=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90_39','Animal hydrotherapy',#16083,$,$);
+#16088=IFCCLASSIFICATIONREFERENCE($,'Ac_35_90_59','Veterinary caring',#16083,$,$);
+#16089=IFCCLASSIFICATIONREFERENCE($,'Ac_40','Recreational activities',#2,$,$);
+#16090=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05','Amusement activities',#16089,$,$);
+#16091=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_03','Amusement arcade activities',#16090,$,$);
+#16092=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_33','Gambling',#16090,$,$);
+#16093=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_35','Gaming',#16090,$,$);
+#16094=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_42','Indoor fairground riding',#16090,$,$);
+#16095=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_58','Observing',#16090,$,$);
+#16096=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_59','Outdoor activities',#16090,$,$);
+#16097=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_60','Outdoor fairground riding',#16090,$,$);
+#16098=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_63','Playing',#16090,$,$);
+#16099=IFCCLASSIFICATIONREFERENCE($,'Ac_40_05_89','Theme park activities',#16090,$,$);
+#16100=IFCCLASSIFICATIONREFERENCE($,'Ac_40_20','Dining activities',#16089,$,$);
+#16101=IFCCLASSIFICATIONREFERENCE($,'Ac_40_20_09','Beverage dispensing',#16100,$,$);
+#16102=IFCCLASSIFICATIONREFERENCE($,'Ac_40_20_27','Enclosed dining',#16100,$,$);
+#16103=IFCCLASSIFICATIONREFERENCE($,'Ac_40_20_28','Food dispensing',#16100,$,$);
+#16104=IFCCLASSIFICATIONREFERENCE($,'Ac_40_20_59','Outdoor dining',#16100,$,$);
+#16105=IFCCLASSIFICATIONREFERENCE($,'Ac_40_35','Historic recreational activities',#16089,$,$);
+#16106=IFCCLASSIFICATIONREFERENCE($,'Ac_40_35_37','Historic earthworks exploring',#16105,$,$);
+#16107=IFCCLASSIFICATIONREFERENCE($,'Ac_40_35_38','Historic ruins exploring',#16105,$,$);
+#16108=IFCCLASSIFICATIONREFERENCE($,'Ac_40_35_39','Historic sites exploring',#16105,$,$);
+#16109=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60','Performing arts performance activities',#16089,$,$);
+#16110=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_13','Circus performing',#16109,$,$);
+#16111=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_21','Dancing',#16109,$,$);
+#16112=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_29','Fashion showing',#16109,$,$);
+#16113=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_30','Filming',#16109,$,$);
+#16114=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_31','Film screening',#16109,$,$);
+#16115=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_38','Indoor music performing',#16109,$,$);
+#16116=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_40','Indoor theatre activities',#16109,$,$);
+#16117=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_55','Music recording',#16109,$,$);
+#16118=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_58','Outdoor music performing',#16109,$,$);
+#16119=IFCCLASSIFICATIONREFERENCE($,'Ac_40_60_59','Outdoor theatre activities',#16109,$,$);
+#16120=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65','Performing arts ancillary activities',#16089,$,$);
+#16121=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_02','Amphitheatre seating',#16120,$,$);
+#16122=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_03','Artiste changing and make-up activities',#16120,$,$);
+#16123=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_04','Audience breaking out',#16120,$,$);
+#16124=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_05','Audience seating',#16120,$,$);
+#16125=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_06','Backstage activities',#16120,$,$);
+#16126=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_55','Music recording controlling',#16120,$,$);
+#16127=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_59','Overhead scenery storing',#16120,$,$);
+#16128=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_76','Scenery controlling',#16120,$,$);
+#16129=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_79','Sound controlling',#16120,$,$);
+#16130=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_80','Sound excluding',#16120,$,$);
+#16131=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_88','Theatrical lighting controlling',#16120,$,$);
+#16132=IFCCLASSIFICATIONREFERENCE($,'Ac_40_65_89','Theatrical rehearsing',#16120,$,$);
+#16133=IFCCLASSIFICATIONREFERENCE($,'Ac_42','Sports activities',#2,$,$);
+#16134=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15','Court, pitch and field sport activities',#16133,$,$);
+#16135=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15_30','Field athletics',#16134,$,$);
+#16136=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15_42','Indoor court sports',#16134,$,$);
+#16137=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15_58','Outdoor court sports',#16134,$,$);
+#16138=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15_59','Outdoor field sports',#16134,$,$);
+#16139=IFCCLASSIFICATIONREFERENCE($,'Ac_42_15_90','Track athletics',#16134,$,$);
+#16140=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40','Indoor sports activities',#16133,$,$);
+#16141=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_09','Bouldering',#16140,$,$);
+#16142=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_14','Climbing wall activities',#16140,$,$);
+#16143=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_28','Exercising',#16140,$,$);
+#16144=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_37','Gymnastics',#16140,$,$);
+#16145=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_79','Snooker, billiards and pool',#16140,$,$);
+#16146=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_90','Ten pin bowling',#16140,$,$);
+#16147=IFCCLASSIFICATIONREFERENCE($,'Ac_42_40_92','Track cycling',#16140,$,$);
+#16148=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55','Outdoor sports activities',#16133,$,$);
+#16149=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_01','Archery',#16148,$,$);
+#16150=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_07','BMX cycling',#16148,$,$);
+#16151=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_08','Bowling',#16148,$,$);
+#16152=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_18','Cross-country cycling',#16148,$,$);
+#16153=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_19','Cross-country rallying',#16148,$,$);
+#16154=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_20','Cross-country running',#16148,$,$);
+#16155=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_23','Dog racing',#16148,$,$);
+#16156=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_26','Equestrian dressage',#16148,$,$);
+#16157=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_27','Equestrian cross country eventing',#16148,$,$);
+#16158=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_28','Equestrian show jumping',#16148,$,$);
+#16159=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_30','Fishing',#16148,$,$);
+#16160=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_34','Golfing',#16148,$,$);
+#16161=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_39','Horse racing',#16148,$,$);
+#16162=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_40','Hunting',#16148,$,$);
+#16163=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_53','Motor racing',#16148,$,$);
+#16164=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_58','Orienteering',#16148,$,$);
+#16165=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_60','Parkour',#16148,$,$);
+#16166=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_70','Recreational cycling',#16148,$,$);
+#16167=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_71','Recreational walking',#16148,$,$);
+#16168=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_72','Riding',#16148,$,$);
+#16169=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_74','Running',#16148,$,$);
+#16170=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_76','Skateboarding',#16148,$,$);
+#16171=IFCCLASSIFICATIONREFERENCE($,'Ac_42_55_82','Speedway racing',#16148,$,$);
+#16172=IFCCLASSIFICATIONREFERENCE($,'Ac_42_80','Sports ancillary activities',#16133,$,$);
+#16173=IFCCLASSIFICATIONREFERENCE($,'Ac_42_80_15','Corporate and VIP spectating',#16172,$,$);
+#16174=IFCCLASSIFICATIONREFERENCE($,'Ac_42_80_50','Manager and coach seating',#16172,$,$);
+#16175=IFCCLASSIFICATIONREFERENCE($,'Ac_42_80_65','Press spectating',#16172,$,$);
+#16176=IFCCLASSIFICATIONREFERENCE($,'Ac_42_80_72','Reserves seating',#16172,$,$);
+#16177=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85','Swimming activities',#16133,$,$);
+#16178=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_15','Competition swimming',#16177,$,$);
+#16179=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_22','Diving',#16177,$,$);
+#16180=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_71','Recreational swimming',#16177,$,$);
+#16181=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_80','Spa activities',#16177,$,$);
+#16182=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_92','Underwater observation',#16177,$,$);
+#16183=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_94','Water flume, slide and tube riding',#16177,$,$);
+#16184=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_95','Water polo',#16177,$,$);
+#16185=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_97','Wave riding',#16177,$,$);
+#16186=IFCCLASSIFICATIONREFERENCE($,'Ac_42_85_98','Whirlpool bath activities',#16177,$,$);
+#16187=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90','Water activities',#16133,$,$);
+#16188=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_11','Canoe slalom',#16187,$,$);
+#16189=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_12','Canoe sprint',#16187,$,$);
+#16190=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_50','Motor-boating',#16187,$,$);
+#16191=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_73','Rowing',#16187,$,$);
+#16192=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_75','Sailing',#16187,$,$);
+#16193=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_97','Waterskiing',#16187,$,$);
+#16194=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_98','White-water canoeing',#16187,$,$);
+#16195=IFCCLASSIFICATIONREFERENCE($,'Ac_42_90_99','White-water rafting',#16187,$,$);
+#16196=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95','Winter sports activities',#16133,$,$);
+#16197=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_02','Alpine skiing',#16196,$,$);
+#16198=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_08','Bobsleighing',#16196,$,$);
+#16199=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_19','Cross-country skiing',#16196,$,$);
+#16200=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_20','Curling',#16196,$,$);
+#16201=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_32','Freestyle skiing',#16196,$,$);
+#16202=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_40','Ice skating',#16196,$,$);
+#16203=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_41','Ice hockey',#16196,$,$);
+#16204=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_49','Luge',#16196,$,$);
+#16205=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_76','Short track speed skating',#16196,$,$);
+#16206=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_77','Skeleton sledding',#16196,$,$);
+#16207=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_78','Skiing',#16196,$,$);
+#16208=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_79','Ski jumping',#16196,$,$);
+#16209=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_80','Snowboarding',#16196,$,$);
+#16210=IFCCLASSIFICATIONREFERENCE($,'Ac_42_95_83','Speed skating',#16196,$,$);
+#16211=IFCCLASSIFICATIONREFERENCE($,'Ac_45','Residential activities',#2,$,$);
+#16212=IFCCLASSIFICATIONREFERENCE($,'Ac_45_30','External living activities',#16211,$,$);
+#16213=IFCCLASSIFICATIONREFERENCE($,'Ac_45_30_11','Camping',#16212,$,$);
+#16214=IFCCLASSIFICATIONREFERENCE($,'Ac_45_30_12','Caravanning',#16212,$,$);
+#16215=IFCCLASSIFICATIONREFERENCE($,'Ac_45_30_33','Gardening',#16212,$,$);
+#16216=IFCCLASSIFICATIONREFERENCE($,'Ac_45_45','Living activities',#16211,$,$);
+#16217=IFCCLASSIFICATIONREFERENCE($,'Ac_45_45_14','Communal socializing',#16216,$,$);
+#16218=IFCCLASSIFICATIONREFERENCE($,'Ac_45_45_22','Dining',#16216,$,$);
+#16219=IFCCLASSIFICATIONREFERENCE($,'Ac_45_45_79','Sleeping',#16216,$,$);
+#16220=IFCCLASSIFICATIONREFERENCE($,'Ac_45_70','Residential support activities',#16211,$,$);
+#16221=IFCCLASSIFICATIONREFERENCE($,'Ac_45_70_16','Concierge servicing',#16220,$,$);
+#16222=IFCCLASSIFICATIONREFERENCE($,'Ac_45_70_93','Utility activities',#16220,$,$);
+#16223=IFCCLASSIFICATIONREFERENCE($,'Ac_50','Waste disposal activities',#2,$,$);
+#16224=IFCCLASSIFICATIONREFERENCE($,'Ac_50_20','Wet waste collecting',#16223,$,$);
+#16225=IFCCLASSIFICATIONREFERENCE($,'Ac_50_40','Dry waste collecting',#16223,$,$);
+#16226=IFCCLASSIFICATIONREFERENCE($,'Ac_50_40_72','Refuse storing',#16225,$,$);
+#16227=IFCCLASSIFICATIONREFERENCE($,'Ac_50_40_78','Scrapping',#16225,$,$);
+#16228=IFCCLASSIFICATIONREFERENCE($,'Ac_55','Piped supply activities',#2,$,$);
+#16229=IFCCLASSIFICATIONREFERENCE($,'Ac_55_60','Piped supply installations testing',#16228,$,$);
+#16230=IFCCLASSIFICATIONREFERENCE($,'Ac_55_60_30','Fire suppression installation testing',#16229,$,$);
+#16231=IFCCLASSIFICATIONREFERENCE($,'Ac_55_60_68','Public health installation testing',#16229,$,$);
+#16232=IFCCLASSIFICATIONREFERENCE($,'Ac_55_60_96','Water supply installation testing',#16229,$,$);
+#16233=IFCCLASSIFICATIONREFERENCE($,'Ac_55_65','Piped supply systems commissioning',#16228,$,$);
+#16234=IFCCLASSIFICATIONREFERENCE($,'Ac_55_65_31','Fire suppression systems commissioning',#16233,$,$);
+#16235=IFCCLASSIFICATIONREFERENCE($,'Ac_55_65_96','Water supply systems commissioning',#16233,$,$);
+#16236=IFCCLASSIFICATIONREFERENCE($,'Ac_60','Heating, cooling and refrigeration activities',#2,$,$);
+#16237=IFCCLASSIFICATIONREFERENCE($,'Ac_60_60','Heating and chilled water installations testing',#16236,$,$);
+#16238=IFCCLASSIFICATIONREFERENCE($,'Ac_60_60_13','Chilled water installations testing',#16237,$,$);
+#16239=IFCCLASSIFICATIONREFERENCE($,'Ac_60_60_36','Heating installations testing',#16237,$,$);
+#16240=IFCCLASSIFICATIONREFERENCE($,'Ac_60_60_63','Heating and cooling plant and equipment testing',#16237,$,$);
+#16241=IFCCLASSIFICATIONREFERENCE($,'Ac_60_60_65','Pressure testing pipework',#16237,$,$);
+#16242=IFCCLASSIFICATIONREFERENCE($,'Ac_60_65','Heating and cooling systems and plant commissioning',#16236,$,$);
+#16243=IFCCLASSIFICATIONREFERENCE($,'Ac_60_65_06','Boilers commissioning',#16242,$,$);
+#16244=IFCCLASSIFICATIONREFERENCE($,'Ac_60_65_13','Chilled water systems commissioning',#16242,$,$);
+#16245=IFCCLASSIFICATIONREFERENCE($,'Ac_60_65_36','Heating systems commissioning',#16242,$,$);
+#16246=IFCCLASSIFICATIONREFERENCE($,'Ac_60_65_70','Refrigeration plant and equipment commissioning',#16242,$,$);
+#16247=IFCCLASSIFICATIONREFERENCE($,'Ac_65','Ventilation and air conditioning activities',#2,$,$);
+#16248=IFCCLASSIFICATIONREFERENCE($,'Ac_65_60','Ventilation and air conditioning installation testing',#16247,$,$);
+#16249=IFCCLASSIFICATIONREFERENCE($,'Ac_65_60_01','Air conditioning plant and equipment testing',#16248,$,$);
+#16250=IFCCLASSIFICATIONREFERENCE($,'Ac_65_60_02','Air supply installations testing',#16248,$,$);
+#16251=IFCCLASSIFICATIONREFERENCE($,'Ac_65_60_63','Ventilation plant and equipment testing',#16248,$,$);
+#16252=IFCCLASSIFICATIONREFERENCE($,'Ac_65_65','Ventilation and air conditioning systems commissioning',#16247,$,$);
+#16253=IFCCLASSIFICATIONREFERENCE($,'Ac_65_65_02','Air systems commissioning',#16252,$,$);
+#16254=IFCCLASSIFICATIONREFERENCE($,'Ac_70','Electrical activities',#2,$,$);
+#16255=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60','Electrical installations testing',#16254,$,$);
+#16256=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_26','Electrical equipment inspection and testing',#16255,$,$);
+#16257=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_28','Emergency lighting installations testing',#16255,$,$);
+#16258=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_35','Hazardous areas electrical wiring inspection and testing',#16255,$,$);
+#16259=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_37','High-voltage electrical installations testing',#16255,$,$);
+#16260=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_46','Lighting installations testing',#16255,$,$);
+#16261=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_47','Lightning protection installations testing',#16255,$,$);
+#16262=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_49','Low-voltage electrical installation testing and inspecting',#16255,$,$);
+#16263=IFCCLASSIFICATIONREFERENCE($,'Ac_70_60_51','Low-voltage minor electrical installation testing and inspecting',#16255,$,$);
+#16264=IFCCLASSIFICATIONREFERENCE($,'Ac_70_65','Electrical systems commissioning',#16254,$,$);
+#16265=IFCCLASSIFICATIONREFERENCE($,'Ac_70_65_46','Lighting systems commissioning',#16264,$,$);
+#16266=IFCCLASSIFICATIONREFERENCE($,'Ac_75','Communications, security, safety and protection activities',#2,$,$);
+#16267=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60','Communications, security, safety and protection installations testing',#16266,$,$);
+#16268=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_01','Access control systems testing',#16267,$,$);
+#16269=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_04','Audiovisual systems testing',#16267,$,$);
+#16270=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_15','Control systems testing',#16267,$,$);
+#16271=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_30','Fire protection installation testing',#16267,$,$);
+#16272=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_42','Intruder alarm systems testing',#16267,$,$);
+#16273=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_47','Lifts testing',#16267,$,$);
+#16274=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_80','Security systems testing',#16267,$,$);
+#16275=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_85','Surveillance equipment installations testing',#16267,$,$);
+#16276=IFCCLASSIFICATIONREFERENCE($,'Ac_75_60_92','Telecommunications systems testing',#16267,$,$);
+#16277=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65','Communications, security, safety and protection systems commissioning',#16266,$,$);
+#16278=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_01','Access control systems commissioning',#16277,$,$);
+#16279=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_04','Audiovisual systems commissioning',#16277,$,$);
+#16280=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_15','Control systems commissioning',#16277,$,$);
+#16281=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_30','Fire alarm systems commissioning',#16277,$,$);
+#16282=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_42','Intruder alarm systems commissioning',#16277,$,$);
+#16283=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_47','Lifts commissioning',#16277,$,$);
+#16284=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_80','Security systems commissioning',#16277,$,$);
+#16285=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_85','Surveillance systems commissioning',#16277,$,$);
+#16286=IFCCLASSIFICATIONREFERENCE($,'Ac_75_65_92','Telecommunications systems commissioning',#16277,$,$);
+#16287=IFCCLASSIFICATIONREFERENCE($,'Ac_80','Transport activities',#2,$,$);
+#16288=IFCCLASSIFICATIONREFERENCE($,'Ac_80_00','Accommodation works activities',#16287,$,$);
+#16289=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05','Aerospace ground activities',#16287,$,$);
+#16290=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_02','Aeroplane landing',#16289,$,$);
+#16291=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_03','Aeroplane take-off',#16289,$,$);
+#16292=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_05','Aircraft manoeuvring',#16289,$,$);
+#16293=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_06','Aircraft manoeuvring buffering',#16289,$,$);
+#16294=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_07','Aircraft standing',#16289,$,$);
+#16295=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_09','Airport controlling',#16289,$,$);
+#16296=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_33','Glider landing',#16289,$,$);
+#16297=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_34','Glider take-off',#16289,$,$);
+#16298=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_36','Hang gliding landing',#16289,$,$);
+#16299=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_37','Hang gliding take-off',#16289,$,$);
+#16300=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_38','Helicopter landing',#16289,$,$);
+#16301=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_39','Helicopter take-off',#16289,$,$);
+#16302=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_82','Spacecraft landing',#16289,$,$);
+#16303=IFCCLASSIFICATIONREFERENCE($,'Ac_80_05_84','Spacecraft take-off',#16289,$,$);
+#16304=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10','Loading and embarkation activities',#16287,$,$);
+#16305=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_04','Aircraft fuelling',#16304,$,$);
+#16306=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_06','Baggage claiming',#16304,$,$);
+#16307=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_07','Baggage handling',#16304,$,$);
+#16308=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_08','Baggage loading',#16304,$,$);
+#16309=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_12','Cargo handling',#16304,$,$);
+#16310=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_13','Cargo loading',#16304,$,$);
+#16311=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_20','Customs controlling',#16304,$,$);
+#16312=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_60','Passenger arriving',#16304,$,$);
+#16313=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_61','Passenger departing',#16304,$,$);
+#16314=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_62','Passenger disembarking',#16304,$,$);
+#16315=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_63','Passenger embarking',#16304,$,$);
+#16316=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_64','Passenger gathering',#16304,$,$);
+#16317=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_65','Passport controlling',#16304,$,$);
+#16318=IFCCLASSIFICATIONREFERENCE($,'Ac_80_10_86','Ticketing',#16304,$,$);
+#16319=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15','Aerospace maintenance activities',#16287,$,$);
+#16320=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_01','Aircraft cleaning',#16319,$,$);
+#16321=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_02','Aircraft maintaining',#16319,$,$);
+#16322=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_04','Aircraft repairing',#16319,$,$);
+#16323=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_79','Spacecraft cleaning',#16319,$,$);
+#16324=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_80','Spacecraft maintaining',#16319,$,$);
+#16325=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_81','Spacecraft preparing',#16319,$,$);
+#16326=IFCCLASSIFICATIONREFERENCE($,'Ac_80_15_82','Spacecraft repairing',#16319,$,$);
+#16327=IFCCLASSIFICATIONREFERENCE($,'Ac_80_20','Cableway activities',#16287,$,$);
+#16328=IFCCLASSIFICATIONREFERENCE($,'Ac_80_20_13','Cableway travelling',#16327,$,$);
+#16329=IFCCLASSIFICATIONREFERENCE($,'Ac_80_30','Cable transport storage and maintenance activities',#16287,$,$);
+#16330=IFCCLASSIFICATIONREFERENCE($,'Ac_80_30_34','Gondola repair and cleaning',#16329,$,$);
+#16331=IFCCLASSIFICATIONREFERENCE($,'Ac_80_30_35','Gondola storing',#16329,$,$);
+#16332=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35','Highway activities',#16287,$,$);
+#16333=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_08','Bus manoeuvring',#16332,$,$);
+#16334=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_12','Car manoeuvring',#16332,$,$);
+#16335=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_16','Carriageway separating',#16332,$,$);
+#16336=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_24','Driving',#16332,$,$);
+#16337=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_46','Laying-by and passing',#16332,$,$);
+#16338=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_63','Pedestrian crossing',#16332,$,$);
+#16339=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_64','Pedestrian standing',#16332,$,$);
+#16340=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_70','Railway crossing',#16332,$,$);
+#16341=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_73','Road buffering',#16332,$,$);
+#16342=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_90','Truck manoeuvring',#16332,$,$);
+#16343=IFCCLASSIFICATIONREFERENCE($,'Ac_80_35_95','Vehicle manoeuvring',#16332,$,$);
+#16344=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45','Highway storage and maintenance activities',#16287,$,$);
+#16345=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_09','Bus standing',#16344,$,$);
+#16346=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_40','Indoor vehicle parking',#16344,$,$);
+#16347=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_59','Outdoor vehicle parking',#16344,$,$);
+#16348=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_91','Truck standing',#16344,$,$);
+#16349=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_94','Vehicle fuelling and charging',#16344,$,$);
+#16350=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_95','Vehicle inspecting',#16344,$,$);
+#16351=IFCCLASSIFICATIONREFERENCE($,'Ac_80_45_96','Vehicle servicing',#16344,$,$);
+#16352=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50','Railway activities',#16287,$,$);
+#16353=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_50','Marshalling',#16352,$,$);
+#16354=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_70','Rail over passing',#16352,$,$);
+#16355=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_71','Rail signal controlling',#16352,$,$);
+#16356=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_73','Railway track buffering',#16352,$,$);
+#16357=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_75','Railway travel',#16352,$,$);
+#16358=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_76','Rail under passing',#16352,$,$);
+#16359=IFCCLASSIFICATIONREFERENCE($,'Ac_80_50_90','Train stopping',#16352,$,$);
+#16360=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60','Rail storage and maintenance activities',#16287,$,$);
+#16361=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_11','Carriage cleaning',#16360,$,$);
+#16362=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_26','Engine fuelling',#16360,$,$);
+#16363=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_27','Engine inspecting',#16360,$,$);
+#16364=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_28','Engine servicing',#16360,$,$);
+#16365=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_29','Engine washing',#16360,$,$);
+#16366=IFCCLASSIFICATIONREFERENCE($,'Ac_80_60_70','Rail repairing',#16360,$,$);
+#16367=IFCCLASSIFICATIONREFERENCE($,'Ac_80_70','Marine way and waterway activities',#16287,$,$);
+#16368=IFCCLASSIFICATIONREFERENCE($,'Ac_80_70_11','Canal level changing',#16367,$,$);
+#16369=IFCCLASSIFICATIONREFERENCE($,'Ac_80_70_12','Canal travelling',#16367,$,$);
+#16370=IFCCLASSIFICATIONREFERENCE($,'Ac_80_70_37','Harbour level changing',#16367,$,$);
+#16371=IFCCLASSIFICATIONREFERENCE($,'Ac_80_94','Bridge function activities',#16287,$,$);
+#16372=IFCCLASSIFICATIONREFERENCE($,'Ac_80_94_41','Bridge inspecting',#16371,$,$);
+#16373=IFCCLASSIFICATIONREFERENCE($,'Ac_80_94_60','Passing over a bridge',#16371,$,$);
+#16374=IFCCLASSIFICATIONREFERENCE($,'Ac_80_94_90','Passing under a bridge',#16371,$,$);
+#16375=IFCCLASSIFICATIONREFERENCE($,'Ac_85','Operation and maintenance activities',#2,$,$);
+#16376=IFCCLASSIFICATIONREFERENCE($,'Ac_85_10','Barrier and fence maintenance activities',#16375,$,$);
+#16377=IFCCLASSIFICATIONREFERENCE($,'Ac_85_10_06','Barrier maintenance',#16376,$,$);
+#16378=IFCCLASSIFICATIONREFERENCE($,'Ac_85_10_30','Fencing maintenance',#16376,$,$);
+#16379=IFCCLASSIFICATIONREFERENCE($,'Ac_85_10_45','Kerbs and channels maintenance',#16376,$,$);
+#16380=IFCCLASSIFICATIONREFERENCE($,'Ac_85_10_95','Vehicle restraint systems maintenance',#16376,$,$);
+#16381=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30','Flora maintenance activities',#16375,$,$);
+#16382=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_01','Amenity grass maintenance',#16381,$,$);
+#16383=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_02','Amenity planting maintenance',#16381,$,$);
+#16384=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_04','Aquatic and wetland planting maintenance',#16381,$,$);
+#16385=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_28','External container planting maintenance',#16381,$,$);
+#16386=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_30','Forestry maintenance',#16381,$,$);
+#16387=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_37','Hedgerow maintenance',#16381,$,$);
+#16388=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_40','Internal container planting maintenance',#16381,$,$);
+#16389=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_47','Living roof maintenance',#16381,$,$);
+#16390=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_50','Meadow grass maintenance',#16381,$,$);
+#16391=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_80','Sports turf maintenance',#16381,$,$);
+#16392=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_95','Vegetation control maintenance',#16381,$,$);
+#16393=IFCCLASSIFICATIONREFERENCE($,'Ac_85_30_97','Wildflowers meadow maintenance',#16381,$,$);
+#16394=IFCCLASSIFICATIONREFERENCE($,'Ac_85_50','Marine maintenance activities',#16375,$,$);
+#16395=IFCCLASSIFICATIONREFERENCE($,'Ac_85_50_24','Dredging',#16394,$,$);
+#16396=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60','Paving maintenance activities',#16375,$,$);
+#16397=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_02','Asphalt paving maintenance',#16396,$,$);
+#16398=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_04','Asphalt sports paving maintenance',#16396,$,$);
+#16399=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_10','Bound aggregate paving maintenance',#16396,$,$);
+#16400=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_50','Mat and sheet paving maintenance',#16396,$,$);
+#16401=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_80','Sport or play paving maintenance',#16396,$,$);
+#16402=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_82','Sports or play unbound paving maintenance',#16396,$,$);
+#16403=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_92','Unbound paving maintenance',#16396,$,$);
+#16404=IFCCLASSIFICATIONREFERENCE($,'Ac_85_60_93','Unit paving maintenance',#16396,$,$);
+#16405=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65','Plant and controls operating',#16375,$,$);
+#16406=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_08','Boiler operating',#16405,$,$);
+#16407=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_15','Controlling',#16405,$,$);
+#16408=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_26','Electrical switching',#16405,$,$);
+#16409=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_27','Equipment operating',#16405,$,$);
+#16410=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_32','Furnace operating',#16405,$,$);
+#16411=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_42','Incinerating',#16405,$,$);
+#16412=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_48','Lift machine operating',#16405,$,$);
+#16413=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_50','Meter checking',#16405,$,$);
+#16414=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_64','Plant operating',#16405,$,$);
+#16415=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_77','Server operating',#16405,$,$);
+#16416=IFCCLASSIFICATIONREFERENCE($,'Ac_85_65_90','Transformer operating',#16405,$,$);
+#16417=IFCCLASSIFICATIONREFERENCE($,'Ac_85_70','Retrospective application activities',#16375,$,$);
+#16418=IFCCLASSIFICATIONREFERENCE($,'Ac_85_70_40','Insulating and waterproofing retrofitted living roofs',#16417,$,$);
+#16419=IFCCLASSIFICATIONREFERENCE($,'Ac_85_70_70','Retrospective applying of fire retardant treatment',#16417,$,$);
+#16420=IFCCLASSIFICATIONREFERENCE($,'Ac_85_70_75','Retrospective applying of preservative treatment',#16417,$,$);
+#16421=IFCCLASSIFICATIONREFERENCE($,'Ac_90','Circulation and plant activities',#2,$,$);
+#16422=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10','Circulation activities',#16421,$,$);
+#16423=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_02','Air blocking',#16422,$,$);
+#16424=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_13','Circulating between levels',#16422,$,$);
+#16425=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_14','Circulating between rooms',#16422,$,$);
+#16426=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_16','Covered walking',#16422,$,$);
+#16427=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_24','Dropping-off and collecting',#16422,$,$);
+#16428=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_27','Entering and exiting',#16422,$,$);
+#16429=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_34','Goods conveying',#16422,$,$);
+#16430=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_49','Lift stopping and calling',#16422,$,$);
+#16431=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_50','Lift travelling',#16422,$,$);
+#16432=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_77','Sheltering',#16422,$,$);
+#16433=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_78','Shoppers moving and circulation',#16422,$,$);
+#16434=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_93','Uncovered walking',#16422,$,$);
+#16435=IFCCLASSIFICATIONREFERENCE($,'Ac_90_10_96','Wheelchair travelling',#16422,$,$);
+#16436=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20','Common activities',#16421,$,$);
+#16437=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_09','Briefing',#16436,$,$);
+#16438=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_13','Changing',#16436,$,$);
+#16439=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_42','Interviewing',#16436,$,$);
+#16440=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_69','Queuing',#16436,$,$);
+#16441=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_72','Resting',#16436,$,$);
+#16442=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_82','Spectator seating',#16436,$,$);
+#16443=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_83','Spectator standing',#16436,$,$);
+#16444=IFCCLASSIFICATIONREFERENCE($,'Ac_90_20_96','Waiting',#16436,$,$);
+#16445=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50','Storing activities',#16421,$,$);
+#16446=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_02','Aircraft storing',#16445,$,$);
+#16447=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_04','Arms storing',#16445,$,$);
+#16448=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_06','Baggage storing',#16445,$,$);
+#16449=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_07','Beer storing',#16445,$,$);
+#16450=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_09','Blood storing',#16445,$,$);
+#16451=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_10','Boat storing',#16445,$,$);
+#16452=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_11','Cargo storing',#16445,$,$);
+#16453=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_13','Chemicals storing',#16445,$,$);
+#16454=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_14','Clothes storing',#16445,$,$);
+#16455=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_15','Cold storing',#16445,$,$);
+#16456=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_24','Dry waste storing',#16445,$,$);
+#16457=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_25','Evidence storing',#16445,$,$);
+#16458=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_26','Explosives storing',#16445,$,$);
+#16459=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_28','Feed storing',#16445,$,$);
+#16460=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_29','Flammable chemicals storing',#16445,$,$);
+#16461=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_30','Food storing',#16445,$,$);
+#16462=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_32','Fuel storing',#16445,$,$);
+#16463=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_34','Gas storing',#16445,$,$);
+#16464=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_35','General storing',#16445,$,$);
+#16465=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_36','Glider storing',#16445,$,$);
+#16466=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_37','Goods storing',#16445,$,$);
+#16467=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_39','Grain storing',#16445,$,$);
+#16468=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_41','Hang glider storing',#16445,$,$);
+#16469=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_42','Hazardous waste storing',#16445,$,$);
+#16470=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_44','Helicoptor storing',#16445,$,$);
+#16471=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_47','Left luggage storing',#16445,$,$);
+#16472=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_52','Medical records storing',#16445,$,$);
+#16473=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_53','Mineral storing',#16445,$,$);
+#16474=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_58','Oil storing',#16445,$,$);
+#16475=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_59','Outdoor storing',#16445,$,$);
+#16476=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_65','Pharmacy storing',#16445,$,$);
+#16477=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_70','Raw materials storing',#16445,$,$);
+#16478=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_75','Scientific equipment storing',#16445,$,$);
+#16479=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_77','Secure storing',#16445,$,$);
+#16480=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_80','Solid fuel storing',#16445,$,$);
+#16481=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_84','Storage of human remains',#16445,$,$);
+#16482=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_91','Vehicle storing',#16445,$,$);
+#16483=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_92','Walk-in clothes storing',#16445,$,$);
+#16484=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_93','Waste gas storing',#16445,$,$);
+#16485=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_94','Waste liquids storing',#16445,$,$);
+#16486=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_95','Waste solids storing',#16445,$,$);
+#16487=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_96','Water storing',#16445,$,$);
+#16488=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_97','Wet waste storing',#16445,$,$);
+#16489=IFCCLASSIFICATIONREFERENCE($,'Ac_90_50_98','Wine storing',#16445,$,$);
+#16490=IFCCLASSIFICATIONREFERENCE($,'PC_10','Identifying properties',#14,$,$);
+#16491=IFCCLASSIFICATIONREFERENCE($,'PC_10_05','Administrative identifiers',#16490,$,$);
+#16492=IFCCLASSIFICATIONREFERENCE($,'PC_10_05_23','District',#16491,$,$);
+#16493=IFCCLASSIFICATIONREFERENCE($,'PC_10_05_48','Local authority',#16491,$,$);
+#16494=IFCCLASSIFICATIONREFERENCE($,'PC_10_05_56','Nation',#16491,$,$);
+#16495=IFCCLASSIFICATIONREFERENCE($,'PC_10_05_71','Region',#16491,$,$);
+#16496=IFCCLASSIFICATIONREFERENCE($,'PC_10_05_96','Ward',#16491,$,$);
+#16497=IFCCLASSIFICATIONREFERENCE($,'PC_10_15','Communication identifiers',#16490,$,$);
+#16498=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_27','Email address',#16497,$,$);
+#16499=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_29','Fax number',#16497,$,$);
+#16500=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_41','Internet protocol (IP) address',#16497,$,$);
+#16501=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_88','Telephone number',#16497,$,$);
+#16502=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_88_46','Landline telephone number',#16501,$,$);
+#16503=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_88_53','Mobile telephone number',#16501,$,$);
+#16504=IFCCLASSIFICATIONREFERENCE($,'PC_10_15_92','Uniform resource locator (URL)',#16497,$,$);
+#16505=IFCCLASSIFICATIONREFERENCE($,'PC_10_45','Location identifiers',#16490,$,$);
+#16506=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34','Geographic identifiers',#16505,$,$);
+#16507=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34_03','Altitude',#16506,$,$);
+#16508=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34_34','Global Positioning System (GPS) position',#16506,$,$);
+#16509=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34_46','Latitude',#16506,$,$);
+#16510=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34_48','Longitude',#16506,$,$);
+#16511=IFCCLASSIFICATIONREFERENCE($,'PC_10_45_34_97','World Geodetic System 1984',#16506,$,$);
+#16512=IFCCLASSIFICATIONREFERENCE($,'PC_10_50','Manufacturer identifiers',#16490,$,$);
+#16513=IFCCLASSIFICATIONREFERENCE($,'PC_10_50_22','Designer name',#16512,$,$);
+#16514=IFCCLASSIFICATIONREFERENCE($,'PC_10_50_50','Manufacturer name',#16512,$,$);
+#16515=IFCCLASSIFICATIONREFERENCE($,'PC_10_50_52','Manufacturer''s certification',#16512,$,$);
+#16516=IFCCLASSIFICATIONREFERENCE($,'PC_10_65','Product identifiers',#16490,$,$);
+#16517=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_08','Brand name',#16516,$,$);
+#16518=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_26','Environmental product declaration (EPD)',#16516,$,$);
+#16519=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_28','European article number (EAN)',#16516,$,$);
+#16520=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_30','Fabricator name',#16516,$,$);
+#16521=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_50','Product manufacturer',#16516,$,$);
+#16522=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_60','Patent number',#16516,$,$);
+#16523=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_65','Product name',#16516,$,$);
+#16524=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_82','Stock-keeping unit (SKU) number',#16516,$,$);
+#16525=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_85','Supplier name',#16516,$,$);
+#16526=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_89','Trademark number',#16516,$,$);
+#16527=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_91','Type',#16516,$,$);
+#16528=IFCCLASSIFICATIONREFERENCE($,'PC_10_65_93','Universal product code (UPC)',#16516,$,$);
+#16529=IFCCLASSIFICATIONREFERENCE($,'PC_10_80','Site identifiers',#16490,$,$);
+#16530=IFCCLASSIFICATIONREFERENCE($,'PC_10_80_65','Postal code',#16529,$,$);
+#16531=IFCCLASSIFICATIONREFERENCE($,'PC_10_80_77','Site address',#16529,$,$);
+#16532=IFCCLASSIFICATIONREFERENCE($,'PC_10_80_79','Site coordinates',#16529,$,$);
+#16533=IFCCLASSIFICATIONREFERENCE($,'PC_10_80_81','Site name',#16529,$,$);
+#16534=IFCCLASSIFICATIONREFERENCE($,'PC_10_80_83','Site number',#16529,$,$);
+#16535=IFCCLASSIFICATIONREFERENCE($,'PC_10_90','Test identifiers',#16490,$,$);
+#16536=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29','Factory test identifiers',#16535,$,$);
+#16537=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29_42','Factory inspection method',#16536,$,$);
+#16538=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29_46','Factory level of compliance',#16536,$,$);
+#16539=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29_71','Factory reference grade',#16536,$,$);
+#16540=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29_88','Factory test date',#16536,$,$);
+#16541=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_29_90','Factory test method',#16536,$,$);
+#16542=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31','Field test identifiers',#16535,$,$);
+#16543=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31_42','Field inspection method',#16542,$,$);
+#16544=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31_46','Field level of compliance',#16542,$,$);
+#16545=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31_71','Field reference grade',#16542,$,$);
+#16546=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31_88','Field test date',#16542,$,$);
+#16547=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_31_90','Field test method',#16542,$,$);
+#16548=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_41','Inspection protocol',#16535,$,$);
+#16549=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_65','Pretest conditions',#16535,$,$);
+#16550=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_71','Reference standard',#16535,$,$);
+#16551=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_87','Test authority',#16535,$,$);
+#16552=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_89','Test conditions',#16535,$,$);
+#16553=IFCCLASSIFICATIONREFERENCE($,'PC_10_90_91','Test method',#16535,$,$);
+#16554=IFCCLASSIFICATIONREFERENCE($,'PC_20','Descriptive properties',#14,$,$);
+#16555=IFCCLASSIFICATIONREFERENCE($,'PC_20_05','Administrative description attributes',#16554,$,$);
+#16556=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15','Cost properties',#16555,$,$);
+#16557=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_15','Cost discount',#16556,$,$);
+#16558=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_17','Cost value',#16556,$,$);
+#16559=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_19','Currency type',#16556,$,$);
+#16560=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_42','Installation cost',#16556,$,$);
+#16561=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_50','Manufacturer''s recommended retail price (RRP)',#16556,$,$);
+#16562=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_68','Purchase terms',#16556,$,$);
+#16563=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_71','Retail cost',#16556,$,$);
+#16564=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_77','Shipping cost',#16556,$,$);
+#16565=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_93','Unit price',#16556,$,$);
+#16566=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_15_96','Wholesale cost',#16556,$,$);
+#16567=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22','Delivery properties',#16555,$,$);
+#16568=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22_22','Delivery marking',#16567,$,$);
+#16569=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22_24','Delivery terms',#16567,$,$);
+#16570=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22_77','Shipper type',#16567,$,$);
+#16571=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22_79','Shipping mode',#16567,$,$);
+#16572=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_22_81','Shipping packaging',#16567,$,$);
+#16573=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_30','Floor area',#16555,$,$);
+#16574=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_30_30','Floor area per occupant',#16573,$,$);
+#16575=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_30_32','Floor area ratio',#16573,$,$);
+#16576=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_30_35','Gross internal floor area (GIFA)',#16573,$,$);
+#16577=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_30_56','Net rentable area',#16573,$,$);
+#16578=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96','Warranty properties',#16555,$,$);
+#16579=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_41','Installer\X2\2019\X0\s warranty terms',#16578,$,$);
+#16580=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_42','Installer\X2\2019\X0\s warranty type',#16578,$,$);
+#16581=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_50','Manufacturer\X2\2019\X0\s warranty terms',#16578,$,$);
+#16582=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_52','Manufacturer\X2\2019\X0\s warranty type',#16578,$,$);
+#16583=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_94','Warranty end date',#16578,$,$);
+#16584=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_95','Warranty period',#16578,$,$);
+#16585=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_96','Warranty service location',#16578,$,$);
+#16586=IFCCLASSIFICATIONREFERENCE($,'PC_20_05_96_97','Warranty start date',#16578,$,$);
+#16587=IFCCLASSIFICATIONREFERENCE($,'PC_20_15','Colour-related attributes',#16554,$,$);
+#16588=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_09','Colour brightness',#16587,$,$);
+#16589=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_13','Chroma',#16587,$,$);
+#16590=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_16','Colour constancy',#16587,$,$);
+#16591=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_17','Colour intensity',#16587,$,$);
+#16592=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_18','Colourfulness',#16587,$,$);
+#16593=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_39','Hue',#16587,$,$);
+#16594=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_47','Lightness',#16587,$,$);
+#16595=IFCCLASSIFICATIONREFERENCE($,'PC_20_15_75','Saturation',#16587,$,$);
+#16596=IFCCLASSIFICATIONREFERENCE($,'PC_20_25','Dimension attributes',#16554,$,$);
+#16597=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_01','Angle',#16596,$,$);
+#16598=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_01_65','Plane angle',#16597,$,$);
+#16599=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_01_78','Slope angle',#16597,$,$);
+#16600=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_01_80','Solid angle',#16597,$,$);
+#16601=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_02','Angular dimension',#16596,$,$);
+#16602=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_04','Arbitrary dimension',#16596,$,$);
+#16603=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_05','Area',#16596,$,$);
+#16604=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46','Latitudinal dimensions',#16596,$,$);
+#16605=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_14','Circumference',#16604,$,$);
+#16606=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_22','Diameter',#16604,$,$);
+#16607=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_33','Gauge',#16604,$,$);
+#16608=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_42','Inside diameter',#16604,$,$);
+#16609=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_59','Outside diameter',#16604,$,$);
+#16610=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_62','Perimeter',#16604,$,$);
+#16611=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_70','Radius',#16604,$,$);
+#16612=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_46_97','Width',#16604,$,$);
+#16613=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_48','Longitudinal dimensions',#16596,$,$);
+#16614=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_48_22','Distance',#16613,$,$);
+#16615=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_48_47','Length',#16613,$,$);
+#16616=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_48_80','Span',#16613,$,$);
+#16617=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_80','Spacing',#16596,$,$);
+#16618=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_88','Thickness',#16596,$,$);
+#16619=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_88_24','Dry film thickness',#16618,$,$);
+#16620=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_88_51','Mean thickness',#16618,$,$);
+#16621=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_88_65','Product thickness',#16618,$,$);
+#16622=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_88_88','Thickness of cover',#16618,$,$);
+#16623=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94','Vertical dimensions',#16596,$,$);
+#16624=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_22','Depth',#16623,$,$);
+#16625=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_27','Elevation',#16623,$,$);
+#16626=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_29','Fall',#16623,$,$);
+#16627=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_34','Gradient',#16623,$,$);
+#16628=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_37','Height',#16623,$,$);
+#16629=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_94_72','Rise',#16623,$,$);
+#16630=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95','Volume',#16596,$,$);
+#16631=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_02','Air infiltration volume',#16630,$,$);
+#16632=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_04','Air specific volume',#16630,$,$);
+#16633=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_24','Dry volume',#16630,$,$);
+#16634=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_30','Fluid volume',#16630,$,$);
+#16635=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_77','Second moment of area',#16630,$,$);
+#16636=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_78','Section modulus',#16630,$,$);
+#16637=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_80','Specific volume',#16630,$,$);
+#16638=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_95','Volume per unit time',#16630,$,$);
+#16639=IFCCLASSIFICATIONREFERENCE($,'PC_20_25_95_96','Water penetration volume',#16630,$,$);
+#16640=IFCCLASSIFICATIONREFERENCE($,'PC_20_30','Fabrication properties',#16554,$,$);
+#16641=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_04','Applied heat treatment technique',#16640,$,$);
+#16642=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_06','Backing type',#16640,$,$);
+#16643=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_20','Custom-made',#16640,$,$);
+#16644=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_29','Fabrication location',#16640,$,$);
+#16645=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_29_58','Off-site fabrication',#16644,$,$);
+#16646=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_29_59','On-site fabrication',#16644,$,$);
+#16647=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_36','Handmade',#16640,$,$);
+#16648=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_50','Made-to-order',#16640,$,$);
+#16649=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_56','New-build',#16640,$,$);
+#16650=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_65','Pre-assembled',#16640,$,$);
+#16651=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_67','Prefabricated',#16640,$,$);
+#16652=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_71','Repaired',#16640,$,$);
+#16653=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_83','Stock',#16640,$,$);
+#16654=IFCCLASSIFICATIONREFERENCE($,'PC_20_30_85','Surface type',#16640,$,$);
+#16655=IFCCLASSIFICATIONREFERENCE($,'PC_20_32','Form attributes',#16554,$,$);
+#16656=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_13','Cellular',#16655,$,$);
+#16657=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_24','Domed',#16655,$,$);
+#16658=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_26','Edge',#16655,$,$);
+#16659=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_26_27','Edge profile',#16658,$,$);
+#16660=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_29','Face',#16655,$,$);
+#16661=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_30','Flat',#16655,$,$);
+#16662=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_34','Geometry',#16655,$,$);
+#16663=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_36','Hand',#16655,$,$);
+#16664=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_36_47','Left-handed',#16663,$,$);
+#16665=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_36_72','Right-handed',#16663,$,$);
+#16666=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_52','Modular',#16655,$,$);
+#16667=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_60','Decorative pattern',#16655,$,$);
+#16668=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_60_60','Pattern scale',#16667,$,$);
+#16669=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_62','Perforated',#16655,$,$);
+#16670=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_65','Point',#16655,$,$);
+#16671=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_67','Profile',#16655,$,$);
+#16672=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_71','Relief pattern',#16655,$,$);
+#16673=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_71_37','Relief pattern height',#16672,$,$);
+#16674=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_71_60','Relief pattern scale',#16672,$,$);
+#16675=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_73','Repeated',#16655,$,$);
+#16676=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_75','Reversibility',#16655,$,$);
+#16677=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79','Shape',#16655,$,$);
+#16678=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79_42','Irregular shape',#16677,$,$);
+#16679=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79_59','Organic shape',#16677,$,$);
+#16680=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79_71','Rectangular',#16677,$,$);
+#16681=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79_73','Round',#16677,$,$);
+#16682=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_79_81','Square',#16677,$,$);
+#16683=IFCCLASSIFICATIONREFERENCE($,'PC_20_32_94','Vertex',#16655,$,$);
+#16684=IFCCLASSIFICATIONREFERENCE($,'PC_20_35','Geophysical properties',#16554,$,$);
+#16685=IFCCLASSIFICATIONREFERENCE($,'PC_20_35_14','Clay content',#16684,$,$);
+#16686=IFCCLASSIFICATIONREFERENCE($,'PC_20_35_51','Magnetic susceptibility',#16684,$,$);
+#16687=IFCCLASSIFICATIONREFERENCE($,'PC_20_35_53','Metal content',#16684,$,$);
+#16688=IFCCLASSIFICATIONREFERENCE($,'PC_20_35_80','Seismic velocity',#16684,$,$);
+#16689=IFCCLASSIFICATIONREFERENCE($,'PC_20_35_97','Water saturation',#16684,$,$);
+#16690=IFCCLASSIFICATIONREFERENCE($,'PC_20_50','Manufacturer description properties',#16554,$,$);
+#16691=IFCCLASSIFICATIONREFERENCE($,'PC_20_50_50','Manufacture production rate',#16690,$,$);
+#16692=IFCCLASSIFICATIONREFERENCE($,'PC_20_50_52','Manufacturer experience',#16690,$,$);
+#16693=IFCCLASSIFICATIONREFERENCE($,'PC_20_50_54','Method of manufacture',#16690,$,$);
+#16694=IFCCLASSIFICATIONREFERENCE($,'PC_20_50_81','Source availability limitations',#16690,$,$);
+#16695=IFCCLASSIFICATIONREFERENCE($,'PC_20_53','Mass attributes',#16554,$,$);
+#16696=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_51','Mass',#16695,$,$);
+#16697=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_51_50','Mass per unit area',#16696,$,$);
+#16698=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_51_51','Mass per unit length',#16696,$,$);
+#16699=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_51_52','Mass per unit time',#16696,$,$);
+#16700=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_51_54','Molar mass',#16696,$,$);
+#16701=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_97','Weight',#16695,$,$);
+#16702=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_97_78','Shipping weight',#16701,$,$);
+#16703=IFCCLASSIFICATIONREFERENCE($,'PC_20_53_97_97','Weight classification',#16701,$,$);
+#16704=IFCCLASSIFICATIONREFERENCE($,'PC_20_55','Material attributes',#16554,$,$);
+#16705=IFCCLASSIFICATIONREFERENCE($,'PC_20_55_17','Constituent materials',#16704,$,$);
+#16706=IFCCLASSIFICATIONREFERENCE($,'PC_20_55_71','Raw material',#16704,$,$);
+#16707=IFCCLASSIFICATIONREFERENCE($,'PC_20_60','Odour',#16554,$,$);
+#16708=IFCCLASSIFICATIONREFERENCE($,'PC_20_65','Positional attributes',#16554,$,$);
+#16709=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_01','Above ground',#16708,$,$);
+#16710=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_10','Buried',#16708,$,$);
+#16711=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_42','In situ',#16708,$,$);
+#16712=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48','Locational attributes',#16708,$,$);
+#16713=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_08','Bottom',#16712,$,$);
+#16714=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_13','Centre',#16712,$,$);
+#16715=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_17','Corner',#16712,$,$);
+#16716=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_27','End',#16712,$,$);
+#16717=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_31','Front',#16712,$,$);
+#16718=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_72','Rear',#16712,$,$);
+#16719=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_80','Side',#16712,$,$);
+#16720=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_48_89','Top',#16712,$,$);
+#16721=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59','Orientation',#16708,$,$);
+#16722=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_23','Diagonal',#16721,$,$);
+#16723=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_38','Horizontal',#16721,$,$);
+#16724=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_48','Longitudinal',#16721,$,$);
+#16725=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_64','Perpendicular',#16721,$,$);
+#16726=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_70','Radial',#16721,$,$);
+#16727=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_90','Transverse',#16721,$,$);
+#16728=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_59_94','Vertical',#16721,$,$);
+#16729=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72','Relative position',#16708,$,$);
+#16730=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_04','Attached',#16729,$,$);
+#16731=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_15','Central',#16729,$,$);
+#16732=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18','Compass points',#16729,$,$);
+#16733=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_26','East',#16732,$,$);
+#16734=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_55','North',#16732,$,$);
+#16735=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_56','North-east',#16732,$,$);
+#16736=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_58','North-west',#16732,$,$);
+#16737=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_80','South',#16732,$,$);
+#16738=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_81','South-east',#16732,$,$);
+#16739=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_83','South-west',#16732,$,$);
+#16740=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_18_95','West',#16732,$,$);
+#16741=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_23','Detached',#16729,$,$);
+#16742=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_25','Downstream',#16729,$,$);
+#16743=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_26','Elevated',#16729,$,$);
+#16744=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_27','Exposed',#16729,$,$);
+#16745=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_28','Exterior',#16729,$,$);
+#16746=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_30','Flush',#16729,$,$);
+#16747=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_32','Free-standing',#16729,$,$);
+#16748=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_42','Interior',#16729,$,$);
+#16749=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_46','Landward',#16729,$,$);
+#16750=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_47','Lateral',#16729,$,$);
+#16751=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_48','Left',#16729,$,$);
+#16752=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_49','Lower',#16729,$,$);
+#16753=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_61','Parallel',#16729,$,$);
+#16754=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_66','Projecting',#16729,$,$);
+#16755=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_67','Protected',#16729,$,$);
+#16756=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_71','Recessed',#16729,$,$);
+#16757=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_72','Right',#16729,$,$);
+#16758=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_79','Seaward',#16729,$,$);
+#16759=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_84','Surface-mounted',#16729,$,$);
+#16760=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_85','Suspended',#16729,$,$);
+#16761=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_89','Tilted',#16729,$,$);
+#16762=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_92','Upper',#16729,$,$);
+#16763=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_72_93','Upstream',#16729,$,$);
+#16764=IFCCLASSIFICATIONREFERENCE($,'PC_20_65_93','Underground',#16708,$,$);
+#16765=IFCCLASSIFICATIONREFERENCE($,'PC_20_67','Product description properties',#16554,$,$);
+#16766=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_01','Accessories provision',#16765,$,$);
+#16767=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03','Applied finish',#16765,$,$);
+#16768=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_06','Base finish',#16767,$,$);
+#16769=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_29','Face finish',#16767,$,$);
+#16770=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_31','Field finishing material',#16767,$,$);
+#16771=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_32','Field finishing method',#16767,$,$);
+#16772=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_42','Integral finish',#16767,$,$);
+#16773=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_03_61','Patina',#16767,$,$);
+#16774=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04','Applied treatment',#16765,$,$);
+#16775=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_03','Anti-corrosive treatment',#16774,$,$);
+#16776=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_04','Anti-microbial treatment',#16774,$,$);
+#16777=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_30','Fire-retardant treatment',#16774,$,$);
+#16778=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_37','Herbicide treatment',#16774,$,$);
+#16779=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_63','Pesticide treatment',#16774,$,$);
+#16780=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_04_66','Pressure treatment',#16774,$,$);
+#16781=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_05','Availability',#16765,$,$);
+#16782=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_27','Enclosure provision',#16765,$,$);
+#16783=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_29','Factory settings',#16765,$,$);
+#16784=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_31','Features',#16765,$,$);
+#16785=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_34','Grade',#16765,$,$);
+#16786=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_34_17','Commercial grade',#16785,$,$);
+#16787=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_34_24','Domestic grade',#16785,$,$);
+#16788=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_34_28','Extra-heavy-duty grade',#16785,$,$);
+#16789=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_34_37','Heavy-duty grade',#16785,$,$);
+#16790=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_53','Modifications',#16765,$,$);
+#16791=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_53_58','Optional modifications',#16790,$,$);
+#16792=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_60','Packaging type',#16765,$,$);
+#16793=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_64','Product certification',#16765,$,$);
+#16794=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65','Product colour',#16765,$,$);
+#16795=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65_17','Colour coding',#16794,$,$);
+#16796=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65_25','Dye lot',#16794,$,$);
+#16797=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65_28','Exterior colour',#16794,$,$);
+#16798=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65_41','Integral colour',#16794,$,$);
+#16799=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_65_42','Interior colour',#16794,$,$);
+#16800=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_66','Product orientation',#16765,$,$);
+#16801=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_67','Product style',#16765,$,$);
+#16802=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_69','Quality standard',#16765,$,$);
+#16803=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_78','Service access provision',#16765,$,$);
+#16804=IFCCLASSIFICATIONREFERENCE($,'PC_20_67_83','Species',#16765,$,$);
+#16805=IFCCLASSIFICATIONREFERENCE($,'PC_20_70','Relational measurements',#16554,$,$);
+#16806=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_01','Acceleration',#16805,$,$);
+#16807=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_01_02','Angular acceleration',#16806,$,$);
+#16808=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_04','Aspect ratio',#16805,$,$);
+#16809=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_22','Dependent value',#16805,$,$);
+#16810=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_23','Dependent variable',#16805,$,$);
+#16811=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_31','Frequency',#16805,$,$);
+#16812=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_31_03','Angular velocity',#16811,$,$);
+#16813=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_31_73','Rotational frequency',#16811,$,$);
+#16814=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_31_74','Relative velocity',#16811,$,$);
+#16815=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_70','Relative age',#16805,$,$);
+#16816=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_71','Relative humidity',#16805,$,$);
+#16817=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_72','Relative power',#16805,$,$);
+#16818=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_73','Relative range',#16805,$,$);
+#16819=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_74','Relative sound',#16805,$,$);
+#16820=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_75','Relative time',#16805,$,$);
+#16821=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_82','Speed',#16805,$,$);
+#16822=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_93','Unit of analysis',#16805,$,$);
+#16823=IFCCLASSIFICATIONREFERENCE($,'PC_20_70_94','Velocity',#16805,$,$);
+#16824=IFCCLASSIFICATIONREFERENCE($,'PC_20_77','Scheduling properties',#16554,$,$);
+#16825=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_01','Acceptance date',#16824,$,$);
+#16826=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_17','Commissioning date',#16824,$,$);
+#16827=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_19','Date put in storage',#16824,$,$);
+#16828=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_20','Date updated',#16824,$,$);
+#16829=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_21','Day type',#16824,$,$);
+#16830=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_22','Decommissioning date',#16824,$,$);
+#16831=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_23','Delivery date',#16824,$,$);
+#16832=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_24','Demolition date',#16824,$,$);
+#16833=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_25','Despatch date',#16824,$,$);
+#16834=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_25_22','Delivery time',#16833,$,$);
+#16835=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_25_23','Despatch time',#16833,$,$);
+#16836=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_26','Disposal date',#16824,$,$);
+#16837=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_28','Extraction date',#16824,$,$);
+#16838=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_36','Harvest date',#16824,$,$);
+#16839=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_42','Installation date',#16824,$,$);
+#16840=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_42_27','Installation end date',#16839,$,$);
+#16841=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_42_84','Installation start date',#16839,$,$);
+#16842=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_50','Maintenance date',#16824,$,$);
+#16843=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_51','Manufacture date',#16824,$,$);
+#16844=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52','Manufacturing lead time',#16824,$,$);
+#16845=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_20','Cycle time',#16844,$,$);
+#16846=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_41','Idle time',#16844,$,$);
+#16847=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_66','Process time',#16844,$,$);
+#16848=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_74','Run time',#16844,$,$);
+#16849=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_80','Set-up time',#16844,$,$);
+#16850=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_52_89','Throughput time',#16844,$,$);
+#16851=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_53','Maximum storage time',#16824,$,$);
+#16852=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_67','Purchase date',#16824,$,$);
+#16853=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_71','Recycled date',#16824,$,$);
+#16854=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_72','Removal date',#16824,$,$);
+#16855=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_77','Service response time',#16824,$,$);
+#16856=IFCCLASSIFICATIONREFERENCE($,'PC_20_77_79','Inspection date',#16824,$,$);
+#16857=IFCCLASSIFICATIONREFERENCE($,'PC_20_87','Texture',#16554,$,$);
+#16858=IFCCLASSIFICATIONREFERENCE($,'PC_20_87_35','Granularity',#16857,$,$);
+#16859=IFCCLASSIFICATIONREFERENCE($,'PC_20_87_72','Roughness',#16857,$,$);
+#16860=IFCCLASSIFICATIONREFERENCE($,'PC_20_87_80','Smoothness',#16857,$,$);
+#16861=IFCCLASSIFICATIONREFERENCE($,'PC_20_89','Time-related properties',#16554,$,$);
+#16862=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_03','Age',#16861,$,$);
+#16863=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_03_03','Age range',#16862,$,$);
+#16864=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_27','Elapsed time',#16861,$,$);
+#16865=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_48','Lifespan',#16861,$,$);
+#16866=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_48_01','Actual lifespan',#16865,$,$);
+#16867=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_48_27','Expected lifespan',#16865,$,$);
+#16868=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_64','Permanence',#16861,$,$);
+#16869=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_87','Temporary',#16861,$,$);
+#16870=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_90','Time increment',#16861,$,$);
+#16871=IFCCLASSIFICATIONREFERENCE($,'PC_20_89_91','Time span',#16861,$,$);
+#16872=IFCCLASSIFICATIONREFERENCE($,'PC_20_91','Tolerance properties',#16554,$,$);
+#16873=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_22','Deflection tolerance',#16872,$,$);
+#16874=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24','Dimensional tolerance',#16872,$,$);
+#16875=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_12','Camber',#16874,$,$);
+#16876=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_30','Flatness tolerance',#16874,$,$);
+#16877=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_47','Length tolerance',#16874,$,$);
+#16878=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_89','Thickness tolerance',#16874,$,$);
+#16879=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_96','Warp tolerance',#16874,$,$);
+#16880=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_24_98','Width tolerance',#16874,$,$);
+#16881=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_42','Installation tolerance',#16872,$,$);
+#16882=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_47','Levelness',#16872,$,$);
+#16883=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_64','Plumbness',#16872,$,$);
+#16884=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_79','Shape tolerance',#16872,$,$);
+#16885=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_82','Squareness',#16872,$,$);
+#16886=IFCCLASSIFICATIONREFERENCE($,'PC_20_91_89','Texture tolerance',#16872,$,$);
+#16887=IFCCLASSIFICATIONREFERENCE($,'PC_35','Performance characteristics',#14,$,$);
+#16888=IFCCLASSIFICATIONREFERENCE($,'PC_35_05','Acoustic characteristics',#16887,$,$);
+#16889=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_05','Acoustic impedance',#16888,$,$);
+#16890=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_53','Noise absorption coefficient',#16888,$,$);
+#16891=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_54','Noise frequency',#16888,$,$);
+#16892=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_55','Noise level',#16888,$,$);
+#16893=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_56','Noise reduction coefficient (NRC)',#16888,$,$);
+#16894=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_57','Noise transmission factor',#16888,$,$);
+#16895=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_72','Reverberation time',#16888,$,$);
+#16896=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_75','Sound absorption average (SAA)',#16888,$,$);
+#16897=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_76','Sound attenuation',#16888,$,$);
+#16898=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_77','Sound energy density',#16888,$,$);
+#16899=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_78','Sound energy flux',#16888,$,$);
+#16900=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_79','Sound intensity',#16888,$,$);
+#16901=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_80','Sound isolation',#16888,$,$);
+#16902=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_81','Sound power',#16888,$,$);
+#16903=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_82','Sound pressure',#16888,$,$);
+#16904=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_83','Sound reflectiveness',#16888,$,$);
+#16905=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_84','Sound transmission class (STC)',#16888,$,$);
+#16906=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_86','Speech intelligibility',#16888,$,$);
+#16907=IFCCLASSIFICATIONREFERENCE($,'PC_35_05_87','Speed of sound',#16888,$,$);
+#16908=IFCCLASSIFICATIONREFERENCE($,'PC_35_15','Chemical characteristics',#16887,$,$);
+#16909=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_01','Acid-free',#16908,$,$);
+#16910=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_02','Acidity',#16908,$,$);
+#16911=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_04','Alkalinity',#16908,$,$);
+#16912=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_14','Chemical aging',#16908,$,$);
+#16913=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_14_03','Activation energy',#16912,$,$);
+#16914=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_14_17','Corrosion rate',#16912,$,$);
+#16915=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_14_23','Diffusion rate',#16912,$,$);
+#16916=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_14_39','Hydration rate',#16912,$,$);
+#16917=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_15','Chemical composition',#16908,$,$);
+#16918=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_16','Chemical resistance',#16908,$,$);
+#16919=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_16_02','Acid resistance',#16918,$,$);
+#16920=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_16_04','Alkali resistance',#16918,$,$);
+#16921=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_16_59','Ozone resistance',#16918,$,$);
+#16922=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_16_85','Sulfate resistance',#16918,$,$);
+#16923=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_19','Concentration',#16908,$,$);
+#16924=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_56','Neutrality',#16908,$,$);
+#16925=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_65','pH value',#16908,$,$);
+#16926=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_72','Reactivity',#16908,$,$);
+#16927=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_76','Salinity',#16908,$,$);
+#16928=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_82','Solubility',#16908,$,$);
+#16929=IFCCLASSIFICATIONREFERENCE($,'PC_35_15_82_96','Water-solubility',#16928,$,$);
+#16930=IFCCLASSIFICATIONREFERENCE($,'PC_35_25','Electrical characteristics',#16887,$,$);
+#16931=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_02','Admittance',#16930,$,$);
+#16932=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_04','Amperage',#16930,$,$);
+#16933=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_12','Capacitance',#16930,$,$);
+#16934=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_17','Conductance',#16930,$,$);
+#16935=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_18','Conductivity',#16930,$,$);
+#16936=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_22','Dielectric characteristics',#16930,$,$);
+#16937=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_22_22','Dielectric constant',#16936,$,$);
+#16938=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_23','Earth ground resistance',#16930,$,$);
+#16939=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_24','Electrical charge',#16930,$,$);
+#16940=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_24_24','Electrical charge density',#16939,$,$);
+#16941=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_26','Electrical frequency',#16930,$,$);
+#16942=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_27','Electrical insulation capability',#16930,$,$);
+#16943=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_28','Electrical phase',#16930,$,$);
+#16944=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_30','Electrical source',#16930,$,$);
+#16945=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_31','Electrical susceptance',#16930,$,$);
+#16946=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_32','Flux density',#16930,$,$);
+#16947=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_41','Impedance',#16930,$,$);
+#16948=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_41_41','Input impedance',#16947,$,$);
+#16949=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_41_59','Output impedance',#16947,$,$);
+#16950=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_43','Inductance',#16930,$,$);
+#16951=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_43_80','Self-inductance',#16950,$,$);
+#16952=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_63','Permittivity',#16930,$,$);
+#16953=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_66','Power factor',#16930,$,$);
+#16954=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_66_66','Power factor state',#16953,$,$);
+#16955=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_72','Electrical resistance',#16930,$,$);
+#16956=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_73','Resistivity',#16930,$,$);
+#16957=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_95','Voltage',#16930,$,$);
+#16958=IFCCLASSIFICATIONREFERENCE($,'PC_35_25_95_95','Voltage drop',#16957,$,$);
+#16959=IFCCLASSIFICATIONREFERENCE($,'PC_35_27','Energy characteristics',#16887,$,$);
+#16960=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_24','Energy consumption',#16959,$,$);
+#16961=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_25','Energy demand',#16959,$,$);
+#16962=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_26','Energy density',#16959,$,$);
+#16963=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_27','Energy efficiency',#16959,$,$);
+#16964=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_27_27','Energy efficiency measurement',#16963,$,$);
+#16965=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_27_28','Energy efficiency verification',#16963,$,$);
+#16966=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_28','Energy output',#16959,$,$);
+#16967=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_29','Energy per unit area time',#16959,$,$);
+#16968=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_30','Energy unit',#16959,$,$);
+#16969=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_37','Heat flux density',#16959,$,$);
+#16970=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_42','Irradiance',#16959,$,$);
+#16971=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_65','Potential energy',#16959,$,$);
+#16972=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_67','Power output',#16959,$,$);
+#16973=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_71','Radiant energy characteristics',#16959,$,$);
+#16974=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_71_01','Absorptance',#16973,$,$);
+#16975=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_71_70','Radiance',#16973,$,$);
+#16976=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_71_72','Radiant intensity',#16973,$,$);
+#16977=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_82','Specific energy',#16959,$,$);
+#16978=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_89','Total solar energy',#16959,$,$);
+#16979=IFCCLASSIFICATIONREFERENCE($,'PC_35_27_89_89','Total solar energy reflectance',#16978,$,$);
+#16980=IFCCLASSIFICATIONREFERENCE($,'PC_35_28','Environmental characteristics',#16887,$,$);
+#16981=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03','Air quality',#16980,$,$);
+#16982=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_03','Air pollutants level',#16981,$,$);
+#16983=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_12','Carbon dioxide level',#16981,$,$);
+#16984=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_42','Indoor air quality (IAQ)',#16981,$,$);
+#16985=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_52','Methane level',#16981,$,$);
+#16986=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_57','Nitrous oxide level',#16981,$,$);
+#16987=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_59','Ozone concentration',#16981,$,$);
+#16988=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_82','Smog level',#16981,$,$);
+#16989=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_03_94','Air visibility',#16981,$,$);
+#16990=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_16','Climate type',#16980,$,$);
+#16991=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_46','Landscape type',#16980,$,$);
+#16992=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47','Living organism damage',#16980,$,$);
+#16993=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_04','Animal damage',#16992,$,$);
+#16994=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_06','Bacterial damage',#16992,$,$);
+#16995=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_32','Fungus damage',#16992,$,$);
+#16996=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_32_24','Dry rot damage',#16995,$,$);
+#16997=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_32_96','Wet rot damage',#16995,$,$);
+#16998=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_42','Insect damage',#16992,$,$);
+#16999=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_42_89','Termite damage',#16998,$,$);
+#17000=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_51','Microorganism damage',#16992,$,$);
+#17001=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_53','Mildew damage',#16992,$,$);
+#17002=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_47_65','Plant-growth damage',#16992,$,$);
+#17003=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48','Living organism resistance',#16980,$,$);
+#17004=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_04','Animal resistance',#17003,$,$);
+#17005=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_06','Bacterial resistance',#17003,$,$);
+#17006=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_32','Fungus resistance',#17003,$,$);
+#17007=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_32_24','Dry rot resistance',#17006,$,$);
+#17008=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_32_96','Wet rot resistance',#17006,$,$);
+#17009=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_42','Insect resistance',#17003,$,$);
+#17010=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_42_89','Termite resistance',#17009,$,$);
+#17011=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_51','Microorganism resistance',#17003,$,$);
+#17012=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_53','Mildew resistance',#17003,$,$);
+#17013=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_48_65','Plant-growth resistance',#17003,$,$);
+#17014=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_59','Overshadowing',#16980,$,$);
+#17015=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_79','Seismic classification',#16980,$,$);
+#17016=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_90','Traffic stream properties',#16980,$,$);
+#17017=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_90_23','Traffic density',#17016,$,$);
+#17018=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_90_30','Traffic flow',#17016,$,$);
+#17019=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_90_80','Traffic speed',#17016,$,$);
+#17020=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_95','Water body type',#16980,$,$);
+#17021=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_96','Water quality',#16980,$,$);
+#17022=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_98','Wind effects',#16980,$,$);
+#17023=IFCCLASSIFICATIONREFERENCE($,'PC_35_28_98_80','Wind speed',#17022,$,$);
+#17024=IFCCLASSIFICATIONREFERENCE($,'PC_35_30','Fire performance characteristics',#16887,$,$);
+#17025=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_11','Calorific value',#17024,$,$);
+#17026=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_15','Combustibility',#17024,$,$);
+#17027=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_19','Critical radiant flux',#17024,$,$);
+#17028=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_28','Explosion resistance',#17024,$,$);
+#17029=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_29','Fire loading',#17024,$,$);
+#17030=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_30','Fire resistance',#17024,$,$);
+#17031=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_31','Fire severity',#17024,$,$);
+#17032=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_32','Fire type',#17024,$,$);
+#17033=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_33','Flame propagation',#17024,$,$);
+#17034=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_34','Flame spread index',#17024,$,$);
+#17035=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_35','Flammability',#17024,$,$);
+#17036=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_37','Heat release rate',#17024,$,$);
+#17037=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_41','Ignitability',#17024,$,$);
+#17038=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_43','Ignition resistance',#17024,$,$);
+#17039=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_76','Smoke and gas propagation',#17024,$,$);
+#17040=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_77','Smoke and gas release',#17024,$,$);
+#17041=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_78','Smoke density',#17024,$,$);
+#17042=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_79','Smoke-developed index',#17024,$,$);
+#17043=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_80','Smoke-developed rating',#17024,$,$);
+#17044=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_81','Smoke produced',#17024,$,$);
+#17045=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_84','Surface burning characteristics',#17024,$,$);
+#17046=IFCCLASSIFICATIONREFERENCE($,'PC_35_30_86','Surface spread of flame',#17024,$,$);
+#17047=IFCCLASSIFICATIONREFERENCE($,'PC_35_48','Lighting characteristics',#16887,$,$);
+#17048=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_05','Average estimated illumination (AEI)',#17047,$,$);
+#17049=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_09','Brightness',#17047,$,$);
+#17050=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_34','Glare',#17047,$,$);
+#17051=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_34_34','Glare index',#17050,$,$);
+#17052=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_41','Illuminance',#17047,$,$);
+#17053=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_43','Index of refraction',#17047,$,$);
+#17054=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_46','Light emission',#17047,$,$);
+#17055=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_47','Light exposure',#17047,$,$);
+#17056=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_48','Light absorption',#17047,$,$);
+#17057=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_49','Luminance',#17047,$,$);
+#17058=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_49_46','Lumens per lamp',#17057,$,$);
+#17059=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_49_47','Luminous efficacy',#17057,$,$);
+#17060=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_49_48','Luminous flux',#17057,$,$);
+#17061=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_49_49','Luminous intensity',#17057,$,$);
+#17062=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_67','Polarization',#17047,$,$);
+#17063=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71','Reflectance',#17047,$,$);
+#17064=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71_14','Ceiling reflectance',#17063,$,$);
+#17065=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71_30','Floor reflectance',#17063,$,$);
+#17066=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71_82','Solar reflectance',#17063,$,$);
+#17067=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71_84','Solar reflectance index (SRI)',#17063,$,$);
+#17068=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_71_96','Wall reflectance',#17063,$,$);
+#17069=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_73','Reflectivity',#17047,$,$);
+#17070=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_89','Transmission',#17047,$,$);
+#17071=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_91','Transmittance',#17047,$,$);
+#17072=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_91_93','Ultraviolet light transmittance',#17071,$,$);
+#17073=IFCCLASSIFICATIONREFERENCE($,'PC_35_48_91_95','Visible light transmittance',#17071,$,$);
+#17074=IFCCLASSIFICATIONREFERENCE($,'PC_35_51','Mechanical characteristics',#16887,$,$);
+#17075=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01','Abuse resistance',#17074,$,$);
+#17076=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01_06','Ballistic resistance',#17075,$,$);
+#17077=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01_08','Blast resistance',#17075,$,$);
+#17078=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01_10','Bullet resistance',#17075,$,$);
+#17079=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01_89','Theft resistance',#17075,$,$);
+#17080=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_01_94','Vandal resistance',#17075,$,$);
+#17081=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_07','Bendability',#17074,$,$);
+#17082=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_07_54','Bending moment',#17081,$,$);
+#17083=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_07_70','Bending radius',#17081,$,$);
+#17084=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_09','Brittleness',#17074,$,$);
+#17085=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_16','Compressibility',#17074,$,$);
+#17086=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_17','Cracking',#17074,$,$);
+#17087=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_18','Creep',#17074,$,$);
+#17088=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_25','Ductility',#17074,$,$);
+#17089=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_26','Elasticity',#17074,$,$);
+#17090=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_27','Elongation',#17074,$,$);
+#17091=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_29','Expansion',#17074,$,$);
+#17092=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_29_39','Hygrometric expansion',#17091,$,$);
+#17093=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_31','Fracture characteristics',#17074,$,$);
+#17094=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_31_27','Fracture energy',#17093,$,$);
+#17095=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_31_90','Fracture toughness',#17093,$,$);
+#17096=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_32','Friction',#17074,$,$);
+#17097=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_36','Hardness',#17074,$,$);
+#17098=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_41','Impact energy absorption',#17074,$,$);
+#17099=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48','Loading',#17074,$,$);
+#17100=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_23','Dead loading',#17099,$,$);
+#17101=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_38','Horizontal live loading',#17099,$,$);
+#17102=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_42','Impact loading',#17099,$,$);
+#17103=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_48','Live loading',#17099,$,$);
+#17104=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_54','Moving loading',#17099,$,$);
+#17105=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_64','Penetration',#17099,$,$);
+#17106=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_76','Seismic loading',#17099,$,$);
+#17107=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_78','Settlement',#17099,$,$);
+#17108=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_81','Snow loading',#17099,$,$);
+#17109=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_84','Static loading',#17099,$,$);
+#17110=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_89','Thermal loading',#17099,$,$);
+#17111=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_92','Uniform distributed loading',#17099,$,$);
+#17112=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_48_96','Wind loading',#17099,$,$);
+#17113=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_51','Malleability',#17074,$,$);
+#17114=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53','Mechanical strength',#17074,$,$);
+#17115=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_02','Adhesion strength',#17114,$,$);
+#17116=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_06','Bending strength',#17114,$,$);
+#17117=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_08','Bond strength',#17114,$,$);
+#17118=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_09','Breaking strength',#17114,$,$);
+#17119=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_10','Bursting strength',#17114,$,$);
+#17120=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_17','Compressive strength',#17114,$,$);
+#17121=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_29','Fatigue strength',#17114,$,$);
+#17122=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_31','Fibre strength',#17114,$,$);
+#17123=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_32','Flexural strength',#17114,$,$);
+#17124=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_42','Impact strength',#17114,$,$);
+#17125=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_63','Peel strength',#17114,$,$);
+#17126=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_72','Release strength',#17114,$,$);
+#17127=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_80','Shear strength',#17114,$,$);
+#17128=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_88','Tear strength',#17114,$,$);
+#17129=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_90','Tensile strength',#17114,$,$);
+#17130=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_93','Ultimate strength',#17114,$,$);
+#17131=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_53_99','Yield strength',#17114,$,$);
+#17132=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_66','Proportional limit',#17074,$,$);
+#17133=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71','Resistance',#17074,$,$);
+#17134=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_01','Abrasion resistance',#17133,$,$);
+#17135=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_15','Compressive resistance',#17133,$,$);
+#17136=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_17','Cracking resistance',#17133,$,$);
+#17137=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_19','Creep resistance',#17133,$,$);
+#17138=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_24','Drilling resistance',#17133,$,$);
+#17139=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_29','Fastener pull-out resistance',#17133,$,$);
+#17140=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_31','Fatigue resistance',#17133,$,$);
+#17141=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_67','Puncture resistance',#17133,$,$);
+#17142=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_89','Tearing resistance',#17133,$,$);
+#17143=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_96','Wind load resistance',#17133,$,$);
+#17144=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_71_98','Wind uplift resistance',#17133,$,$);
+#17145=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_73','Rigidity',#17074,$,$);
+#17146=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_77','Shrinkage',#17074,$,$);
+#17147=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_79','Stiffness',#17074,$,$);
+#17148=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_81','Strain',#17074,$,$);
+#17149=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_83','Stress',#17074,$,$);
+#17150=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_85','Surface tension',#17074,$,$);
+#17151=IFCCLASSIFICATIONREFERENCE($,'PC_35_51_94','Vibration',#17074,$,$);
+#17152=IFCCLASSIFICATIONREFERENCE($,'PC_35_60','Optical characteristics',#16887,$,$);
+#17153=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_34','Gloss',#17152,$,$);
+#17154=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_50','Matte',#17152,$,$);
+#17155=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_59','Opacity',#17152,$,$);
+#17156=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_59_18','Covering power',#17155,$,$);
+#17157=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_78','Sheen',#17152,$,$);
+#17158=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_80','Shine',#17152,$,$);
+#17159=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_89','Translucency',#17152,$,$);
+#17160=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_91','Transparency',#17152,$,$);
+#17161=IFCCLASSIFICATIONREFERENCE($,'PC_35_60_94','Visibility',#17152,$,$);
+#17162=IFCCLASSIFICATIONREFERENCE($,'PC_35_63','Physical characteristics',#16887,$,$);
+#17163=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_01','Absorbency',#17162,$,$);
+#17164=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_12','Capacity',#17162,$,$);
+#17165=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_18','Compatibility',#17162,$,$);
+#17166=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_20','Decay',#17162,$,$);
+#17167=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_21','Delamination rate',#17162,$,$);
+#17168=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_23','Density',#17162,$,$);
+#17169=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_23_10','Bulk density',#17168,$,$);
+#17170=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_23_30','Fluid density',#17168,$,$);
+#17171=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_23_72','Relative density',#17168,$,$);
+#17172=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_25','Dryness',#17162,$,$);
+#17173=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_28','Exchange effectiveness',#17162,$,$);
+#17174=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_30','Flexibility',#17162,$,$);
+#17175=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32','Force characteristics',#17162,$,$);
+#17176=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_03','Applied forces',#17175,$,$);
+#17177=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_27','Electromotive force',#17175,$,$);
+#17178=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_32','Force per unit length',#17175,$,$);
+#17179=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_53','Moment of force',#17175,$,$);
+#17180=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_55','Moment of inertia',#17175,$,$);
+#17181=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_89','Thrust-to-mass ratio',#17175,$,$);
+#17182=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_32_91','Torque',#17175,$,$);
+#17183=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_34','Friction coefficient',#17162,$,$);
+#17184=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_39','Impact resistance',#17162,$,$);
+#17185=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40','Imperviousness characteristics',#17162,$,$);
+#17186=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_01','Airtightness',#17185,$,$);
+#17187=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_03','Air infiltration',#17185,$,$);
+#17188=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_05','Air leakage',#17185,$,$);
+#17189=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_43','Ingress protection (IP) rating',#17185,$,$);
+#17190=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_96','Watertightness',#17185,$,$);
+#17191=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_40_98','Weathertightness',#17185,$,$);
+#17192=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_41','Indentation resistance',#17162,$,$);
+#17193=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_42','Instability',#17162,$,$);
+#17194=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_43','Intensity',#17162,$,$);
+#17195=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50','Magnetic characteristics',#17162,$,$);
+#17196=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_46','Magnetic field strength',#17195,$,$);
+#17197=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_48','Magnetic flux',#17195,$,$);
+#17198=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_50','Magnetic induction',#17195,$,$);
+#17199=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_52','Magnetic permeance',#17195,$,$);
+#17200=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_54','Magnetic potential difference',#17195,$,$);
+#17201=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_56','Magnetic reluctance',#17195,$,$);
+#17202=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_58','Magnetic vector potential',#17195,$,$);
+#17203=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_60','Magnetomotive force',#17195,$,$);
+#17204=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_50_62','Mutual inductance',#17195,$,$);
+#17205=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_52','Mechanical impedance',#17162,$,$);
+#17206=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_54','Momentum',#17162,$,$);
+#17207=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_54_03','Angular momentum',#17206,$,$);
+#17208=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_54_04','Angular momentum density',#17206,$,$);
+#17209=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_54_53','Momentum density',#17206,$,$);
+#17210=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_54_73','Rotational inertia',#17206,$,$);
+#17211=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_64','Polarity',#17162,$,$);
+#17212=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_66','Porosity',#17162,$,$);
+#17213=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68','Pressure',#17162,$,$);
+#17214=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_00','Absolute pressure',#17213,$,$);
+#17215=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_01','Air pressure',#17213,$,$);
+#17216=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_01_20','Cyclic static air pressure',#17215,$,$);
+#17217=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_01_93','Uniform static air pressure',#17215,$,$);
+#17218=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_03','Ambient pressure',#17213,$,$);
+#17219=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_04','Applied pressure',#17213,$,$);
+#17220=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_05','Atmospheric pressure',#17213,$,$);
+#17221=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_11','Calibrated pressure',#17213,$,$);
+#17222=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_23','Design pressure',#17213,$,$);
+#17223=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_33','Gauge pressure',#17213,$,$);
+#17224=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_47','Leakage under pressure',#17213,$,$);
+#17225=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_63','Phase transition pressure',#17213,$,$);
+#17226=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_66','Pressure drop',#17213,$,$);
+#17227=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_72','Residual pressure',#17213,$,$);
+#17228=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_83','Static pressure',#17213,$,$);
+#17229=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_85','Static pressure differential',#17213,$,$);
+#17230=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_94','Vacuum pressure',#17213,$,$);
+#17231=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_95','Vapour pressure',#17213,$,$);
+#17232=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_68_97','Wind pressure',#17213,$,$);
+#17233=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_82','Stability',#17162,$,$);
+#17234=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_84','Structure',#17162,$,$);
+#17235=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_94','Viscosity',#17162,$,$);
+#17236=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_94_25','Dynamic viscosity',#17235,$,$);
+#17237=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_94_31','Fluid viscosity',#17235,$,$);
+#17238=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_94_45','Kinematic viscosity',#17235,$,$);
+#17239=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_96','Wear coefficient',#17162,$,$);
+#17240=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_97','Wear rate',#17162,$,$);
+#17241=IFCCLASSIFICATIONREFERENCE($,'PC_35_63_98','Wetness',#17162,$,$);
+#17242=IFCCLASSIFICATIONREFERENCE($,'PC_35_65','Physico-chemical characteristics',#16887,$,$);
+#17243=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_13','Colour fastness',#17242,$,$);
+#17244=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_15','Composition',#17242,$,$);
+#17245=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_19','Corrosion resistance',#17242,$,$);
+#17246=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_21','Decay resistance',#17242,$,$);
+#17247=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_23','Degradation resistance',#17242,$,$);
+#17248=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_24','Discolouration',#17242,$,$);
+#17249=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_25','Durability',#17242,$,$);
+#17250=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_25_51','Maintenance durability',#17249,$,$);
+#17251=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_25_53','Mechanical durability',#17249,$,$);
+#17252=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_28','Evaporation rate',#17242,$,$);
+#17253=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_29','Fade resistance',#17242,$,$);
+#17254=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_33','Galvanic corrosion potential',#17242,$,$);
+#17255=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36','Hazardous materials characteristics',#17242,$,$);
+#17256=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_05','Asbestos content',#17255,$,$);
+#17257=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_16','Chlorofluorocarbon (CFC) emissions',#17255,$,$);
+#17258=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_26','Ecological toxicity',#17255,$,$);
+#17259=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_31','Formaldehyde content',#17255,$,$);
+#17260=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_39','Hydrochlorofluorocarbon (HCFC) emissions',#17255,$,$);
+#17261=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_48','Lead content',#17255,$,$);
+#17262=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_59','Ozone-depleting substances (ODS) content',#17255,$,$);
+#17263=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_64','Persistent, bioaccumulative and toxic pollutants (PBTs) content',#17255,$,$);
+#17264=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_70','Radioactive material content',#17255,$,$);
+#17265=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_90','Toxic content',#17255,$,$);
+#17266=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_36_95','Volatile organic compounds (VOC) content',#17255,$,$);
+#17267=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_37','Hydrophilicity',#17242,$,$);
+#17268=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_38','Hydrophobicity',#17242,$,$);
+#17269=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_39','Hygroscopicity',#17242,$,$);
+#17270=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_40','Infrared resistance',#17242,$,$);
+#17271=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_41','Inorganic',#17242,$,$);
+#17272=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_42','Insolubility',#17242,$,$);
+#17273=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_48','Lubricity',#17242,$,$);
+#17274=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_53','Moisture content',#17242,$,$);
+#17275=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_53_30','Final moisture content',#17274,$,$);
+#17276=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_53_41','Initial moisture content',#17274,$,$);
+#17277=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54','Moisture resistance',#17242,$,$);
+#17278=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_18','Condensation resistance',#17277,$,$);
+#17279=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_30','Freeze-thaw resistance',#17277,$,$);
+#17280=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_32','Frost resistance',#17277,$,$);
+#17281=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_52','Moisture absorption resistance',#17277,$,$);
+#17282=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_54','Moisture vapour transmission rate (MVTR)',#17277,$,$);
+#17283=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_72','Rising damp resistance',#17277,$,$);
+#17284=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_94','Vapour resistance',#17277,$,$);
+#17285=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_95','Water absorption resistance',#17277,$,$);
+#17286=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_96','Water imperviousness resistance',#17277,$,$);
+#17287=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_97','Water penetration',#17277,$,$);
+#17288=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_54_98','Water permeability resistance',#17277,$,$);
+#17289=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_59','Organic',#17242,$,$);
+#17290=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62','Permeability',#17242,$,$);
+#17291=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_33','Gas permeability',#17290,$,$);
+#17292=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_51','Magnetic permeability',#17290,$,$);
+#17293=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_65','Pollutant permeability',#17290,$,$);
+#17294=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_82','Soil permeability',#17290,$,$);
+#17295=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_94','Vapour permeability',#17290,$,$);
+#17296=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_62_95','Velocity permeability',#17290,$,$);
+#17297=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_64','Perviousness',#17242,$,$);
+#17298=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65','Physico-chemical damage',#17242,$,$);
+#17299=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_06','Ballistic damage',#17298,$,$);
+#17300=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_08','Blast damage',#17298,$,$);
+#17301=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_15','Chemical damage',#17298,$,$);
+#17302=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_17','Collapse',#17298,$,$);
+#17303=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_18','Corrosion',#17298,$,$);
+#17304=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28','Erosion damage',#17298,$,$);
+#17305=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_17','Coastal erosion',#17304,$,$);
+#17306=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_48','Livestock erosion',#17304,$,$);
+#17307=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_56','Natural erosion',#17304,$,$);
+#17308=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_72','Riverbank erosion',#17304,$,$);
+#17309=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_94','Vehicle erosion',#17304,$,$);
+#17310=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_28_95','Visitor erosion',#17304,$,$);
+#17311=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_30','Fire damage',#17298,$,$);
+#17312=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_32','Frost damage',#17298,$,$);
+#17313=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_37','Heat damage',#17298,$,$);
+#17314=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_52','Mechanical abrasion damage',#17298,$,$);
+#17315=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_70','Radiation damage',#17298,$,$);
+#17316=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_79','Solar ultraviolet (UV) damage',#17298,$,$);
+#17317=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_85','Subsidence',#17298,$,$);
+#17318=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_89','Theft',#17298,$,$);
+#17319=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_94','Vandalism',#17298,$,$);
+#17320=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_96','Water egress damage',#17298,$,$);
+#17321=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_65_97','Water ingress damage',#17298,$,$);
+#17322=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_66','Photosensitivity',#17242,$,$);
+#17323=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_70','Radioactivity',#17242,$,$);
+#17324=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_79','Solar ultraviolet (UV) resistance',#17242,$,$);
+#17325=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_85','Stain resistance',#17242,$,$);
+#17326=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_89','Toxicity',#17242,$,$);
+#17327=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_96','Water absorption',#17242,$,$);
+#17328=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_96_85','Surface water absorption',#17327,$,$);
+#17329=IFCCLASSIFICATIONREFERENCE($,'PC_35_65_97','Water repellence',#17242,$,$);
+#17330=IFCCLASSIFICATIONREFERENCE($,'PC_35_85','Sustainability characteristics',#16887,$,$);
+#17331=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_07','Biodegradability',#17330,$,$);
+#17332=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10','Building and material reuse',#17330,$,$);
+#17333=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_26','Existing floors reuse',#17332,$,$);
+#17334=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_27','Existing roof reuse',#17332,$,$);
+#17335=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_28','Existing walls reuse',#17332,$,$);
+#17336=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_71','Refurbished materials content',#17332,$,$);
+#17337=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_73','Reused materials content',#17332,$,$);
+#17338=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_10_76','Salvaged materials content',#17332,$,$);
+#17339=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_12','Carbon-neutral',#17330,$,$);
+#17340=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_26','Environmental footprint of supply chain',#17330,$,$);
+#17341=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_27','Environmental stewardship',#17330,$,$);
+#17342=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_28','Extraction method',#17330,$,$);
+#17343=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_36','Harvest method',#17330,$,$);
+#17344=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47','Life cycle analysis (LCA)',#17330,$,$);
+#17345=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47_27','Environmental impact',#17344,$,$);
+#17346=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47_35','Greenhouse gas emissions',#17344,$,$);
+#17347=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47_47','Life cycle cost analysis',#17344,$,$);
+#17348=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47_48','Life cycle impact assessment (LCIA)',#17344,$,$);
+#17349=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_47_49','Life cycle inventory',#17344,$,$);
+#17350=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_49','Low carbon',#17330,$,$);
+#17351=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_57','Non-renewable materials content',#17330,$,$);
+#17352=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_70','Rapidly renewable materials content',#17330,$,$);
+#17353=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_71','Recyclability',#17330,$,$);
+#17354=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_72','Recycled content',#17330,$,$);
+#17355=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_72_64','Post-consumer recycled content',#17354,$,$);
+#17356=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_72_66','Post-industrial recycled content',#17354,$,$);
+#17357=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_72_68','Pre-consumer recycled content',#17354,$,$);
+#17358=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_72_72','Recycled content by mass',#17354,$,$);
+#17359=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_73','Relocatability',#17330,$,$);
+#17360=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_74','Renewability',#17330,$,$);
+#17361=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_75','Reusability',#17330,$,$);
+#17362=IFCCLASSIFICATIONREFERENCE($,'PC_35_85_99','Zero-carbon',#17330,$,$);
+#17363=IFCCLASSIFICATIONREFERENCE($,'PC_35_88','Temperature characteristics',#16887,$,$);
+#17364=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_01','Absolute temperature',#17363,$,$);
+#17365=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_03','Ambient temperature',#17363,$,$);
+#17366=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_03_03','Ambient outdoor temperature',#17365,$,$);
+#17367=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_09','Brittleness temperature',#17363,$,$);
+#17368=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_15','Cold',#17363,$,$);
+#17369=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_17','Cool',#17363,$,$);
+#17370=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_22','Delta T',#17363,$,$);
+#17371=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_24','Design temperature',#17363,$,$);
+#17372=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_36','Heat index',#17363,$,$);
+#17373=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_38','Hot',#17363,$,$);
+#17374=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63','Phase temperature',#17363,$,$);
+#17375=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63_20','Curie temperature',#17374,$,$);
+#17376=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63_34','Glass-liquid transition temperature',#17374,$,$);
+#17377=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63_56','N\X2\00E9\X0\el temperature',#17374,$,$);
+#17378=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63_63','Phase transition temperature',#17374,$,$);
+#17379=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_63_90','Triple-point temperature',#17374,$,$);
+#17380=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_73','Room temperature',#17363,$,$);
+#17381=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_85','Temperate',#17363,$,$);
+#17382=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_86','Temperature differential',#17363,$,$);
+#17383=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_87','Temperature interval',#17363,$,$);
+#17384=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88','Temperature point',#17363,$,$);
+#17385=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_08','Boiling point temperature',#17384,$,$);
+#17386=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_18','Cooling setpoint',#17384,$,$);
+#17387=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_22','Dew point temperature',#17384,$,$);
+#17388=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_30','Flashpoint temperature',#17384,$,$);
+#17389=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_32','Freezing point temperature',#17384,$,$);
+#17390=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_37','Heating setpoint',#17384,$,$);
+#17391=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_50','Maximum temperature',#17384,$,$);
+#17392=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_52','Melting point temperature',#17384,$,$);
+#17393=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_88_54','Minimum temperature',#17384,$,$);
+#17394=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_89','Temperature range',#17363,$,$);
+#17395=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_89_01','Acceptable temperature range',#17394,$,$);
+#17396=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_89_20','Cycling temperature range',#17394,$,$);
+#17397=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_89_51','Mean daily temperature range',#17394,$,$);
+#17398=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_89_78','Service temperature range',#17394,$,$);
+#17399=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_90','Temperature rise',#17363,$,$);
+#17400=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91','Temperature type',#17363,$,$);
+#17401=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_17','Condensation temperature',#17400,$,$);
+#17402=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_22','Deflection temperature',#17400,$,$);
+#17403=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_35','Ground temperature',#17400,$,$);
+#17404=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_42','Inside air temperature',#17400,$,$);
+#17405=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_52','Mean temperature',#17400,$,$);
+#17406=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_59','Outside air temperature',#17400,$,$);
+#17407=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_81','Summer dry bulb temperature',#17400,$,$);
+#17408=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_82','Summer wet bulb temperature',#17400,$,$);
+#17409=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_84','Supply air temperature',#17400,$,$);
+#17410=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_86','Surface temperature',#17400,$,$);
+#17411=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_89','Thermal radiation',#17400,$,$);
+#17412=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_96','Wet bulb temperature',#17400,$,$);
+#17413=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_91_98','Winter dry bulb temperature',#17400,$,$);
+#17414=IFCCLASSIFICATIONREFERENCE($,'PC_35_88_96','Warm',#17363,$,$);
+#17415=IFCCLASSIFICATIONREFERENCE($,'PC_35_90','Thermal characteristics',#16887,$,$);
+#17416=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88','Thermal performance',#17415,$,$);
+#17417=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_15','Thermal conductance',#17416,$,$);
+#17418=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_17','Thermal conductivity',#17416,$,$);
+#17419=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_23','Thermal diffusivity',#17416,$,$);
+#17420=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_26','Thermal emission',#17416,$,$);
+#17421=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_28','Thermal expansion',#17416,$,$);
+#17422=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_42','Thermal insulance',#17416,$,$);
+#17423=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_71','Thermal resistance',#17416,$,$);
+#17424=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_73','Thermal resistivity',#17416,$,$);
+#17425=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_80','Thermal shock resistance',#17416,$,$);
+#17426=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_88_90','Thermal transmittance',#17416,$,$);
+#17427=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90','Thermal properties',#17415,$,$);
+#17428=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_08','Boiling point',#17427,$,$);
+#17429=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_18','Convection',#17427,$,$);
+#17430=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_29','Flashpoint',#17427,$,$);
+#17431=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_31','Freezing point',#17427,$,$);
+#17432=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_36','Heat gain',#17427,$,$);
+#17433=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_38','Heat loss',#17427,$,$);
+#17434=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_42','Internal thermal energy',#17427,$,$);
+#17435=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_52','Melting point',#17427,$,$);
+#17436=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_70','Radiation',#17427,$,$);
+#17437=IFCCLASSIFICATIONREFERENCE($,'PC_35_90_90_82','Specific heat',#17427,$,$);
+#17438=IFCCLASSIFICATIONREFERENCE($,'PC_50','Installation and maintenance attributes',#14,$,$);
+#17439=IFCCLASSIFICATIONREFERENCE($,'PC_50_10','Building fabric systems installation and maintenance attributes',#17438,$,$);
+#17440=IFCCLASSIFICATIONREFERENCE($,'PC_50_10_30','Fastening attributes',#17439,$,$);
+#17441=IFCCLASSIFICATIONREFERENCE($,'PC_50_10_30_29','Fastener type',#17440,$,$);
+#17442=IFCCLASSIFICATIONREFERENCE($,'PC_50_10_30_30','Fastening method',#17440,$,$);
+#17443=IFCCLASSIFICATIONREFERENCE($,'PC_50_15','Communications systems installation and maintenance attributes',#17438,$,$);
+#17444=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18','Communications cable attributes',#17443,$,$);
+#17445=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_12','Communications cable category',#17444,$,$);
+#17446=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_16','Communications cable classification',#17444,$,$);
+#17447=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_48','Communications cable listing',#17444,$,$);
+#17448=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_51','Communications cable material',#17444,$,$);
+#17449=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_71','Communications cable rating',#17444,$,$);
+#17450=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_88','Communications cable terminations',#17444,$,$);
+#17451=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_18_91','Communications cable type',#17444,$,$);
+#17452=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_30','Fibre attributes',#17443,$,$);
+#17453=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_30_18','Fibre count',#17452,$,$);
+#17454=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_30_91','Fibre type',#17452,$,$);
+#17455=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_79','Shielding',#17443,$,$);
+#17456=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_81','Signal attributes',#17443,$,$);
+#17457=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_81_80','Signal set choice',#17456,$,$);
+#17458=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_81_82','Signal-to-noise ratio',#17456,$,$);
+#17459=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_81_91','Signal type',#17456,$,$);
+#17460=IFCCLASSIFICATIONREFERENCE($,'PC_50_15_90','Transmission performance rating',#17443,$,$);
+#17461=IFCCLASSIFICATIONREFERENCE($,'PC_50_25','Electrical systems installation and maintenance attributes',#17438,$,$);
+#17462=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20','Electrical circuit attributes',#17461,$,$);
+#17463=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_12','Circuit load name',#17462,$,$);
+#17464=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_14','Circuit name',#17462,$,$);
+#17465=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_16','Circuit number',#17462,$,$);
+#17466=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_22','Dedicated circuit',#17462,$,$);
+#17467=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_55','Number of earth conductors',#17462,$,$);
+#17468=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_56','Number of live conductors',#17462,$,$);
+#17469=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_57','Number of neutral conductors',#17462,$,$);
+#17470=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_58','Number of runs',#17462,$,$);
+#17471=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_97','Wire size',#17462,$,$);
+#17472=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_20_98','Wire type',#17462,$,$);
+#17473=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_22','Electrical current attributes',#17461,$,$);
+#17474=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_22_19','Current draw',#17473,$,$);
+#17475=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_22_27','Electrical current density',#17473,$,$);
+#17476=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_22_89','True current',#17473,$,$);
+#17477=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_22_90','True current and phase',#17473,$,$);
+#17478=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_24','Electrical load attributes',#17461,$,$);
+#17479=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_24_06','Balanced load',#17478,$,$);
+#17480=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_24_48','Load classification',#17478,$,$);
+#17481=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_24_90','True load',#17478,$,$);
+#17482=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26','Electrical panel attributes',#17461,$,$);
+#17483=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_04','Apparent load and phase',#17482,$,$);
+#17484=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_51','Main ratings',#17482,$,$);
+#17485=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_53','Maximum number of pole breakers',#17482,$,$);
+#17486=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_57','Number of poles',#17482,$,$);
+#17487=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_61','Panel name',#17482,$,$);
+#17488=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_26_62','Panel number',#17482,$,$);
+#17489=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28','Estimated and observed power requirements',#17461,$,$);
+#17490=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_33','General electrical total estimated power requirements',#17489,$,$);
+#17491=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_35','General electrical total observed power requirements',#17489,$,$);
+#17492=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_36','Heating, ventilation and air conditioning (HVAC) total estimated power requirements',#17489,$,$);
+#17493=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_38','Heating, ventilation and air conditioning (HVAC) total observed power requirements',#17489,$,$);
+#17494=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_46','Lighting total estimated power requirements',#17489,$,$);
+#17495=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_48','Lighting total observed power requirements',#17489,$,$);
+#17496=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_64','Power total estimated power requirements',#17489,$,$);
+#17497=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_66','Power total observed power requirements',#17489,$,$);
+#17498=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_88','Total estimated power requirements',#17489,$,$);
+#17499=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_28_90','Total observed power requirements',#17489,$,$);
+#17500=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_83','Solid state construction',#17461,$,$);
+#17501=IFCCLASSIFICATIONREFERENCE($,'PC_50_25_86','Surge content',#17461,$,$);
+#17502=IFCCLASSIFICATIONREFERENCE($,'PC_50_30','Fire protection systems installation and maintenance attributes',#17438,$,$);
+#17503=IFCCLASSIFICATIONREFERENCE($,'PC_50_30_30','Fire protection class',#17502,$,$);
+#17504=IFCCLASSIFICATIONREFERENCE($,'PC_50_30_84','Sprinkler type',#17502,$,$);
+#17505=IFCCLASSIFICATIONREFERENCE($,'PC_50_34','General installation and maintenance attributes',#17438,$,$);
+#17506=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_01','Accuracy',#17505,$,$);
+#17507=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_03','Ambient temperature during installation',#17505,$,$);
+#17508=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_05','Application rate',#17505,$,$);
+#17509=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_05_01','Actual application rate',#17508,$,$);
+#17510=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_05_89','Theoretical application rate',#17508,$,$);
+#17511=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_12','Cleaning method',#17505,$,$);
+#17512=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_14','Components',#17505,$,$);
+#17513=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_15','Connections',#17505,$,$);
+#17514=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_16','Constituents',#17505,$,$);
+#17515=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_17','Controls',#17505,$,$);
+#17516=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_18','Coverage',#17505,$,$);
+#17517=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_18_01','Actual coverage',#17516,$,$);
+#17518=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_18_04','Area covered',#17516,$,$);
+#17519=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_18_18','Coverage rate',#17516,$,$);
+#17520=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_18_89','Theoretical coverage',#17516,$,$);
+#17521=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_20','Cure time',#17505,$,$);
+#17522=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_23','Design flow rate',#17505,$,$);
+#17523=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_27','Equipment type',#17505,$,$);
+#17524=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_30','Flow attributes',#17505,$,$);
+#17525=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_31_15','Flow configuration',#1,$,$);
+#17526=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_31_17','Flow conversion method',#1,$,$);
+#17527=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_31_23','Flow direction',#1,$,$);
+#17528=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_31_29','Flow factor',#1,$,$);
+#17529=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_32','Fuel efficiency',#17505,$,$);
+#17530=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_39','Inputs',#17505,$,$);
+#17531=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_40','Installation configuration',#17505,$,$);
+#17532=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_41','Installation method',#17505,$,$);
+#17533=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_41_01','Adhesive method',#17532,$,$);
+#17534=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_41_07','Ballasted method',#17532,$,$);
+#17535=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_41_47','Loose-laid method',#17532,$,$);
+#17536=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_41_52','Mechanically attached method',#17532,$,$);
+#17537=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_42','Installer attributes',#17505,$,$);
+#17538=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_42_28','Installer experience',#17537,$,$);
+#17539=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_42_69','Installer qualifications',#17537,$,$);
+#17540=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_43','Instrumentation',#17505,$,$);
+#17541=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_44','Joining method',#17505,$,$);
+#17542=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_44_44','Joint type',#17541,$,$);
+#17543=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_44_79','Seam type',#17541,$,$);
+#17544=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_47','Loss method',#17505,$,$);
+#17545=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_52','Mode',#17505,$,$);
+#17546=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_54','Mounting method',#17505,$,$);
+#17547=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_57','Number of elements',#17505,$,$);
+#17548=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_59','Outputs',#17505,$,$);
+#17549=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_61','Parts',#17505,$,$);
+#17550=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_66','Pot life',#17505,$,$);
+#17551=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_72','Recoat time',#17505,$,$);
+#17552=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_74','Sensor attributes',#17505,$,$);
+#17553=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_74_23','Sensor detail text',#17552,$,$);
+#17554=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_74_47','Sensor location',#17552,$,$);
+#17555=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_74_91','Sensor type',#17552,$,$);
+#17556=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_74_99','Sensor zone',#17552,$,$);
+#17557=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_75','Service attributes',#17505,$,$);
+#17558=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_75_15','Service connections',#17557,$,$);
+#17559=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_75_91','Service type',#17557,$,$);
+#17560=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_76','Serviceability',#17505,$,$);
+#17561=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_78','Setting time',#17505,$,$);
+#17562=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_80','Shelf life',#17505,$,$);
+#17563=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_82','Suitability',#17505,$,$);
+#17564=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_82_15','Suitability for continuous immersion',#17563,$,$);
+#17565=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_82_28','Suitability for exterior exposure',#17563,$,$);
+#17566=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_82_35','Suitability for ground contact',#17563,$,$);
+#17567=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_82_51','Suitability for marine use',#17563,$,$);
+#17568=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_84','Surface preparation',#17505,$,$);
+#17569=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_86','System attributes',#17505,$,$);
+#17570=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_86_27','System equipment',#17569,$,$);
+#17571=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_86_47','System limitations',#17569,$,$);
+#17572=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_86_56','System name',#17569,$,$);
+#17573=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_86_91','System type',#17569,$,$);
+#17574=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_87','Tack-free time',#17505,$,$);
+#17575=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_95','Waste produced in use',#17505,$,$);
+#17576=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_96','Water efficiency',#17505,$,$);
+#17577=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_97','Weatherability',#17505,$,$);
+#17578=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_98','Workability',#17505,$,$);
+#17579=IFCCLASSIFICATIONREFERENCE($,'PC_50_34_99','Zone',#17505,$,$);
+#17580=IFCCLASSIFICATIONREFERENCE($,'PC_50_37','Heating, ventilation and air conditioning (HVAC) systems installation and maintenance attributes',#17438,$,$);
+#17581=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_02','Air filter minimum efficiency reporting value (MERV) rating',#17580,$,$);
+#17582=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_03','Air volume calculation type',#17580,$,$);
+#17583=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_16','Coil bypass factor',#17580,$,$);
+#17584=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33','Heating, ventilation and air conditioning (HVAC) systems airflow',#17580,$,$);
+#17585=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_01','Actual exhaust airflow',#17584,$,$);
+#17586=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_02','Actual supply airflow',#17584,$,$);
+#17587=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_11','Calculated supply airflow',#17584,$,$);
+#17588=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_72','Return airflow',#17584,$,$);
+#17589=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_81','Specified exhaust airflow',#17584,$,$);
+#17590=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_33_83','Specified supply airflow',#17584,$,$);
+#17591=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34','Heating, ventilation and air conditioning (HVAC) systems calculated results',#17580,$,$);
+#17592=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_50','Maximum cooling capacity',#17591,$,$);
+#17593=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_60','Peak cooling airflow',#17591,$,$);
+#17594=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_61','Peak cooling month and hour',#17591,$,$);
+#17595=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_63','Peak cooling sensible load',#17591,$,$);
+#17596=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_65','Peak cooling total load',#17591,$,$);
+#17597=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_67','Peak heating airflow',#17591,$,$);
+#17598=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_34_69','Peak heating load',#17591,$,$);
+#17599=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35','Heating, ventilation and air conditioning (HVAC) systems checksums',#17580,$,$);
+#17600=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_12','Cooling area/ load',#17599,$,$);
+#17601=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_14','Cooling flow density',#17599,$,$);
+#17602=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_16','Cooling flow/ load',#17599,$,$);
+#17603=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_18','Cooling load density',#17599,$,$);
+#17604=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_36','Heating flow density',#17599,$,$);
+#17605=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_35_38','Heating load density',#17599,$,$);
+#17606=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36','Heating, ventilation and air conditioning (HVAC) systems conditioning',#17580,$,$);
+#17607=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_15','Conditioning unit identifier',#17606,$,$);
+#17608=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_17','Cooled condition',#17606,$,$);
+#17609=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_36','Heated and cooled condition',#17606,$,$);
+#17610=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_37','Heated condition',#17606,$,$);
+#17611=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_56','Naturally vented condition',#17606,$,$);
+#17612=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_93','Unconditioned',#17606,$,$);
+#17613=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_36_95','Vented condition',#17606,$,$);
+#17614=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_37','Heating, ventilation and air conditioning (HVAC) systems controls provision',#17580,$,$);
+#17615=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_37_29','Fan control provision',#17614,$,$);
+#17616=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_37_68','Pump control provision',#17614,$,$);
+#17617=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_37_94','Valve control provision',#17614,$,$);
+#17618=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_38','Heating, ventilation and air conditioning (HVAC) systems efficiency',#17580,$,$);
+#17619=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39','Heating, ventilation and air conditioning (HVAC) systems loads',#17580,$,$);
+#17620=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_01','Actual heating systems load',#17619,$,$);
+#17621=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_02','Actual ventilation, and air conditioning systems load',#17619,$,$);
+#17622=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_12','Calculated cooling load',#17619,$,$);
+#17623=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_13','Calculated heating load',#17619,$,$);
+#17624=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_21','Design cooling load',#17619,$,$);
+#17625=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_22','Design heating load',#17619,$,$);
+#17626=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_23','Design heating systems load per area',#17619,$,$);
+#17627=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_25','Design ventilation, and air conditioning systems load per area',#17619,$,$);
+#17628=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_39_99','Zone cooling load',#17619,$,$);
+#17629=IFCCLASSIFICATIONREFERENCE($,'PC_50_37_40','Heating, ventilation and air conditioning (HVAC) system type',#17580,$,$);
+#17630=IFCCLASSIFICATIONREFERENCE($,'PC_50_40','Integrated automation systems installation and maintenance attributes',#17438,$,$);
+#17631=IFCCLASSIFICATIONREFERENCE($,'PC_50_40_24','Domain address',#17630,$,$);
+#17632=IFCCLASSIFICATIONREFERENCE($,'PC_50_40_42','Integrated automation systems control type',#17630,$,$);
+#17633=IFCCLASSIFICATIONREFERENCE($,'PC_50_40_57','Node identifier',#17630,$,$);
+#17634=IFCCLASSIFICATIONREFERENCE($,'PC_50_40_84','Standard network variable type (SNVT)',#17630,$,$);
+#17635=IFCCLASSIFICATIONREFERENCE($,'PC_50_40_86','Subnet address',#17630,$,$);
+#17636=IFCCLASSIFICATIONREFERENCE($,'PC_50_48','Lighting systems installation and maintenance attributes',#17438,$,$);
+#17637=IFCCLASSIFICATIONREFERENCE($,'PC_50_48_42','Illumination levels',#17636,$,$);
+#17638=IFCCLASSIFICATIONREFERENCE($,'PC_50_48_46','Light source',#17636,$,$);
+#17639=IFCCLASSIFICATIONREFERENCE($,'PC_50_48_48','Lighting calculation work plane',#17636,$,$);
+#17640=IFCCLASSIFICATIONREFERENCE($,'PC_50_48_49','Lighting control type',#17636,$,$);
+#17641=IFCCLASSIFICATIONREFERENCE($,'PC_50_48_73','Room cavity ratio',#17636,$,$);
+#17642=IFCCLASSIFICATIONREFERENCE($,'PC_50_64','Piped supply and disposal systems installation and maintenance attributes',#17438,$,$);
+#17643=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_30','Fixture units',#17642,$,$);
+#17644=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_64','Pipe volume',#17642,$,$);
+#17645=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_96','Water disposal systems installation and maintenance attributes',#17642,$,$);
+#17646=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_96_31','Foul wastewater systems installation and maintenance attributes',#17645,$,$);
+#17647=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_96_84','Storm water systems installation and maintenance attributes',#17645,$,$);
+#17648=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_96_96','Wastewater systems installation and maintenance attributes',#17645,$,$);
+#17649=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_97','Water supply systems installation and maintenance attributes',#17642,$,$);
+#17650=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_97_18','Cold water supply systems installation and maintenance attributes',#17649,$,$);
+#17651=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_97_37','Hot water supply systems installation and maintenance attributes',#17649,$,$);
+#17652=IFCCLASSIFICATIONREFERENCE($,'PC_50_64_97_96','Water firefighting systems installation and maintenance attributes',#17649,$,$);
+#17653=IFCCLASSIFICATIONREFERENCE($,'PC_50_75','Safety and security systems installation and maintenance attributes',#17438,$,$);
+#17654=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_03','Alarm type',#17653,$,$);
+#17655=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_06','Backup battery capacity',#17653,$,$);
+#17656=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_23','Display type',#17653,$,$);
+#17657=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_29','Fail-safe capability',#17653,$,$);
+#17658=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_64','Point locations',#17653,$,$);
+#17659=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_64_17','Control point location',#17658,$,$);
+#17660=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_64_48','Logic point locations',#17658,$,$);
+#17661=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_64_89','Termination point location',#17658,$,$);
+#17662=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_75','Safety and security audit trail',#17653,$,$);
+#17663=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_77','Safety and security report type',#17653,$,$);
+#17664=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_79','Safety and security reporting area',#17653,$,$);
+#17665=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_81','Safety and security status code',#17653,$,$);
+#17666=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_83','Safety and security system status',#17653,$,$);
+#17667=IFCCLASSIFICATIONREFERENCE($,'PC_50_75_89','Timestamp',#17653,$,$);
+#17668=IFCCLASSIFICATIONREFERENCE($,'PC_60','Operational attributes',#14,$,$);
+#17669=IFCCLASSIFICATIONREFERENCE($,'PC_60_25','Digital operation attributes',#17668,$,$);
+#17670=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_04','Artificially intelligent',#17669,$,$);
+#17671=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_15','Computer-assisted',#17669,$,$);
+#17672=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_17','Computer-generated',#17669,$,$);
+#17673=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_42','Interactive',#17669,$,$);
+#17674=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_50','Machine-readable',#17669,$,$);
+#17675=IFCCLASSIFICATIONREFERENCE($,'PC_60_25_81','Smart',#17669,$,$);
+#17676=IFCCLASSIFICATIONREFERENCE($,'PC_60_30','Functional capacity',#17668,$,$);
+#17677=IFCCLASSIFICATIONREFERENCE($,'PC_60_30_08','Breaking capacity',#17676,$,$);
+#17678=IFCCLASSIFICATIONREFERENCE($,'PC_60_30_20','Cyclic capacity',#17676,$,$);
+#17679=IFCCLASSIFICATIONREFERENCE($,'PC_60_30_50','Maximum capacity',#17676,$,$);
+#17680=IFCCLASSIFICATIONREFERENCE($,'PC_60_30_59','Operational capacity',#17676,$,$);
+#17681=IFCCLASSIFICATIONREFERENCE($,'PC_60_30_70','Rated capacity',#17676,$,$);
+#17682=IFCCLASSIFICATIONREFERENCE($,'PC_60_32','Functional efficiency',#17668,$,$);
+#17683=IFCCLASSIFICATIONREFERENCE($,'PC_60_52','Method of operation',#17668,$,$);
+#17684=IFCCLASSIFICATIONREFERENCE($,'PC_60_52_27','Electric operation',#17683,$,$);
+#17685=IFCCLASSIFICATIONREFERENCE($,'PC_60_52_39','Hydraulic operation',#17683,$,$);
+#17686=IFCCLASSIFICATIONREFERENCE($,'PC_60_52_50','Manual operation',#17683,$,$);
+#17687=IFCCLASSIFICATIONREFERENCE($,'PC_60_52_65','Pneumatic operation',#17683,$,$);
+#17688=IFCCLASSIFICATIONREFERENCE($,'PC_60_54','Movement attributes',#17668,$,$);
+#17689=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_02','Adaptable',#17688,$,$);
+#17690=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_04','Adjustable',#17688,$,$);
+#17691=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_15','Convertible',#17688,$,$);
+#17692=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_31','Folding',#17688,$,$);
+#17693=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_42','Inflatable',#17688,$,$);
+#17694=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_53','Moving',#17688,$,$);
+#17695=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_71','Retractable',#17688,$,$);
+#17696=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_73','Rotating',#17688,$,$);
+#17697=IFCCLASSIFICATIONREFERENCE($,'PC_60_54_80','Sliding',#17688,$,$);
+#17698=IFCCLASSIFICATIONREFERENCE($,'PC_90','Styles, periods and ages',#14,$,$);
+#17699=IFCCLASSIFICATIONREFERENCE($,'PC_90_30','Geological periods',#17698,$,$);
+#17700=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10','Cenozoic era',#17699,$,$);
+#17701=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_10','Quaternary period',#17700,$,$);
+#17702=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_10_10','Holocene epoch',#17701,$,$);
+#17703=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_10_20','Pleistocene epoch',#17701,$,$);
+#17704=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20','Tertiary period',#17700,$,$);
+#17705=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20_10','Pliocene epoch',#17704,$,$);
+#17706=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20_20','Miocene epoch',#17704,$,$);
+#17707=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20_30','Oligocene epoch',#17704,$,$);
+#17708=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20_40','Eocene epoch',#17704,$,$);
+#17709=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_10_20_50','Palaeocene epoch',#17704,$,$);
+#17710=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20','Mesozoic era',#17699,$,$);
+#17711=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_10','Cretaceous period',#17710,$,$);
+#17712=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_10_10','Late Cretaceous epoch',#17711,$,$);
+#17713=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_10_20','Early Cretaceous epoch',#17711,$,$);
+#17714=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_20','Jurassic period',#17710,$,$);
+#17715=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_20_10','Late Jurassic epoch',#17714,$,$);
+#17716=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_20_20','Middle Jurassic epoch',#17714,$,$);
+#17717=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_20_30','Early Jurassic epoch',#17714,$,$);
+#17718=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_30','Triassic period',#17710,$,$);
+#17719=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_30_10','Late Triassic epoch',#17718,$,$);
+#17720=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_30_20','Middle Triassic epoch',#17718,$,$);
+#17721=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_20_30_30','Early Triassic epoch',#17718,$,$);
+#17722=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30','Palaeozoic era',#17699,$,$);
+#17723=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_10','Permian period',#17722,$,$);
+#17724=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_20','Carboniferous period',#17722,$,$);
+#17725=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_30','Devonian period',#17722,$,$);
+#17726=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_40','Silurian period',#17722,$,$);
+#17727=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_50','Ordovician period',#17722,$,$);
+#17728=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_30_60','Cambrian period',#17722,$,$);
+#17729=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_40','Proterozoic era',#17699,$,$);
+#17730=IFCCLASSIFICATIONREFERENCE($,'PC_90_30_50','Archean era',#17699,$,$);
+#17731=IFCCLASSIFICATIONREFERENCE($,'PC_90_50','Movements',#17698,$,$);
+#17732=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_03','Art deco',#17731,$,$);
+#17733=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_05','Art nouveau',#17731,$,$);
+#17734=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_06','Baroque',#17731,$,$);
+#17735=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_08','Beaux-arts',#17731,$,$);
+#17736=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_09','Brutalist',#17731,$,$);
+#17737=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_15','Colonial',#17731,$,$);
+#17738=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_15_03','American colonial',#17737,$,$);
+#17739=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_15_25','Dutch colonial',#17737,$,$);
+#17740=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_15_31','French colonial',#17737,$,$);
+#17741=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_15_84','Spanish colonial',#17737,$,$);
+#17742=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_33','Glasgow style',#17731,$,$);
+#17743=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_35','Gothic revival',#17731,$,$);
+#17744=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_37','High-tech',#17731,$,$);
+#17745=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_41','International style',#17731,$,$);
+#17746=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_53','Modernist',#17731,$,$);
+#17747=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_56','Neoclassical',#17731,$,$);
+#17748=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_65','Post-modernist',#17731,$,$);
+#17749=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_72','Rococo',#17731,$,$);
+#17750=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_74','Romanesque',#17731,$,$);
+#17751=IFCCLASSIFICATIONREFERENCE($,'PC_90_50_94','Vernacular',#17731,$,$);
+#17752=IFCCLASSIFICATIONREFERENCE($,'PC_90_60','Periods',#17698,$,$);
+#17753=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_03','Anglo Saxon',#17752,$,$);
+#17754=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_13','Classical antiquity',#17752,$,$);
+#17755=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_15','Contemporary',#17752,$,$);
+#17756=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_33','Georgian',#17752,$,$);
+#17757=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_41','Industrial age',#17752,$,$);
+#17758=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_51','Medieval',#17752,$,$);
+#17759=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_51_26','Early Medieval',#17758,$,$);
+#17760=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_51_34','Gothic',#17758,$,$);
+#17761=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_51_46','Late Medieval',#17758,$,$);
+#17762=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_51_63','Perpendicular style',#17758,$,$);
+#17763=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_53','Modern',#17752,$,$);
+#17764=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66','Prehistoric',#17752,$,$);
+#17765=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66_09','Bronze age',#17764,$,$);
+#17766=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66_42','Iron age',#17764,$,$);
+#17767=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66_52','Mesolithic',#17764,$,$);
+#17768=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66_56','Neolithic',#17764,$,$);
+#17769=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_66_61','Palaeolithic',#17764,$,$);
+#17770=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_71','Renaissance',#17752,$,$);
+#17771=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_74','Roman',#17752,$,$);
+#17772=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_91','Tudor',#17752,$,$);
+#17773=IFCCLASSIFICATIONREFERENCE($,'PC_90_60_95','Victorian',#17752,$,$);
+#17774=IFCCLASSIFICATIONREFERENCE($,'PC_90_80','Styles',#17698,$,$);
+#17775=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15','Classical orders',#17774,$,$);
+#17776=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15_15','Composite order',#17775,$,$);
+#17777=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15_17','Corinthian order',#17775,$,$);
+#17778=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15_23','Doric order',#17775,$,$);
+#17779=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15_41','Ionic order',#17775,$,$);
+#17780=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_15_91','Tuscan order',#17775,$,$);
+#17781=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_28','Egyptian',#17774,$,$);
+#17782=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_35','Grotesque',#17774,$,$);
+#17783=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_42','Islamic',#17774,$,$);
+#17784=IFCCLASSIFICATIONREFERENCE($,'PC_90_80_59','Oriental',#17774,$,$);
+#17785=IFCCLASSIFICATIONREFERENCE($,'EF_15','Earthworks and remediation',#6,$,$);
+#17786=IFCCLASSIFICATIONREFERENCE($,'EF_15_10','Groundworks and earthworks',#17785,$,$);
+#17787=IFCCLASSIFICATIONREFERENCE($,'EF_15_30','Remediation, repair and renovation',#17785,$,$);
+#17788=IFCCLASSIFICATIONREFERENCE($,'EF_20','Structural elements',#6,$,$);
+#17789=IFCCLASSIFICATIONREFERENCE($,'EF_20_05','Substructure',#17788,$,$);
+#17790=IFCCLASSIFICATIONREFERENCE($,'EF_20_05_30','Foundations',#17789,$,$);
+#17791=IFCCLASSIFICATIONREFERENCE($,'EF_20_10','Superstructure',#17788,$,$);
+#17792=IFCCLASSIFICATIONREFERENCE($,'EF_20_10_15','Composite structures',#17791,$,$);
+#17793=IFCCLASSIFICATIONREFERENCE($,'EF_20_10_30','Framed structures',#17791,$,$);
+#17794=IFCCLASSIFICATIONREFERENCE($,'EF_20_10_50','Membrane structures',#17791,$,$);
+#17795=IFCCLASSIFICATIONREFERENCE($,'EF_20_10_75','Shell structures',#17791,$,$);
+#17796=IFCCLASSIFICATIONREFERENCE($,'EF_20_10_80','Solid structures',#17791,$,$);
+#17797=IFCCLASSIFICATIONREFERENCE($,'EF_20_50','Bridge structures',#17788,$,$);
+#17798=IFCCLASSIFICATIONREFERENCE($,'EF_20_50_01','Abutments',#17797,$,$);
+#17799=IFCCLASSIFICATIONREFERENCE($,'EF_20_50_07','Bearings',#17797,$,$);
+#17800=IFCCLASSIFICATIONREFERENCE($,'EF_20_50_10','Bridge decks',#17797,$,$);
+#17801=IFCCLASSIFICATIONREFERENCE($,'EF_20_50_64','Piers',#17797,$,$);
+#17802=IFCCLASSIFICATIONREFERENCE($,'EF_20_50_82','Spans',#17797,$,$);
+#17803=IFCCLASSIFICATIONREFERENCE($,'EF_25','Wall and barrier elements',#6,$,$);
+#17804=IFCCLASSIFICATIONREFERENCE($,'EF_25_10','Walls',#17803,$,$);
+#17805=IFCCLASSIFICATIONREFERENCE($,'EF_25_10_25','External walls',#17804,$,$);
+#17806=IFCCLASSIFICATIONREFERENCE($,'EF_25_10_30','Free-standing walls',#17804,$,$);
+#17807=IFCCLASSIFICATIONREFERENCE($,'EF_25_10_40','Internal walls',#17804,$,$);
+#17808=IFCCLASSIFICATIONREFERENCE($,'EF_25_30','Openings',#17803,$,$);
+#17809=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_25','Doors',#17808,$,$);
+#17810=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_33','Gates',#17808,$,$);
+#17811=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_36','Hatches',#17808,$,$);
+#17812=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_45','Louvres',#17808,$,$);
+#17813=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_95','Vents',#17808,$,$);
+#17814=IFCCLASSIFICATIONREFERENCE($,'EF_25_30_97','Windows',#17808,$,$);
+#17815=IFCCLASSIFICATIONREFERENCE($,'EF_25_55','Barriers',#17803,$,$);
+#17816=IFCCLASSIFICATIONREFERENCE($,'EF_25_55_28','Fences',#17815,$,$);
+#17817=IFCCLASSIFICATIONREFERENCE($,'EF_25_55_30','Fixed barriers',#17815,$,$);
+#17818=IFCCLASSIFICATIONREFERENCE($,'EF_25_55_59','Opening barriers',#17815,$,$);
+#17819=IFCCLASSIFICATIONREFERENCE($,'EF_30','Roofs, floor and paving elements',#6,$,$);
+#17820=IFCCLASSIFICATIONREFERENCE($,'EF_30_05','Building levels',#17819,$,$);
+#17821=IFCCLASSIFICATIONREFERENCE($,'EF_30_05_06','Basement level',#17820,$,$);
+#17822=IFCCLASSIFICATIONREFERENCE($,'EF_30_05_34','Ground level',#17820,$,$);
+#17823=IFCCLASSIFICATIONREFERENCE($,'EF_30_05_51','Mezzanine level',#17820,$,$);
+#17824=IFCCLASSIFICATIONREFERENCE($,'EF_30_05_93','Upper level',#17820,$,$);
+#17825=IFCCLASSIFICATIONREFERENCE($,'EF_30_10','Roofs',#17819,$,$);
+#17826=IFCCLASSIFICATIONREFERENCE($,'EF_30_10_04','Arched roofs',#17825,$,$);
+#17827=IFCCLASSIFICATIONREFERENCE($,'EF_30_10_23','Domed roofs',#17825,$,$);
+#17828=IFCCLASSIFICATIONREFERENCE($,'EF_30_10_30','Flat roofs',#17825,$,$);
+#17829=IFCCLASSIFICATIONREFERENCE($,'EF_30_10_64','Pitched roofs',#17825,$,$);
+#17830=IFCCLASSIFICATIONREFERENCE($,'EF_30_20','Floors',#17819,$,$);
+#17831=IFCCLASSIFICATIONREFERENCE($,'EF_30_25','Ceilings and soffits',#17819,$,$);
+#17832=IFCCLASSIFICATIONREFERENCE($,'EF_30_25_12','Ceilings',#17831,$,$);
+#17833=IFCCLASSIFICATIONREFERENCE($,'EF_30_25_80','Soffits',#17831,$,$);
+#17834=IFCCLASSIFICATIONREFERENCE($,'EF_30_30','Decks',#17819,$,$);
+#17835=IFCCLASSIFICATIONREFERENCE($,'EF_30_60','Pavements',#17819,$,$);
+#17836=IFCCLASSIFICATIONREFERENCE($,'EF_30_60_60','Pedestrian pavements',#17835,$,$);
+#17837=IFCCLASSIFICATIONREFERENCE($,'EF_30_60_95','Vehicular pavements',#17835,$,$);
+#17838=IFCCLASSIFICATIONREFERENCE($,'EF_35','Stairs and ramps',#6,$,$);
+#17839=IFCCLASSIFICATIONREFERENCE($,'EF_35_10','Stairs',#17838,$,$);
+#17840=IFCCLASSIFICATIONREFERENCE($,'EF_35_10_30','External stairs',#17839,$,$);
+#17841=IFCCLASSIFICATIONREFERENCE($,'EF_35_10_40','Internal stairs',#17839,$,$);
+#17842=IFCCLASSIFICATIONREFERENCE($,'EF_35_20','Ramps',#17838,$,$);
+#17843=IFCCLASSIFICATIONREFERENCE($,'EF_35_20_30','External ramps',#17842,$,$);
+#17844=IFCCLASSIFICATIONREFERENCE($,'EF_35_20_40','Internal ramps',#17842,$,$);
+#17845=IFCCLASSIFICATIONREFERENCE($,'EF_37','Tunnel, vessel and tower elements',#6,$,$);
+#17846=IFCCLASSIFICATIONREFERENCE($,'EF_37_16','Vessels and trenches',#17845,$,$);
+#17847=IFCCLASSIFICATIONREFERENCE($,'EF_37_16_90','Trenches',#17846,$,$);
+#17848=IFCCLASSIFICATIONREFERENCE($,'EF_37_16_94','Vessels',#17846,$,$);
+#17849=IFCCLASSIFICATIONREFERENCE($,'EF_37_17','Towers, chimneys and masts',#17845,$,$);
+#17850=IFCCLASSIFICATIONREFERENCE($,'EF_37_17_15','Chimneys',#17849,$,$);
+#17851=IFCCLASSIFICATIONREFERENCE($,'EF_37_17_35','Gantries',#17849,$,$);
+#17852=IFCCLASSIFICATIONREFERENCE($,'EF_37_17_50','Masts',#17849,$,$);
+#17853=IFCCLASSIFICATIONREFERENCE($,'EF_37_17_70','Pylons',#17849,$,$);
+#17854=IFCCLASSIFICATIONREFERENCE($,'EF_37_17_90','Towers',#17849,$,$);
+#17855=IFCCLASSIFICATIONREFERENCE($,'EF_37_50','Tunnels and shafts',#17845,$,$);
+#17856=IFCCLASSIFICATIONREFERENCE($,'EF_37_50_07','Bored tunnels',#17855,$,$);
+#17857=IFCCLASSIFICATIONREFERENCE($,'EF_37_50_20','Cut-and-cover tunnels',#17855,$,$);
+#17858=IFCCLASSIFICATIONREFERENCE($,'EF_37_50_42','Immersed tube tunnels',#17855,$,$);
+#17859=IFCCLASSIFICATIONREFERENCE($,'EF_40','Signage, fittings, furnishings and equipment',#6,$,$);
+#17860=IFCCLASSIFICATIONREFERENCE($,'EF_40_10','Signage',#17859,$,$);
+#17861=IFCCLASSIFICATIONREFERENCE($,'EF_40_20','Fittings',#17859,$,$);
+#17862=IFCCLASSIFICATIONREFERENCE($,'EF_40_25','Cultural elements',#17859,$,$);
+#17863=IFCCLASSIFICATIONREFERENCE($,'EF_40_25_05','Artworks',#17862,$,$);
+#17864=IFCCLASSIFICATIONREFERENCE($,'EF_40_30','Furnishings',#17859,$,$);
+#17865=IFCCLASSIFICATIONREFERENCE($,'EF_40_40','Equipment',#17859,$,$);
+#17866=IFCCLASSIFICATIONREFERENCE($,'EF_45','Flora and fauna elements',#6,$,$);
+#17867=IFCCLASSIFICATIONREFERENCE($,'EF_45_03','Aquatic fauna elements',#17866,$,$);
+#17868=IFCCLASSIFICATIONREFERENCE($,'EF_45_05','Aquatic flora elements',#17866,$,$);
+#17869=IFCCLASSIFICATIONREFERENCE($,'EF_45_20','Grass and meadow elements',#17866,$,$);
+#17870=IFCCLASSIFICATIONREFERENCE($,'EF_45_45','Land fauna elements',#17866,$,$);
+#17871=IFCCLASSIFICATIONREFERENCE($,'EF_45_90','Tree, shrub and herbaceous plant elements',#17866,$,$);
+#17872=IFCCLASSIFICATIONREFERENCE($,'EF_50','Waste disposal functions',#6,$,$);
+#17873=IFCCLASSIFICATIONREFERENCE($,'EF_50_10','Gas waste collection',#17872,$,$);
+#17874=IFCCLASSIFICATIONREFERENCE($,'EF_50_20','Wet waste collection',#17872,$,$);
+#17875=IFCCLASSIFICATIONREFERENCE($,'EF_50_30','Above-ground drainage collection',#17872,$,$);
+#17876=IFCCLASSIFICATIONREFERENCE($,'EF_50_35','Below-ground drainage collection',#17872,$,$);
+#17877=IFCCLASSIFICATIONREFERENCE($,'EF_50_40','Dry waste collection',#17872,$,$);
+#17878=IFCCLASSIFICATIONREFERENCE($,'EF_50_50','Gas waste treatment and disposal',#17872,$,$);
+#17879=IFCCLASSIFICATIONREFERENCE($,'EF_50_60','Wet waste treatment and disposal',#17872,$,$);
+#17880=IFCCLASSIFICATIONREFERENCE($,'EF_50_70','Drainage treatment and disposal',#17872,$,$);
+#17881=IFCCLASSIFICATIONREFERENCE($,'EF_50_75','Wastewater treatment and disposal',#17872,$,$);
+#17882=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_42','Wastewater treatment inlet works',#17881,$,$);
+#17883=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_62','Preliminary wastewater treatment',#17881,$,$);
+#17884=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_65','Primary wastewater treatment',#17881,$,$);
+#17885=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_75','Secondary wastewater treatment',#17881,$,$);
+#17886=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_80','Sludge treatment',#17881,$,$);
+#17887=IFCCLASSIFICATIONREFERENCE($,'EF_50_75_87','Tertiary wastewater treatment',#17881,$,$);
+#17888=IFCCLASSIFICATIONREFERENCE($,'EF_50_80','Dry waste treatment and disposal',#17872,$,$);
+#17889=IFCCLASSIFICATIONREFERENCE($,'EF_55','Piped supply functions',#6,$,$);
+#17890=IFCCLASSIFICATIONREFERENCE($,'EF_55_05','Gas extraction and treatment',#17889,$,$);
+#17891=IFCCLASSIFICATIONREFERENCE($,'EF_55_10','Liquid fuel extraction and treatment',#17889,$,$);
+#17892=IFCCLASSIFICATIONREFERENCE($,'EF_55_15','Water extraction and treatment',#17889,$,$);
+#17893=IFCCLASSIFICATIONREFERENCE($,'EF_55_20','Gas supply',#17889,$,$);
+#17894=IFCCLASSIFICATIONREFERENCE($,'EF_55_20_34','Fuel gas supply',#17893,$,$);
+#17895=IFCCLASSIFICATIONREFERENCE($,'EF_55_20_45','Laboratory gas supply',#17893,$,$);
+#17896=IFCCLASSIFICATIONREFERENCE($,'EF_55_20_51','Medical gas and vacuum supply',#17893,$,$);
+#17897=IFCCLASSIFICATIONREFERENCE($,'EF_55_20_60','Process gas supply',#17893,$,$);
+#17898=IFCCLASSIFICATIONREFERENCE($,'EF_55_30','Fire-extinguishing supply',#17889,$,$);
+#17899=IFCCLASSIFICATIONREFERENCE($,'EF_55_30_30','Foam fire-extinguishing supply',#17898,$,$);
+#17900=IFCCLASSIFICATIONREFERENCE($,'EF_55_30_35','Gaseous fire-extinguishing supply',#17898,$,$);
+#17901=IFCCLASSIFICATIONREFERENCE($,'EF_55_30_96','Water firefighting supply',#17898,$,$);
+#17902=IFCCLASSIFICATIONREFERENCE($,'EF_55_30_98','Water fire suppression supply',#17898,$,$);
+#17903=IFCCLASSIFICATIONREFERENCE($,'EF_55_40','Steam supply',#17889,$,$);
+#17904=IFCCLASSIFICATIONREFERENCE($,'EF_55_50','Liquid fuel supply',#17889,$,$);
+#17905=IFCCLASSIFICATIONREFERENCE($,'EF_55_60','Process liquid supply',#17889,$,$);
+#17906=IFCCLASSIFICATIONREFERENCE($,'EF_55_70','Water supply',#17889,$,$);
+#17907=IFCCLASSIFICATIONREFERENCE($,'EF_55_70_38','Hot and cold water supply',#17906,$,$);
+#17908=IFCCLASSIFICATIONREFERENCE($,'EF_55_70_42','Irrigation water supply',#17906,$,$);
+#17909=IFCCLASSIFICATIONREFERENCE($,'EF_55_90','Piped solids supply',#17889,$,$);
+#17910=IFCCLASSIFICATIONREFERENCE($,'EF_60','Heating, cooling and refrigeration functions',#6,$,$);
+#17911=IFCCLASSIFICATIONREFERENCE($,'EF_60_30','Rail and paving heating',#17910,$,$);
+#17912=IFCCLASSIFICATIONREFERENCE($,'EF_60_30_60','Pavement heating',#17911,$,$);
+#17913=IFCCLASSIFICATIONREFERENCE($,'EF_60_30_70','Railway heating',#17911,$,$);
+#17914=IFCCLASSIFICATIONREFERENCE($,'EF_60_30_75','Runway heating',#17911,$,$);
+#17915=IFCCLASSIFICATIONREFERENCE($,'EF_60_30_90','Tramway heating',#17911,$,$);
+#17916=IFCCLASSIFICATIONREFERENCE($,'EF_60_40','Space heating and cooling',#17910,$,$);
+#17917=IFCCLASSIFICATIONREFERENCE($,'EF_60_40_15','Combined heating, cooling and power',#17916,$,$);
+#17918=IFCCLASSIFICATIONREFERENCE($,'EF_60_40_17','Cooling',#17916,$,$);
+#17919=IFCCLASSIFICATIONREFERENCE($,'EF_60_40_37','Heating',#17916,$,$);
+#17920=IFCCLASSIFICATIONREFERENCE($,'EF_60_60','Refrigeration',#17910,$,$);
+#17921=IFCCLASSIFICATIONREFERENCE($,'EF_60_60_17','Cold storage',#17920,$,$);
+#17922=IFCCLASSIFICATIONREFERENCE($,'EF_60_80','Drying',#17910,$,$);
+#17923=IFCCLASSIFICATIONREFERENCE($,'EF_65','Ventilation and air conditioning functions',#6,$,$);
+#17924=IFCCLASSIFICATIONREFERENCE($,'EF_65_40','Ventilation',#17923,$,$);
+#17925=IFCCLASSIFICATIONREFERENCE($,'EF_65_40_32','Fume extraction',#17924,$,$);
+#17926=IFCCLASSIFICATIONREFERENCE($,'EF_65_40_33','General space ventilation',#17924,$,$);
+#17927=IFCCLASSIFICATIONREFERENCE($,'EF_65_40_42','Industrial fume extraction',#17924,$,$);
+#17928=IFCCLASSIFICATIONREFERENCE($,'EF_65_40_80','Smoke extraction and control',#17924,$,$);
+#17929=IFCCLASSIFICATIONREFERENCE($,'EF_65_40_94','Vehicular space ventilation',#17924,$,$);
+#17930=IFCCLASSIFICATIONREFERENCE($,'EF_65_80','Air conditioning',#17923,$,$);
+#17931=IFCCLASSIFICATIONREFERENCE($,'EF_65_80_12','Central air conditioning',#17930,$,$);
+#17932=IFCCLASSIFICATIONREFERENCE($,'EF_65_80_15','Controlled environments',#17930,$,$);
+#17933=IFCCLASSIFICATIONREFERENCE($,'EF_65_80_45','Local air conditioning',#17930,$,$);
+#17934=IFCCLASSIFICATIONREFERENCE($,'EF_70','Electrical power and lighting functions',#6,$,$);
+#17935=IFCCLASSIFICATIONREFERENCE($,'EF_70_10','Electrical power generation',#17934,$,$);
+#17936=IFCCLASSIFICATIONREFERENCE($,'EF_70_10_30','Fossil fuel power generation',#17935,$,$);
+#17937=IFCCLASSIFICATIONREFERENCE($,'EF_70_10_70','Renewable power generation',#17935,$,$);
+#17938=IFCCLASSIFICATIONREFERENCE($,'EF_70_30','Electricity distribution and transmission',#17934,$,$);
+#17939=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_10','Cable management',#17938,$,$);
+#17940=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_25','Extra-high-voltage electricity distribution',#17938,$,$);
+#17941=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_35','High-voltage electricity distribution',#17938,$,$);
+#17942=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_45','Low-voltage electricity distribution',#17938,$,$);
+#17943=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_50','Medium-voltage electricity distribution',#17938,$,$);
+#17944=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_60','Overhead line traction power distribution',#17938,$,$);
+#17945=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_80','Small power supply',#17938,$,$);
+#17946=IFCCLASSIFICATIONREFERENCE($,'EF_70_30_90','Conductor rail traction power distribution',#17938,$,$);
+#17947=IFCCLASSIFICATIONREFERENCE($,'EF_70_80','Lighting',#17934,$,$);
+#17948=IFCCLASSIFICATIONREFERENCE($,'EF_70_80_01','Aeronautical lighting',#17947,$,$);
+#17949=IFCCLASSIFICATIONREFERENCE($,'EF_70_80_25','External lighting',#17947,$,$);
+#17950=IFCCLASSIFICATIONREFERENCE($,'EF_70_80_33','General space lighting',#17947,$,$);
+#17951=IFCCLASSIFICATIONREFERENCE($,'EF_75','Communications, security, safety and protection functions',#6,$,$);
+#17952=IFCCLASSIFICATIONREFERENCE($,'EF_75_10','Communication',#17951,$,$);
+#17953=IFCCLASSIFICATIONREFERENCE($,'EF_75_10_21','Data distribution and telecommunications',#17952,$,$);
+#17954=IFCCLASSIFICATIONREFERENCE($,'EF_75_10_68','Public communications',#17952,$,$);
+#17955=IFCCLASSIFICATIONREFERENCE($,'EF_75_10_70','Radio and television distribution',#17952,$,$);
+#17956=IFCCLASSIFICATIONREFERENCE($,'EF_75_10_72','Emergency communications',#17952,$,$);
+#17957=IFCCLASSIFICATIONREFERENCE($,'EF_75_30','Signalling',#17951,$,$);
+#17958=IFCCLASSIFICATIONREFERENCE($,'EF_75_30_35','Road signals and controls',#17957,$,$);
+#17959=IFCCLASSIFICATIONREFERENCE($,'EF_75_30_50','Marine signals',#17957,$,$);
+#17960=IFCCLASSIFICATIONREFERENCE($,'EF_75_30_70','Rail signals and controls',#17957,$,$);
+#17961=IFCCLASSIFICATIONREFERENCE($,'EF_75_30_90','Tramway signals',#17957,$,$);
+#17962=IFCCLASSIFICATIONREFERENCE($,'EF_75_30_97','Waterway signals',#17957,$,$);
+#17963=IFCCLASSIFICATIONREFERENCE($,'EF_75_40','Security',#17951,$,$);
+#17964=IFCCLASSIFICATIONREFERENCE($,'EF_75_40_02','Access control',#17963,$,$);
+#17965=IFCCLASSIFICATIONREFERENCE($,'EF_75_40_53','Monitoring',#17963,$,$);
+#17966=IFCCLASSIFICATIONREFERENCE($,'EF_75_40_73','Security screening',#17963,$,$);
+#17967=IFCCLASSIFICATIONREFERENCE($,'EF_75_40_75','Security detection and alarms',#17963,$,$);
+#17968=IFCCLASSIFICATIONREFERENCE($,'EF_75_50','Safety and protection',#17951,$,$);
+#17969=IFCCLASSIFICATIONREFERENCE($,'EF_75_50_28','Fire and smoke detection and alarms',#17968,$,$);
+#17970=IFCCLASSIFICATIONREFERENCE($,'EF_75_50_33','Gas detection and alarms',#17968,$,$);
+#17971=IFCCLASSIFICATIONREFERENCE($,'EF_75_50_50','Liquid detection and alarms',#17968,$,$);
+#17972=IFCCLASSIFICATIONREFERENCE($,'EF_75_50_60','Patient monitoring and telemetry',#17968,$,$);
+#17973=IFCCLASSIFICATIONREFERENCE($,'EF_75_60','Environmental safety',#17951,$,$);
+#17974=IFCCLASSIFICATIONREFERENCE($,'EF_75_70','Control and management',#17951,$,$);
+#17975=IFCCLASSIFICATIONREFERENCE($,'EF_75_70_52','Mechanical engineering services control and management',#17974,$,$);
+#17976=IFCCLASSIFICATIONREFERENCE($,'EF_75_70_54','Metering, monitoring and management',#17974,$,$);
+#17977=IFCCLASSIFICATIONREFERENCE($,'EF_75_70_85','Structural monitoring',#17974,$,$);
+#17978=IFCCLASSIFICATIONREFERENCE($,'EF_75_70_90','Transport management',#17974,$,$);
+#17979=IFCCLASSIFICATIONREFERENCE($,'EF_75_70_96','Water supply and wastewater control',#17974,$,$);
+#17980=IFCCLASSIFICATIONREFERENCE($,'EF_75_80','Protection',#17951,$,$);
+#17981=IFCCLASSIFICATIONREFERENCE($,'EF_80','Transport functions',#6,$,$);
+#17982=IFCCLASSIFICATIONREFERENCE($,'EF_80_10','Cable transport',#17981,$,$);
+#17983=IFCCLASSIFICATIONREFERENCE($,'EF_80_20','Conveyors',#17981,$,$);
+#17984=IFCCLASSIFICATIONREFERENCE($,'EF_80_30','Cranes and hoists',#17981,$,$);
+#17985=IFCCLASSIFICATIONREFERENCE($,'EF_80_50','Lifts',#17981,$,$);
+#17986=IFCCLASSIFICATIONREFERENCE($,'EF_80_70','Rail tracks',#17981,$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py
index 33112cbb8f..f1d8301db8 100644
--- a/src/blenderbim/blenderbim/bim/ui.py
+++ b/src/blenderbim/blenderbim/bim/ui.py
@@ -132,6 +132,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
description='E.g. [["inkscape", "svg", "-o", "eps"], ["pstoedit", "-dt", "-f", "dxf:-polyaslines -mm", "eps", "dxf", "-psarg", "-dNOSAFER"]]',
)
svg_command: StringProperty(name="SVG Command", description='E.g. [["firefox", "path"]]')
+ layout_svg_command: StringProperty(name="Layout SVG Command", description='E.g. [["firefox", "path"]]')
pdf_command: StringProperty(name="PDF Command", description='E.g. [["firefox", "path"]]')
spreadsheet_command: StringProperty(name="Spreadsheet Command", description='E.g. [["libreoffice", "path"]]')
openlca_port: IntProperty(name="OpenLCA IPC Port", default=8080)
@@ -205,6 +206,8 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
row = layout.row()
row.prop(self, "svg_command")
row = layout.row()
+ row.prop(self, "layout_svg_command")
+ row = layout.row()
row.prop(self, "pdf_command")
row = layout.row()
row.prop(self, "spreadsheet_command")
@@ -336,7 +339,7 @@ class BIM_PT_tabs(Panel):
tab_entry.enabled = enabled
-class BIM_PT_project_info(Panel):
+class BIM_PT_tab_project_info(Panel):
bl_label = "Project Info"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
@@ -350,16 +353,30 @@ class BIM_PT_project_info(Panel):
pass
-class BIM_PT_project_setup(Panel):
+class BIM_PT_tab_project_setup(Panel):
bl_label = "Project Setup"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "PROJECT")
+
+ def draw(self, context):
+ pass
+
+
+class BIM_PT_tab_stakeholders(Panel):
+ bl_label = "Stakeholders"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
bl_options = {"DEFAULT_CLOSED"}
@classmethod
def poll(cls, context):
- return tool.Blender.is_tab(context, "PROJECT")
+ return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get()
def draw(self, context):
pass
@@ -394,7 +411,7 @@ class BIM_PT_tab_grouping_and_filtering(Panel):
pass
-class BIM_PT_geometry(Panel):
+class BIM_PT_tab_geometry(Panel):
bl_label = "Geometry"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
@@ -492,6 +509,20 @@ class BIM_PT_tab_services(Panel):
pass
+class BIM_PT_tab_zones(Panel):
+ bl_label = "Zones"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
class BIM_PT_tab_quality_control(Panel):
bl_label = "Quality Control"
bl_space_type = "PROPERTIES"
@@ -552,6 +583,21 @@ class BIM_PT_tab_object_metadata(Panel):
pass
+class BIM_PT_tab_placement(Panel):
+ bl_label = "Placement"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
class BIM_PT_tab_representations(Panel):
bl_label = "Representations"
bl_space_type = "PROPERTIES"
@@ -629,8 +675,8 @@ class BIM_PT_tab_styles(Panel):
pass
-class BIM_PT_tab_services_object(Panel):
- bl_label = "Services"
+class BIM_PT_tab_profiles(Panel):
+ bl_label = "Profiles"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
@@ -638,7 +684,67 @@ class BIM_PT_tab_services_object(Panel):
@classmethod
def poll(cls, context):
- return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get()
+ return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
+class BIM_PT_tab_sheets(Panel):
+ bl_label = "Sheets"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
+class BIM_PT_tab_drawings(Panel):
+ bl_label = "Drawings"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
+class BIM_PT_tab_schedules(Panel):
+ bl_label = "Schedules"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
+
+ def draw(self, context):
+ pass
+
+
+class BIM_PT_tab_references(Panel):
+ bl_label = "References"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "scene"
+ bl_order = 1
+
+ @classmethod
+ def poll(cls, context):
+ return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get()
def draw(self, context):
pass
diff --git a/src/blenderbim/blenderbim/core/covering.py b/src/blenderbim/blenderbim/core/covering.py
index 61aadfcd7a..e764dd4c78 100644
--- a/src/blenderbim/blenderbim/core/covering.py
+++ b/src/blenderbim/blenderbim/core/covering.py
@@ -16,7 +16,115 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
+def add_instance_flooring_covering_from_cursor(ifc, spatial, model, Type, geometry):
+ active_obj = spatial.get_active_obj()
+ selected_objects = spatial.get_selected_objects()
+ element = None
+ relating_type_id = spatial.get_relating_type_id()
+ relating_type = None
+ if relating_type_id:
+ relating_type = ifc.get().by_id(int(relating_type_id))
+ if not relating_type.is_a("IfcCoveringType"):
+ relating_type = None
+
+ if selected_objects and active_obj:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_active_obj(active_obj)
+ element = ifc.get_entity(active_obj)
+
+ else:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_cursor()
+
+ space_polygon = spatial.get_space_polygon_from_context_visible_objects(x, y)
+
+ if not space_polygon:
+ return
+
+ bm = spatial.get_bmesh_from_polygon(space_polygon, h=0)
+ name = "Covering"
+ mesh = spatial.get_named_mesh_from_bmesh(name = name, bmesh = bm)
+
+ obj = spatial.get_named_obj_from_mesh(name, mesh)
+
+ spatial.set_obj_origin_to_cursor_position(obj)
+# spatial.traslate_obj_to_z_location(obj, z)
+ spatial.link_obj_to_active_collection(obj)
+ points = spatial.get_2d_vertices_from_obj(obj)
+ spatial.assign_type_to_obj(obj)
+
+ spatial.assign_swept_area_outer_curve_from_2d_vertices(obj, vertices = points)
+ body = spatial.get_body_representation(obj)
+ spatial.regen_obj_representation(ifc, geometry, obj, body)
+
+def add_instance_ceiling_covering_from_cursor(ifc, spatial, model, Type, geometry, covering):
+ active_obj = spatial.get_active_obj()
+ selected_objects = spatial.get_selected_objects()
+ element = None
+ relating_type_id = spatial.get_relating_type_id()
+
+ relating_type = None
+ if relating_type_id:
+ relating_type = ifc.get().by_id(int(relating_type_id))
+ if not relating_type.is_a("IfcCoveringType"):
+ relating_type = None
+
+ if selected_objects and active_obj:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_active_obj(active_obj)
+ element = ifc.get_entity(active_obj)
+
+ else:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_cursor()
+ z = covering.get_z_from_ceiling_height()
+
+ space_polygon = spatial.get_space_polygon_from_context_visible_objects(x, y)
+
+ if not space_polygon:
+ return
+
+ bm = spatial.get_bmesh_from_polygon(space_polygon, h=0)
+ name = "Covering"
+ mesh = spatial.get_named_mesh_from_bmesh(name = name, bmesh = bm)
+
+ obj = spatial.get_named_obj_from_mesh(name, mesh)
+
+ spatial.set_obj_origin_to_cursor_position(obj)
+ spatial.traslate_obj_to_z_location(obj, z)
+ spatial.link_obj_to_active_collection(obj)
+ points = spatial.get_2d_vertices_from_obj(obj)
+ spatial.assign_type_to_obj(obj)
+
+ spatial.assign_swept_area_outer_curve_from_2d_vertices(obj, vertices = points)
+ body = spatial.get_body_representation(obj)
+ spatial.regen_obj_representation(ifc, geometry, obj, body)
+
+
+def regen_selected_covering_object(ifc, spatial, model, Type, geometry):
+ active_obj = spatial.get_active_obj()
+ selected_objects = spatial.get_selected_objects()
+
+ if selected_objects and active_obj:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_active_obj(active_obj)
+ element = ifc.get_entity(active_obj)
+
+ space_polygon = spatial.get_space_polygon_from_context_visible_objects(x, y)
+
+ if not space_polygon:
+ return
+
+ bm = spatial.get_bmesh_from_polygon(space_polygon, h=0)
+
+ name = "Aux"
+ mesh = spatial.get_named_mesh_from_bmesh(name = name, bmesh = bm)
+ mesh = spatial.get_transformed_mesh_from_local_to_global(mesh)
+ obj = spatial.get_named_obj_from_mesh(name, mesh)
+
+ points = spatial.get_2d_vertices_from_obj(obj)
+
+ spatial.assign_swept_area_outer_curve_from_2d_vertices(active_obj, vertices = points)
+ body = spatial.get_body_representation(active_obj)
+ spatial.regen_obj_representation(ifc, geometry, active_obj, body)
+
+#TODO CHECK IF IT IS POSSIBLE TO CREATE ONLY ONE CORE FUNCTION FOR _FROM_WALLS
def add_instance_flooring_coverings_from_walls(ifc, spatial, collector, geometry):
z = spatial.get_active_obj_z()
union = spatial.get_union_shape_from_selected_objects()
@@ -40,3 +148,25 @@ def add_instance_flooring_coverings_from_walls(ifc, spatial, collector, geometry
body = spatial.get_body_representation(obj)
spatial.regen_obj_representation(ifc, geometry, obj, body)
+def add_instance_ceiling_coverings_from_walls(ifc, spatial, collector, geometry, covering):
+ z = covering.get_z_from_ceiling_height()
+ union = spatial.get_union_shape_from_selected_objects()
+ for i, linear_ring in enumerate(union.interiors):
+ poly = spatial.get_buffered_poly_from_linear_ring(linear_ring)
+ bm = spatial.get_bmesh_from_polygon(poly, h=0)
+
+ name = "Covering" + str(i)
+ obj = spatial.get_named_obj_from_bmesh(name, bmesh = bm)
+
+ spatial.set_obj_origin_to_bboxcenter(obj)
+ spatial.traslate_obj_to_z_location(obj, z)
+ spatial.link_obj_to_active_collection(obj)
+
+ points = spatial.get_2d_vertices_from_obj(obj)
+
+ spatial.assign_type_to_obj(obj)
+ spatial.assign_container_to_obj(obj)
+
+ spatial.assign_swept_area_outer_curve_from_2d_vertices(obj, vertices = points)
+ body = spatial.get_body_representation(obj)
+ spatial.regen_obj_representation(ifc, geometry, obj, body)
diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py
index 683f7350d0..32333dde0c 100644
--- a/src/blenderbim/blenderbim/core/drawing.py
+++ b/src/blenderbim/blenderbim/core/drawing.py
@@ -90,7 +90,7 @@ def add_sheet(ifc, drawing, titleblock=None):
def open_sheet(drawing, sheet=None):
- drawing.open_svg(drawing.get_document_uri(sheet, "LAYOUT"))
+ drawing.open_layout_svg(drawing.get_document_uri(sheet, "LAYOUT"))
def remove_sheet(ifc, drawing, sheet=None):
@@ -190,7 +190,7 @@ def disable_editing_drawings(drawing):
def add_drawing(ifc, collector, drawing, target_view=None, location_hint=None):
drawing_name = drawing.ensure_unique_drawing_name(drawing.generate_drawing_name(target_view, location_hint))
drawing_matrix = drawing.generate_drawing_matrix(target_view, location_hint)
- camera = drawing.create_camera(drawing_name, drawing_matrix)
+ camera = drawing.create_camera(drawing_name, drawing_matrix, location_hint)
element = drawing.run_root_assign_class(
obj=camera,
ifc_class="IfcAnnotation",
diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py
index b055a65d6c..79150a8c25 100644
--- a/src/blenderbim/blenderbim/core/geometry.py
+++ b/src/blenderbim/blenderbim/core/geometry.py
@@ -103,24 +103,40 @@ def switch_representation(
if not geometry.does_representation_id_exist(representation_id):
return
- representation = geometry.resolve_mapped_representation(representation)
- existing_data = geometry.get_representation_data(representation)
+ entity = ifc.get_entity(obj)
+ current_obj_data = geometry.get_object_data(obj)
- if should_reload or not existing_data:
- data = geometry.import_representation(obj, representation, apply_openings=apply_openings)
- geometry.rename_object(data, geometry.get_representation_name(representation))
- geometry.link(representation, data)
+ has_openings = apply_openings and getattr(entity, "HasOpenings", None)
+ if has_openings:
+ # if it has openings make sure to switch to element's mapped representation
+ representation = geometry.unresolve_type_representation(representation, entity)
else:
- data = existing_data
+ # doesn't resolve mapped representations in case if it's going to have openings
+ # otherwise we would also add openings to the type and other occurences mesh data
+ representation = geometry.resolve_mapped_representation(representation)
- geometry.change_object_data(obj, data, is_global=is_global)
+ old_repr_data = geometry.get_representation_data(representation)
+ if should_reload or not old_repr_data:
+ new_repr_data = geometry.import_representation(obj, representation, apply_openings=apply_openings)
+ geometry.rename_object(new_repr_data, geometry.get_representation_name(representation))
+ geometry.link(representation, new_repr_data)
+ else:
+ new_repr_data = old_repr_data
+
+ geometry.change_object_data(obj, new_repr_data, is_global=is_global and not has_openings)
geometry.record_object_materials(obj)
- if should_reload and existing_data:
- geometry.delete_data(existing_data)
+ # we assume that all the occurences and the type have the same representation context active
+ # so geometry.delete_data cannot remove the data that's still used by some other object
+ if should_reload and old_repr_data:
+ # if current object was using some temporary mesh (like during profile edit mode) instead of `old_repr_data`
+ # then `change_object_data` won't switch the mesh for all the occurences and we need to do it explicitly
+ if current_obj_data != old_repr_data and geometry.has_data_users(old_repr_data):
+ geometry.replace_object_data_globally(old_repr_data, new_repr_data)
+ geometry.delete_data(old_repr_data)
geometry.clear_modifiers(obj)
- geometry.clear_cache(ifc.get_entity(obj))
+ geometry.clear_cache(entity)
def get_representation_ifc_parameters(geometry, obj=None, should_sync_changes_first=False):
diff --git a/src/blenderbim/blenderbim/core/georeference.py b/src/blenderbim/blenderbim/core/georeference.py
index dcc9823904..9c6e6de118 100644
--- a/src/blenderbim/blenderbim/core/georeference.py
+++ b/src/blenderbim/blenderbim/core/georeference.py
@@ -71,13 +71,13 @@ def set_cursor_location(georeference):
def convert_local_to_global(georeference):
- coordinates = georeference.xyz2enh(georeference.get_coordinates("input"), georeference.get_map_conversion())
+ coordinates = georeference.xyz2enh(georeference.get_coordinates("input"))
georeference.set_coordinates("output", coordinates)
georeference.set_cursor_location(coordinates)
def convert_global_to_local(georeference):
- coordinates = georeference.enh2xyz(georeference.get_coordinates("input"), georeference.get_map_conversion())
+ coordinates = georeference.enh2xyz(georeference.get_coordinates("input"))
georeference.set_coordinates("output", coordinates)
georeference.set_cursor_location(coordinates)
@@ -86,4 +86,4 @@ def convert_angle_to_coord(georeference, type):
georeference.set_vector_coordinates(vector_coordinates,type)
def import_plot(georeference, filepath):
- georeference.import_plot(filepath, georeference.get_map_conversion())
+ georeference.import_plot(filepath)
diff --git a/src/blenderbim/blenderbim/core/material.py b/src/blenderbim/blenderbim/core/material.py
index 603f02ab75..debf31c80d 100644
--- a/src/blenderbim/blenderbim/core/material.py
+++ b/src/blenderbim/blenderbim/core/material.py
@@ -21,9 +21,9 @@ def unlink_material(ifc, obj=None):
ifc.unlink(obj=obj)
-def add_material(ifc, material, style, obj=None):
+def add_material(ifc, material, style, obj=None, name=None):
if not obj:
- obj = material.add_default_material_object()
+ obj = material.add_default_material_object(name)
ifc_material = ifc.run("material.add_material", name=material.get_name(obj))
ifc.link(ifc_material, obj)
ifc_style = style.get_style(obj)
diff --git a/src/blenderbim/blenderbim/core/pset.py b/src/blenderbim/blenderbim/core/pset.py
index 023b7ba190..e394256e67 100644
--- a/src/blenderbim/blenderbim/core/pset.py
+++ b/src/blenderbim/blenderbim/core/pset.py
@@ -29,6 +29,7 @@ def copy_property_to_selection(ifc, pset, is_pset=True, obj=None, pset_name=None
else:
ifc.run("pset.edit_qto", qto=ifc_pset, properties={prop_name: prop_value})
+
def add_pset(ifc, pset, blender, obj_name, obj_type):
pset_name = pset.get_pset_name(obj_name, obj_type)
if obj_type == "Object":
@@ -40,7 +41,4 @@ def add_pset(ifc, pset, blender, obj_name, obj_type):
continue
if not pset.is_pset_applicable(element, pset_name):
continue
- ifc_pset = pset.get_element_pset(element, pset_name)
- if not ifc_pset:
- ifc.run("pset.add_pset", product=element, name=pset_name)
- pset.enable_pset_editing(pset_id=0, pset_name=pset_name, pset_type="PSET",obj=obj_name, obj_type=obj_type)
\ No newline at end of file
+ pset.enable_pset_editing(pset_id=0, pset_name=pset_name, pset_type="PSET", obj=obj_name, obj_type=obj_type)
diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py
index 109168847b..ccebb24f94 100644
--- a/src/blenderbim/blenderbim/core/spatial.py
+++ b/src/blenderbim/blenderbim/core/spatial.py
@@ -16,9 +16,6 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
-import blenderbim.core
-import bpy
-
def reference_structure(ifc, spatial, structure=None, element=None):
if spatial.can_reference(structure, element):
@@ -98,56 +95,89 @@ def select_similar_container(ifc, spatial, obj=None):
def select_product(spatial, product):
spatial.select_products([product])
+
def load_container_manager(spatial):
spatial.load_container_manager()
+
def edit_container_attributes(spatial, entity=None):
spatial.edit_container_attributes(entity)
spatial.load_container_manager()
+
def contract_container(spatial, container=None):
spatial.contract_container(container)
spatial.load_container_manager()
+
def expand_container(spatial, container=None):
spatial.expand_container(container)
spatial.load_container_manager()
+
def delete_container(ifc, spatial, geometry, container=None):
geometry.delete_ifc_object(ifc.get_object(container))
spatial.load_container_manager()
+
def select_decomposed_elements(spatial):
container = spatial.get_active_container()
if container:
spatial.select_products(spatial.get_decomposed_elements(container))
+
#HERE STARTS SPATIAL TOOL
+def generate_space(ifc, spatial, model, Type):
+ active_obj = spatial.get_active_obj()
+ selected_objects = spatial.get_selected_objects()
+ element = None
+ relating_type_id = spatial.get_relating_type_id()
+
+ relating_type = None
+ if relating_type_id:
+ relating_type = ifc.get().by_id(int(relating_type_id))
+ if not relating_type.is_a("IfcSpaceType"):
+ relating_type = None
+
+ if selected_objects and active_obj:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_active_obj(active_obj) ##mat
+ element = ifc.get_entity(active_obj)
+
+ else:
+ x, y, z, h, mat = spatial.get_x_y_z_h_mat_from_cursor() ##mat
+
+
+ space_polygon = spatial.get_space_polygon_from_context_visible_objects(x, y)
+
+ if not space_polygon:
+ return
+
+ bm = spatial.get_bmesh_from_polygon(space_polygon, h=h) ##mat
+
+ mesh = spatial.get_named_mesh_from_bmesh(name = "Space", bmesh = bm)
+
+ if element and element.is_a("IfcSpace"):
+ mesh = spatial.get_transformed_mesh_from_local_to_global(mesh)
+ spatial.edit_active_space_obj_from_mesh(mesh)
+ else:
+ if relating_type:
+ name = model.generate_occurrence_name(relating_type, "IfcSpace")
+ else:
+ name = "Space"
+
+ obj = spatial.get_named_obj_from_mesh(name, mesh)
+ spatial.set_obj_origin_to_cursor_position(obj)
+ spatial.link_obj_to_active_collection(obj)
+ spatial.assign_ifcspace_class_to_obj(obj)
+
+ element = ifc.get_entity(obj)
+
+ if relating_type:
+ spatial.assign_relating_type_to_element(ifc, Type, element, relating_type)
def generate_spaces_from_walls(ifc, spatial, collector):
- active_obj = bpy.context.active_object
- element = ifc.get_entity(active_obj)
- container = spatial.get_container(element)
-
- if not active_obj:
- self.report({"ERROR"}, "No active object. Please select a wall")
- return
-
- element = ifc.get_entity(active_obj)
- if element and not element.is_a("IfcWall"):
- return self.report({"ERROR"}, "The active object is not a wall. Please select a wall.")
-
- if not container:
- self.report({"ERROR"}, "The wall is not contained.")
-
- if not bpy.context.selected_objects:
- self.report({"ERROR"}, "No selected objects found. Please select walls.")
- return
-
- x, y, z = active_obj.matrix_world.translation.xyz
- mat = active_obj.matrix_world
- h = active_obj.dimensions.z
- selected_objects = bpy.context.selected_objects
+ z = spatial.get_active_obj_z()
+ h = spatial.get_active_obj_height()
union = spatial.get_union_shape_from_selected_objects()
@@ -157,24 +187,17 @@ def generate_spaces_from_walls(ifc, spatial, collector):
bm = spatial.get_bmesh_from_polygon(poly, h)
name = "Space" + str(i)
- mesh = bpy.data.meshes.new(name=name)
- bm.to_mesh(mesh)
- bm.free()
- obj = bpy.data.objects.new(name, mesh)
- obj.matrix_world = mat
+ obj = spatial.get_named_obj_from_bmesh(name, bmesh = bm)
spatial.set_obj_origin_to_bboxcenter(obj)
+ spatial.traslate_obj_to_z_location(obj, z)
- if z != 0:
- obj.location = obj.location + Vector((0, 0, z))
+ spatial.link_obj_to_active_collection(obj)
+ spatial.assign_ifcspace_class_to_obj(obj)
+
+ spatial.assign_container_to_obj(obj)
- bpy.context.view_layer.active_layer_collection.collection.objects.link(obj)
- bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcSpace")
- container_obj = ifc.get_object(container)
- blenderbim.core.spatial.assign_container(
- ifc, collector, spatial, structure_obj=container_obj, element_obj=obj
- )
def toggle_space_visibility(ifc, spatial):
model = ifc.get()
@@ -182,4 +205,3 @@ def toggle_space_visibility(ifc, spatial):
if not spaces:
return
spatial.toggle_spaces_visibility_wired_and_textured(spaces)
-
diff --git a/src/blenderbim/blenderbim/core/system.py b/src/blenderbim/blenderbim/core/system.py
index 5afc2b0420..3c6ce42e5a 100644
--- a/src/blenderbim/blenderbim/core/system.py
+++ b/src/blenderbim/blenderbim/core/system.py
@@ -47,7 +47,7 @@ def remove_system(ifc, system_tool, system=None):
def enable_editing_system(system_tool, system=None):
system_tool.import_system_attributes(system)
- system_tool.set_active_system(system)
+ system_tool.set_active_edited_system(system)
def disable_editing_system(system):
@@ -64,6 +64,7 @@ def unassign_system(ifc, system=None, product=None):
def select_system_products(system_tool, system=None):
system_tool.select_system_products(system)
+ system_tool.set_active_system(system)
def show_ports(ifc, system, spatial, element=None):
diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py
index de5d5f31cb..a373531533 100644
--- a/src/blenderbim/blenderbim/core/tool.py
+++ b/src/blenderbim/blenderbim/core/tool.py
@@ -253,7 +253,7 @@ class Drawing:
def copy_representation(cls, source, dest): pass
def create_annotation_context(cls, target_view, object_type=None): pass
def create_annotation_object(cls, drawing, object_type): pass
- def create_camera(cls, name, matrix): pass
+ def create_camera(cls, name, matrix, location_hint): pass
def create_svg_schedule(cls, schedule): pass
def create_svg_sheet(cls, document, titleblock): pass
def delete_collection(cls, collection): pass
@@ -316,6 +316,7 @@ class Drawing:
def is_drawing_active(cls): pass
def is_editing_sheets(cls): pass
def move_file(cls, src, dest): pass
+ def open_layout_svg(cls, uri): pass
def open_spreadsheet(cls, uri): pass
def open_svg(cls, filepath): pass
def remove_literal_from_annotation(cls, obj, literal): pass
@@ -369,6 +370,7 @@ class Geometry:
def remove_connection(cls, connection): pass
def rename_object(cls, obj, name): pass
def replace_object_with_empty(cls, obj): pass
+ def replace_object_data_globally(cls, old_data, new_data): pass
def resolve_mapped_representation(cls, representation): pass
def run_geometry_update_representation(cls, obj=None): pass
def run_style_add_style(cls, obj=None): pass
@@ -377,6 +379,7 @@ class Geometry:
def should_force_triangulation(cls): pass
def should_generate_uvs(cls, obj): pass
def should_use_presentation_style_assignment(cls): pass
+ def unresolve_type_representation(cls, representation, element): pass
@interface
@@ -384,12 +387,11 @@ class Georeference:
def angle2coords(cls, angle, type): pass
def disable_editing(cls): pass
def enable_editing(cls): pass
- def enh2xyz(cls, map_conversion, coordinates): pass
+ def enh2xyz(cls, coordinates): pass
def get_angle(cls, type): pass
def get_coordinates(cls, io): pass
def get_cursor_location(cls): pass
def get_map_conversion_attributes(cls): pass
- def get_map_conversion(cls): pass
def get_projected_crs_attributes(cls): pass
def get_true_north_attributes(cls): pass
def import_map_conversion(cls): pass
@@ -402,7 +404,7 @@ class Georeference:
def set_ifc_grid_north(cls): pass
def set_ifc_true_north(cls): pass
def set_vector_coordinates(cls, vector_coordinates, type): pass
- def xyz2enh(cls, map_conversion, coordinates): pass
+ def xyz2enh(cls, coordinates): pass
@interface
@@ -446,7 +448,7 @@ class Loader:
@interface
class Material:
- def add_default_material_object(cls): pass
+ def add_default_material_object(cls, name): pass
def add_material_to_set(cls, material_set, material): pass
def delete_object(cls, obj): pass
def disable_editing_material(cls): pass
@@ -810,6 +812,13 @@ class Spatial:
def set_relative_object_matrix(cls, target_obj, relative_to_obj, matrix): pass
def show_scene_objects(cls): pass
#HERE STARTS SPATIAL TOOL
+ def is_bounding_class(cls, visible_element): pass
+ def get_space_polygon_from_context_visible_objects(cls, x, y): pass
+ def get_boundary_lines_from_context_visible_objects(cls, visible_objects): pass
+ def get_gross_mesh_from_element(cls, visible_element): pass
+ def create_mesh_from_shape(cls, shape): pass
+ def get_x_y_z_h_mat_from_active_obj(cls, active_obj): pass
+ def get_x_y_z_h_mat_from_cursor(cls): pass
def get_union_shape_from_selected_objects(cls): pass
def get_boundary_elements(cls, selected_objects): pass
def get_polygons(cls, boundary_elements): pass
@@ -820,17 +829,31 @@ class Spatial:
def get_buffered_poly_from_linear_ring(cls, linear_ring): pass
def get_bmesh_from_polygon(cls, poly, h): pass
def get_named_obj_from_bmesh(cls, name, bmesh): pass
+ def get_named_obj_from_mesh(cls, name, mesh): pass
+ def get_named_mesh_from_bmesh(cls, name, bmesh): pass
+ def get_transformed_mesh_from_local_to_global(cls, mesh): pass
+ def edit_active_space_obj_from_mesh(cls, mesh): pass
def set_obj_origin_to_bboxcenter(cls, obj): pass
- def get_active_obj_z(cls, obj): pass
+ def set_obj_origin_to_cursor_position(cls, obj): pass
+ def get_selected_objects(cls): pass
+ def get_active_obj(cls): pass
+ def get_active_obj_z(cls): pass
+ def get_active_obj_height(cls): pass
+ def get_relating_type_id(cls): pass
def traslate_obj_to_z_location(cls, obj): pass
def link_obj_to_active_collection(cls, obj): pass
def get_2d_vertices_from_obj(cls, obj): pass
def assign_swept_area_outer_curve_from_2d_vertices(cls, obj, vertices): pass
def get_body_representation(cls, obj): pass
+ def assign_ifcspace_class_to_obj(cls, obj): pass
def assign_type_to_obj(cls, obj): pass
+ def assign_relating_type_to_element(cls, ifc, Type, element, relating_type): pass
def regen_obj_representation(cls, ifc, geometry, obj, body): pass
def toggle_spaces_visibility_wired_and_textured(cls, spaces): pass
+@interface
+class Covering:
+ def get_z_from_ceiling_height(cls): pass
@interface
class Structural:
@@ -898,6 +921,7 @@ class System:
def run_geometry_edit_object_placement(cls, obj=None): pass
def run_root_assign_class(cls, obj=None, ifc_class=None, predefined_type=None, should_add_representation=True, context=None, ifc_representation_class=None): pass
def select_system_products(cls, system): pass
+ def set_active_edited_system(cls, system): pass
def set_active_system(cls, system): pass
diff --git a/src/blenderbim/blenderbim/libs/desktop/windows_bbim_association.reg b/src/blenderbim/blenderbim/libs/desktop/windows_bbim_association.reg
new file mode 100644
index 0000000000..33451e8dc7
--- /dev/null
+++ b/src/blenderbim/blenderbim/libs/desktop/windows_bbim_association.reg
@@ -0,0 +1,4 @@
+Windows Registry Editor Version 5.00
+
+[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ifc]
+[-]
\ No newline at end of file
diff --git a/src/blenderbim/blenderbim/tool/__init__.py b/src/blenderbim/blenderbim/tool/__init__.py
index 54f5e9ea57..5b63b278d7 100644
--- a/src/blenderbim/blenderbim/tool/__init__.py
+++ b/src/blenderbim/blenderbim/tool/__init__.py
@@ -47,6 +47,7 @@ from blenderbim.tool.resource import Resource
from blenderbim.tool.root import Root
from blenderbim.tool.sequence import Sequence
from blenderbim.tool.spatial import Spatial
+from blenderbim.tool.covering import Covering
from blenderbim.tool.structural import Structural
from blenderbim.tool.style import Style
from blenderbim.tool.surveyor import Surveyor
diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py
index d544a67787..59b79b9e57 100644
--- a/src/blenderbim/blenderbim/tool/blender.py
+++ b/src/blenderbim/blenderbim/tool/blender.py
@@ -185,6 +185,11 @@ class Blender:
for attr in VIEWPORT_ATTRIBUTES:
setattr(region_3d, attr, data[attr])
+ @classmethod
+ def set_viewport_tool(cls, tool_name):
+ with bpy.context.temp_override(**tool.Blender.get_viewport_context()):
+ bpy.ops.wm.tool_set_by_id(name=tool_name)
+
@classmethod
def get_shader_editor_context(cls):
for screen in bpy.data.screens:
@@ -197,6 +202,15 @@ class Blender:
@classmethod
def copy_node_graph(cls, material_to, material_from):
+
+ # https://projects.blender.org/blender/blender/issues/108763
+ if bpy.app.version >= (4, 0):
+ print(
+ "WARNING. Copying node graph is not yet supported on Blender 4.0+ due Blender bug, "
+ f"copying node graph from {material_from.name} to {material_to.name} will be skipped"
+ )
+ return
+
temp_override = cls.get_shader_editor_context()
shader_editor = temp_override["space"]
@@ -239,6 +253,15 @@ class Blender:
def update_viewport(cls):
tool.Blender.get_viewport_context()["area"].tag_redraw()
+ @classmethod
+ def force_depsgraph_update(cls):
+ """useful if you need to trigger callbacks like `depsgraph_update_pre`"""
+ # blender is requiring some ID to be changed
+ # to trigger depsgraph update
+ scene = bpy.context.scene
+ scene.show_subframe = scene.show_subframe
+ bpy.context.view_layer.update()
+
@classmethod
def ensure_unique_name(cls, name, objects, iteration=0):
"""returns a unique name for the given name and dictionary of objects
@@ -343,6 +366,8 @@ class Blender:
"max_y": bound_box[6][1],
"min_z": bound_box[0][2],
"max_z": bound_box[6][2],
+ "min_point": Vector(bound_box[0]),
+ "max_point": Vector(bound_box[6]),
"center": (Vector(bound_box[6]) + Vector(bound_box[0])) / 2,
}
return bbox_dict
@@ -355,9 +380,10 @@ class Blender:
active_object.select_set(True)
@classmethod
- def set_objects_selection(cls, context, active_object, selected_objects):
- for obj in context.selected_objects:
- obj.select_set(False)
+ def set_objects_selection(cls, context, active_object, selected_objects, clear_previous_selection=True):
+ if clear_previous_selection:
+ for obj in context.selected_objects:
+ obj.select_set(False)
for obj in selected_objects:
obj.select_set(True)
context.view_layer.objects.active = active_object
diff --git a/src/blenderbim/blenderbim/tool/covering.py b/src/blenderbim/blenderbim/tool/covering.py
index cfbae2f807..decc60bc06 100644
--- a/src/blenderbim/blenderbim/tool/covering.py
+++ b/src/blenderbim/blenderbim/tool/covering.py
@@ -32,6 +32,10 @@ from shapely import Polygon, MultiPolygon
class Covering(blenderbim.core.tool.Covering):
@classmethod
+ def get_z_from_ceiling_height(cls):
+ props = bpy.context.scene.BIMCoveringProperties
+ return props.ceiling_height
+
# def toggle_spaces_visibility_wired_and_textured(cls, spaces):
# first_obj = tool.Ifc.get_object(spaces[0])
# if bpy.data.objects[first_obj.name].display_type == "TEXTURED":
diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py
index ae75535699..9b568bb365 100644
--- a/src/blenderbim/blenderbim/tool/drawing.py
+++ b/src/blenderbim/blenderbim/tool/drawing.py
@@ -205,11 +205,14 @@ class Drawing(blenderbim.core.tool.Drawing):
return rep
@classmethod
- def create_camera(cls, name, matrix):
+ def create_camera(cls, name, matrix, location_hint):
camera = bpy.data.objects.new(name, bpy.data.cameras.new(name))
camera.location = (0, 0, 1.5) # The view shall be 1.5m above the origin
camera.data.show_limits = True
- camera.data.type = "ORTHO"
+ if location_hint == "PERSPECTIVE":
+ camera.data.type = "PERSP"
+ else:
+ camera.data.type = "ORTHO"
camera.data.ortho_scale = 50 # The default of 6m is too small
camera.data.clip_start = 0.002 # 2mm is close to zero but allows any GPU-drawn lines to be visible.
camera.data.clip_end = 10 # A slightly more reasonable default
@@ -487,6 +490,8 @@ class Drawing(blenderbim.core.tool.Drawing):
return mathutils.Matrix(((0, 0, -1, x), (-1, 0, 0, y), (0, 1, 0, z), (0, 0, 0, 1)))
elif location_hint == "WEST":
return mathutils.Matrix(((0, 0, 1, x), (1, 0, 0, y), (0, 1, 0, z), (0, 0, 0, 1)))
+ elif target_view == "MODEL_VIEW":
+ return mathutils.Matrix(((1, 0, 0, x), (0, 1, 0, y), (0, 0, 1, z), (0, 0, 0, 1)))
return mathutils.Matrix()
@classmethod
@@ -628,16 +633,11 @@ class Drawing(blenderbim.core.tool.Drawing):
camera.show_limits = True
if camera_type == "ORTHO":
- camera.ortho_scale = width if width > height else height
camera.clip_start = 0.002 # Technically 0, but Blender doesn't allow this, so 2mm it is!
camera.clip_end = depth
- if width > height:
- camera.BIMCameraProperties.raster_x = 1000
- camera.BIMCameraProperties.raster_y = round(1000 * (height / width))
- else:
- camera.BIMCameraProperties.raster_x = round(1000 * (width / height))
- camera.BIMCameraProperties.raster_y = 1000
+ camera.BIMCameraProperties.width = width
+ camera.BIMCameraProperties.height = height
elif camera_type == "PERSP":
abs_min_z = abs(min(z))
abs_max_z = abs(max(z))
@@ -645,14 +645,13 @@ class Drawing(blenderbim.core.tool.Drawing):
camera.clip_end = abs_min_z
max_res = 1000
+ camera.BIMCameraProperties.width = width
+ camera.BIMCameraProperties.height = height
+
if width > height:
fov = 2 * math.atan(width / (2 * abs_min_z))
- camera.BIMCameraProperties.raster_x = max_res
- camera.BIMCameraProperties.raster_y = int(max_res / (width / height))
else:
fov = 2 * math.atan(height / (2 * abs_min_z))
- camera.BIMCameraProperties.raster_y = max_res
- camera.BIMCameraProperties.raster_x = int(max_res * (width / height))
camera.angle = fov
@@ -849,6 +848,10 @@ class Drawing(blenderbim.core.tool.Drawing):
def open_svg(cls, uri):
cls.open_with_user_command(bpy.context.preferences.addons["blenderbim"].preferences.svg_command, uri)
+ @classmethod
+ def open_layout_svg(cls, uri):
+ cls.open_with_user_command(bpy.context.preferences.addons["blenderbim"].preferences.layout_svg_command, uri)
+
@classmethod
def run_root_assign_class(
cls,
@@ -954,6 +957,8 @@ class Drawing(blenderbim.core.tool.Drawing):
return (location.Name or "UNNAMED").upper() + " " + target_view.split("_")[0]
elif target_view in ("SECTION_VIEW", "ELEVATION_VIEW") and location_hint:
return location_hint + " " + target_view.split("_")[0]
+ elif target_view == "MODEL_VIEW" and location_hint:
+ return location_hint
return target_view
@classmethod
@@ -1642,30 +1647,34 @@ class Drawing(blenderbim.core.tool.Drawing):
for element in filtered_elements:
obj = tool.Ifc.get_object(element)
+ current_representation = tool.Geometry.get_active_representation(obj)
+ if current_representation:
+ subcontext = current_representation.ContextOfItems
+ current_representation_subcontext = tool.Geometry.get_subcontext_parameters(subcontext)
+
for subcontext in subcontexts:
+ # prioritize already active representation if it matches the subcontext
+ # (element could have multiple representations in the same subcontext)
+ if current_representation and subcontext == current_representation_subcontext:
+ break
priority_representation = ifcopenshell.util.representation.get_representation(element, *subcontext)
if priority_representation:
- current_representation = tool.Geometry.get_active_representation(obj)
- if current_representation != priority_representation:
- blenderbim.core.geometry.switch_representation(
- tool.Ifc,
- tool.Geometry,
- obj=obj,
- representation=priority_representation,
- should_reload=False,
- is_global=True,
- should_sync_changes_first=True,
- )
+ blenderbim.core.geometry.switch_representation(
+ tool.Ifc,
+ tool.Geometry,
+ obj=obj,
+ representation=priority_representation,
+ should_reload=False,
+ is_global=True,
+ should_sync_changes_first=True,
+ )
break
@classmethod
def get_elements_in_camera_view(cls, camera, objs):
- if bpy.context.scene.render.resolution_x > bpy.context.scene.render.resolution_y:
- x = camera.data.ortho_scale / 2
- y = (camera.data.BIMCameraProperties.raster_y / camera.data.BIMCameraProperties.raster_x) * x
- else:
- y = camera.data.ortho_scale / 2
- x = (camera.data.BIMCameraProperties.raster_x / camera.data.BIMCameraProperties.raster_y) * y
+ props = camera.data.BIMCameraProperties
+ x = props.width
+ y = props.height
camera_inverse_matrix = camera.matrix_world.inverted()
return set(
diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py
index 8e624d61f0..219ba0119b 100644
--- a/src/blenderbim/blenderbim/tool/geometry.py
+++ b/src/blenderbim/blenderbim/tool/geometry.py
@@ -28,7 +28,7 @@ import blenderbim.core.style
import blenderbim.core.spatial
import blenderbim.tool as tool
import blenderbim.bim.import_ifc
-from math import radians
+from math import radians, pi
from mathutils import Vector, Matrix
from blenderbim.bim.ifc import IfcStore
@@ -37,12 +37,16 @@ class Geometry(blenderbim.core.tool.Geometry):
@classmethod
def change_object_data(cls, obj, data, is_global=False):
if is_global:
- if obj.mode == "EDIT":
- raise Exception("user_remap is not supported in EDIT mode")
- obj.data.user_remap(data)
+ cls.replace_object_data_globally(obj.data, data)
else:
obj.data = data
+ @classmethod
+ def replace_object_data_globally(cls, old_data, new_data):
+ if getattr(old_data, "is_editmode", None):
+ raise Exception("user_remap is not supported for meshes in EDIT mode")
+ old_data.user_remap(new_data)
+
@classmethod
def clear_cache(cls, element):
cache = IfcStore.get_cache()
@@ -66,7 +70,8 @@ class Geometry(blenderbim.core.tool.Geometry):
context_override = {}
context_override["object"] = context_override["active_object"] = obj
context_override["selected_objects"] = context_override["selected_editable_objects"] = [obj]
- bpy.ops.object.transform_apply(context_override, location=False, rotation=False, scale=True)
+ with bpy.context.temp_override(**context_override):
+ bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
else:
obj.scale = Vector((1.0, 1.0, 1.0))
@@ -297,6 +302,32 @@ class Geometry(blenderbim.core.tool.Geometry):
if obj.data and hasattr(obj.data, "BIMMeshProperties") and obj.data.BIMMeshProperties.ifc_definition_id:
return tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
+ @classmethod
+ def get_active_representation_context(cls, obj):
+ active_representation = tool.Geometry.get_active_representation(obj)
+ if active_representation:
+ return active_representation.ContextOfItems
+ return ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW")
+
+ @classmethod
+ def get_subcontext_parameters(cls, subcontext):
+ return (
+ subcontext.ContextType,
+ subcontext.ContextIdentifier,
+ getattr(subcontext, "TargetView", None),
+ )
+
+ @classmethod
+ def get_representation_by_context(cls, element, context):
+ if element.is_a("IfcProduct") and element.Representation:
+ for r in element.Representation.Representations:
+ if r.ContextOfItems == context:
+ return r
+ elif element.is_a("IfcTypeProduct") and element.RepresentationMaps:
+ for r in element.RepresentationMaps:
+ if r.MappedRepresentation.ContextOfItems == context:
+ return r.MappedRepresentation
+
@classmethod
def get_cartesian_point_coordinate_offset(cls, obj):
props = bpy.context.scene.BIMGeoreferenceProperties
@@ -449,23 +480,28 @@ class Geometry(blenderbim.core.tool.Geometry):
element = tool.Ifc.get_entity(obj)
settings = ifcopenshell.geom.settings()
settings.set(settings.WELD_VERTICES, True)
-
context = representation.ContextOfItems
- if context.ContextIdentifier == "Body" and context.TargetView == "MODEL_VIEW":
+
+ if element.is_a("IfcTypeProduct"):
+ # You may only specify a single representation when creating shapes for types
try:
- if element.is_a("IfcTypeProduct") or not apply_openings:
- shape = ifcopenshell.geom.create_shape(settings, representation)
- else:
- shape = ifcopenshell.geom.create_shape(settings, element)
+ shape = ifcopenshell.geom.create_shape(settings, representation)
except:
settings.set(settings.INCLUDE_CURVES, True)
- if element.is_a("IfcTypeProduct") or not apply_openings:
- shape = ifcopenshell.geom.create_shape(settings, representation)
- else:
- shape = ifcopenshell.geom.create_shape(settings, element)
+ shape = ifcopenshell.geom.create_shape(settings, representation)
else:
- settings.set(settings.INCLUDE_CURVES, True)
- shape = ifcopenshell.geom.create_shape(settings, representation)
+ if not apply_openings:
+ settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, True)
+
+ if context.ContextIdentifier == "Body" and context.TargetView == "MODEL_VIEW":
+ try:
+ shape = ifcopenshell.geom.create_shape(settings, element, representation)
+ except:
+ settings.set(settings.INCLUDE_CURVES, True)
+ shape = ifcopenshell.geom.create_shape(settings, element, representation)
+ else:
+ settings.set(settings.INCLUDE_CURVES, True)
+ shape = ifcopenshell.geom.create_shape(settings, element, representation)
ifc_importer = blenderbim.bim.import_ifc.IfcImporter(ifc_import_settings)
ifc_importer.file = tool.Ifc.get()
@@ -596,6 +632,18 @@ class Geometry(blenderbim.core.tool.Geometry):
return cls.resolve_mapped_representation(representation.Items[0].MappingSource.MappedRepresentation)
return representation
+ @classmethod
+ def unresolve_type_representation(cls, representation, occurence):
+ if not ifcopenshell.util.element.get_type(occurence):
+ return representation
+
+ if representation.RepresentationType == "MappedRepresentation":
+ return representation
+
+ for mapped_representation in occurence.Representation.Representations:
+ if cls.resolve_mapped_representation(mapped_representation) == representation:
+ return mapped_representation
+
@classmethod
def run_geometry_update_representation(cls, obj=None):
bpy.ops.bim.update_representation(obj=obj.name, ifc_representation_class="")
@@ -641,3 +689,25 @@ class Geometry(blenderbim.core.tool.Geometry):
@classmethod
def get_model_representations(cls):
return tool.Ifc.get().by_type("IfcShapeRepresentation")
+
+ @classmethod
+ def flip_object(cls, obj, flip_local_axes):
+ assert len(flip_local_axes) == 2, "flip_local_axes must be two axes to flip"
+ rotation_axis = next(i for i in "XYZ" if i not in flip_local_axes)
+ rotation_axis_i = "XYZ".index(rotation_axis)
+
+ bb_data = tool.Blender.get_object_bounding_box(obj)
+ # min max points of rotated plane of origin based bounding box
+ min_point = Vector([min(i, 0) for i in bb_data["min_point"]])
+ max_point = Vector([max(i, 0) for i in bb_data["max_point"]])
+ # keep it in rotated plane only
+ max_point[rotation_axis_i] = min_point[rotation_axis_i]
+
+ # to compensate for flipped two axes
+ # we adjust new max point to match previous min point (or vice versa)
+ original_min_point = obj.matrix_world @ min_point
+ obj.matrix_world = obj.matrix_world @ Matrix.Rotation(pi, 4, rotation_axis)
+ new_max_point = obj.matrix_world @ max_point
+ obj.matrix_world.translation += original_min_point - new_max_point
+
+ bpy.context.view_layer.update()
diff --git a/src/blenderbim/blenderbim/tool/georeference.py b/src/blenderbim/blenderbim/tool/georeference.py
index 52c31de1a2..037b5c6645 100644
--- a/src/blenderbim/blenderbim/tool/georeference.py
+++ b/src/blenderbim/blenderbim/tool/georeference.py
@@ -174,15 +174,7 @@ class Georeference(blenderbim.core.tool.Georeference):
)
@classmethod
- def get_map_conversion(cls):
- if tool.Ifc.get_schema() == "IFC2X3":
- return
- for context in tool.Ifc.get().by_type("IfcGeometricRepresentationContext", include_subtypes=False):
- if context.HasCoordinateOperation:
- return context.HasCoordinateOperation[0]
-
- @classmethod
- def xyz2enh(cls, coordinates, map_conversion):
+ def xyz2enh(cls, coordinates):
props = bpy.context.scene.BIMGeoreferenceProperties
if props.has_blender_offset:
coordinates = ifcopenshell.util.geolocation.xyz2enh(
@@ -196,53 +188,12 @@ class Georeference(blenderbim.core.tool.Georeference):
float(props.blender_x_axis_ordinate),
1.0,
)
- if map_conversion:
- unit = map_conversion.TargetCRS.MapUnit
- e = map_conversion.Eastings
- n = map_conversion.Northings
- h = map_conversion.OrthogonalHeight
- if unit:
- scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
- e = ifcopenshell.util.unit.convert(e, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- n = ifcopenshell.util.unit.convert(n, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- h = ifcopenshell.util.unit.convert(h, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- coordinates = ifcopenshell.util.geolocation.xyz2enh(
- coordinates[0],
- coordinates[1],
- coordinates[2],
- e,
- n,
- h,
- map_conversion.XAxisAbscissa or 1.0,
- map_conversion.XAxisOrdinate or 0.0,
- map_conversion.Scale or 1.0,
- )
- return coordinates
+ return ifcopenshell.util.geolocation.auto_xyz2enh(tool.Ifc.get(), *coordinates)
@classmethod
- def enh2xyz(cls, coordinates, map_conversion):
+ def enh2xyz(cls, coordinates):
+ coordinates = ifcopenshell.util.geolocation.auto_enh2xyz(tool.Ifc.get(), *coordinates)
props = bpy.context.scene.BIMGeoreferenceProperties
- if map_conversion:
- unit = map_conversion.TargetCRS.MapUnit
- e = map_conversion.Eastings
- n = map_conversion.Northings
- h = map_conversion.OrthogonalHeight
- if unit:
- scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
- e = ifcopenshell.util.unit.convert(e, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- n = ifcopenshell.util.unit.convert(n, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- h = ifcopenshell.util.unit.convert(h, getattr(unit, "Prefix", None), unit.Name, None, None) / scale
- coordinates = ifcopenshell.util.geolocation.enh2xyz(
- coordinates[0],
- coordinates[1],
- coordinates[2],
- e,
- n,
- h,
- map_conversion.XAxisAbscissa or 1.0,
- map_conversion.XAxisOrdinate or 0.0,
- map_conversion.Scale or 1.0,
- )
if props.has_blender_offset:
coordinates = ifcopenshell.util.geolocation.enh2xyz(
coordinates[0],
@@ -316,7 +267,7 @@ class Georeference(blenderbim.core.tool.Georeference):
rows = parse_csv(filepath)
vertices = []
for row in rows:
- coordinates = cls.enh2xyz([float(row[0]), float(row[1]), float(row[2])], map_conversion)
+ coordinates = cls.enh2xyz([float(row[0]), float(row[1]), float(row[2])])
vertices.append(coordinates)
mesh = bpy.data.meshes.new("mesh")
diff --git a/src/blenderbim/blenderbim/tool/ifcgit.py b/src/blenderbim/blenderbim/tool/ifcgit.py
index 6dd445c498..a4f60d7bba 100644
--- a/src/blenderbim/blenderbim/tool/ifcgit.py
+++ b/src/blenderbim/blenderbim/tool/ifcgit.py
@@ -8,6 +8,8 @@ try:
except:
print("Warning: GitPython not available.")
import bpy
+import logging
+from blenderbim.bim import import_ifc
from blenderbim.bim.ifc import IfcStore
import blenderbim.tool as tool
@@ -220,7 +222,14 @@ class IfcGit:
bpy.data.orphans_purge(do_recursive=True)
- bpy.ops.bim.load_project(filepath=path_ifc, should_start_fresh_session=False)
+ settings = import_ifc.IfcImportSettings.factory(bpy.context, path_ifc, logging.getLogger("ImportIFC"))
+ settings.should_setup_viewport_camera = False
+ ifc_importer = import_ifc.IfcImporter(settings)
+ ifc_importer.execute()
+ tool.Project.load_pset_templates()
+ tool.Project.load_default_thumbnails()
+ tool.Project.set_default_context()
+ tool.Project.set_default_modeling_dimensions()
bpy.ops.object.select_all(action="DESELECT")
@classmethod
diff --git a/src/blenderbim/blenderbim/tool/loader.py b/src/blenderbim/blenderbim/tool/loader.py
index 5604f3f896..5c2b67433b 100644
--- a/src/blenderbim/blenderbim/tool/loader.py
+++ b/src/blenderbim/blenderbim/tool/loader.py
@@ -80,6 +80,7 @@ class Loader(blenderbim.core.tool.Loader):
if transparency := surface_style.get("Transparency", None):
alpha = 1 - transparency
blender_material.diffuse_color = surface_style["SurfaceColour"][:3] + (alpha,)
+ blender_material.use_nodes = False
@classmethod
def restart_material_node_tree(cls, blender_material):
diff --git a/src/blenderbim/blenderbim/tool/material.py b/src/blenderbim/blenderbim/tool/material.py
index 0cf0aacdb1..ea790996ee 100644
--- a/src/blenderbim/blenderbim/tool/material.py
+++ b/src/blenderbim/blenderbim/tool/material.py
@@ -27,8 +27,8 @@ import ifcopenshell.util.element
class Material(blenderbim.core.tool.Material):
@classmethod
- def add_default_material_object(cls):
- return bpy.data.materials.new("Default")
+ def add_default_material_object(cls, name):
+ return bpy.data.materials.new(name or "Default")
@classmethod
def delete_object(cls, obj):
@@ -80,6 +80,7 @@ class Material(blenderbim.core.tool.Material):
new.total_elements = len(
ifcopenshell.util.element.get_elements_by_material(tool.Ifc.get(), material)
)
+ new.has_style = bool(material.HasRepresentation)
return
for material in materials:
new = props.materials.add()
diff --git a/src/blenderbim/blenderbim/tool/misc.py b/src/blenderbim/blenderbim/tool/misc.py
index cedb440ee0..293e877a09 100644
--- a/src/blenderbim/blenderbim/tool/misc.py
+++ b/src/blenderbim/blenderbim/tool/misc.py
@@ -118,13 +118,15 @@ class Misc(blenderbim.core.tool.Misc):
mod = new_obj.modifiers.new(type="BOOLEAN", name="Boolean")
mod.object = cutter
- bpy.ops.object.modifier_apply({"object": new_obj}, modifier="Boolean")
+ with bpy.context.temp_override(object=new_obj):
+ bpy.ops.object.modifier_apply(modifier="Boolean")
bm_flipped.to_mesh(cutter_mesh)
mod = obj.modifiers.new(type="BOOLEAN", name="Boolean")
mod.object = cutter
- bpy.ops.object.modifier_apply({"object": obj}, modifier="Boolean")
+ with bpy.context.temp_override(object=obj):
+ bpy.ops.object.modifier_apply(modifier="Boolean")
bm.to_mesh(cutter_mesh)
diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py
index 47ae276c3a..89db72daf4 100644
--- a/src/blenderbim/blenderbim/tool/model.py
+++ b/src/blenderbim/blenderbim/tool/model.py
@@ -17,7 +17,10 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
+import json
import bmesh
+import collections
+import numpy as np
import ifcopenshell
import ifcopenshell.util.unit
import ifcopenshell.util.placement
@@ -26,12 +29,12 @@ import blenderbim.core.tool
import blenderbim.tool as tool
import blenderbim.core.geometry as geometry
from mathutils import Matrix, Vector
+from copy import deepcopy
+from functools import partial
from blenderbim.bim import import_ifc
from blenderbim.bim.module.geometry.helper import Helper
from blenderbim.bim.module.model.data import AuthoringData, RailingData, RoofData, WindowData, DoorData
-import collections
-import json
-import numpy as np
+from ifcopenshell.util.shape_builder import V, ShapeBuilder
class Model(blenderbim.core.tool.Model):
@@ -438,17 +441,9 @@ class Model(blenderbim.core.tool.Model):
ifc_importer.calculate_unit_scale()
ifc_importer.process_context_filter()
ifc_importer.material_creator.load_existing_materials()
- openings = set(openings)
- openings -= ifc_importer.create_products(openings)
- for opening in openings or []:
- if tool.Ifc.get_object(opening):
- continue
- opening_obj = ifc_importer.create_product(opening)
- if obj:
- opening_obj.parent = obj
- opening_obj.matrix_parent_inverse = obj.matrix_world.inverted()
- for obj in ifc_importer.added_data.values():
- bpy.context.scene.collection.objects.link(obj)
+ ifc_importer.create_generic_elements(set(openings))
+ for opening_obj in ifc_importer.added_data.values():
+ bpy.context.scene.collection.objects.link(opening_obj)
return ifc_importer.added_data.values()
@classmethod
@@ -482,21 +477,64 @@ class Model(blenderbim.core.tool.Model):
return {"thickness": thickness, "offset": offset, "direction_sense": direction_sense}
@classmethod
- def get_manual_booleans(cls, element):
- body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
- if not body:
- return []
+ def get_booleans(cls, element=None, representation=None):
+ if representation is None:
+ representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
+ if not representation:
+ return []
booleans = []
- items = list(body.Items)
+ items = list(representation.Items)
while items:
item = items.pop()
- if item.is_a() == "IfcBooleanResult":
+ if item.is_a("IfcBooleanResult"):
booleans.append(item)
items.append(item.FirstOperand)
- elif item.is_a("IfcBooleanClippingResult"):
- items.append(item.FirstOperand)
return booleans
+ @classmethod
+ def get_manual_booleans(cls, element, representation=None):
+ pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean")
+ if not pset:
+ return []
+ boolean_ids = json.loads(pset["Data"])
+ if representation is None:
+ representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
+ if not representation:
+ return []
+ booleans = [b for b in cls.get_booleans(element) if b.id() in boolean_ids]
+ return booleans
+
+ @classmethod
+ def mark_manual_booleans(cls, element, booleans):
+ pset_data = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean")
+ boolean_ids = [b.id() for b in booleans]
+ if pset_data:
+ pset = tool.Ifc.get().by_id(pset_data["id"])
+ data = json.loads(pset_data["Data"])
+ data.extend(boolean_ids)
+ data = list(set(data))
+ else:
+ pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Boolean")
+ data = boolean_ids
+ data = tool.Ifc.get().createIfcText(json.dumps(data))
+ ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
+
+ @classmethod
+ def unmark_manual_booleans(cls, element, booleans):
+ pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean")
+ if not pset:
+ return
+ boolean_ids = [b.id() for b in booleans]
+ data = set(json.loads(pset["Data"]))
+ data -= set(boolean_ids)
+ data = list(data)
+ pset = tool.Ifc.get().by_id(pset["id"])
+ if data:
+ data = tool.Ifc.get().createIfcText(json.dumps(data))
+ ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
+ else:
+ ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
+
@classmethod
def get_flow_segment_axis(cls, obj):
z_values = [v[2] for v in obj.bound_box]
@@ -568,7 +606,7 @@ class Model(blenderbim.core.tool.Model):
else:
obj = tool.Ifc.get_object(element)
array_pset = tool.Pset.get_element_pset(element, "BBIM_Array")
- default_data = '[{"children": []}]'
+ default_data = tool.Ifc.get().createIfcText('[{"children": []}]')
ifcopenshell.api.run(
"pset.edit_pset",
tool.Ifc.get(),
@@ -578,7 +616,7 @@ class Model(blenderbim.core.tool.Model):
tool.Model.regenerate_array(obj, array_data)
- json_data = json.dumps(array_data)
+ json_data = tool.Ifc.get().createIfcText(json.dumps(array_data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=array_pset, properties={"Data": json_data})
for i in range(len(array_data)):
@@ -871,3 +909,249 @@ class Model(blenderbim.core.tool.Model):
@classmethod
def is_parametric_door_active(cls):
return (DoorData.is_loaded or not DoorData.load()) and DoorData.data["pset_data"]
+
+ @classmethod
+ def get_active_stair_calculated_params(cls, pset_data=None):
+ props = bpy.context.active_object.BIMStairProperties
+
+ if props.is_editing:
+ si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
+ number_of_treads = props.number_of_treads
+ height = props.height / si_conversion
+ tread_run = props.tread_run / si_conversion
+ first_tread_run = props.custom_first_last_tread_run[0] / si_conversion
+ last_tread_run = props.custom_first_last_tread_run[1] / si_conversion
+ nosing_length = props.nosing_length / si_conversion
+ else:
+ number_of_treads = pset_data["number_of_treads"]
+ height = pset_data["height"]
+ tread_run = pset_data["tread_run"]
+ # use .get to not break the old .ifc models
+ custom_first_last_tread_run = pset_data.get("custom_first_last_tread_run", (0, 0))
+ first_tread_run, last_tread_run = custom_first_last_tread_run
+ nosing_length = pset_data.get("nosing_length", 0)
+
+ calculated_params = {}
+ number_of_rises = number_of_treads + 1
+ calculated_params["Number of Risers"] = number_of_rises
+ calculated_params["Tread Rise"] = round(height / number_of_rises, 5)
+
+ # calculate stair length
+ n_default_tread_runs = number_of_rises
+ length = 0
+ if first_tread_run != 0:
+ n_default_tread_runs -= 1
+ length += first_tread_run
+ if last_tread_run != 0:
+ n_default_tread_runs -= 1
+ if n_default_tread_runs >= 0:
+ length += last_tread_run
+ length += tread_run * max(n_default_tread_runs, 0)
+ # nosing overlaps
+ # are not part of the tread run
+ # so they don't affect the stair length
+ # except the first tread's nosing
+ if nosing_length > 0: # nosing overlaps
+ length += nosing_length
+ if nosing_length < 0: # tread gaps
+ length += abs(nosing_length) * number_of_treads
+ calculated_params["Length"] = round(length, 5)
+
+ return calculated_params
+
+ @classmethod
+ def generate_stair_2d_profile(
+ cls,
+ number_of_treads,
+ height,
+ width,
+ tread_run,
+ stair_type,
+ # WOOD/STEEL CONCRETE STAIR ARGUMENTS
+ tread_depth=None,
+ # CONCRETE STAIR ARGUMENTS
+ has_top_nib=None,
+ top_slab_depth=None,
+ base_slab_depth=None,
+ custom_first_last_tread_run=(0, 0),
+ nosing_length=0,
+ # CONCRETE GENERIC STAIR ARGUMENTS
+ nosing_depth=0,
+ ):
+ """returns a tuple of stair profile data: (vertices, edges, faces)"""
+ vertices = []
+ edges = []
+ faces = []
+
+ number_of_risers = number_of_treads + 1
+ tread_rise = height / number_of_risers
+ custom_tread_run = any(run != 0 for run in custom_first_last_tread_run)
+ nosing_overlap = max(nosing_length, 0)
+ nosing_tread_gap = -min(nosing_length, 0)
+ nosing_overlap_offset = -V(nosing_overlap, 0)
+
+ def define_generic_stair_treads():
+ vertices.append(Vector([0, 0]))
+ nonlocal nosing_depth, nosing_overlap
+ # avoid weird geometry
+ nosing_depth = min(nosing_depth, tread_rise)
+ nosing_overlap = min(nosing_overlap, tread_run)
+
+ default_tread_edges = np.array(((0, 1), (1, 2)))
+ # horizontal tread line
+ if nosing_overlap == 0:
+ default_tread_verts = (V(0, tread_rise), V(tread_run, tread_rise))
+ elif nosing_depth == 0:
+ default_tread_verts = (V(-nosing_overlap, tread_rise), V(tread_run, tread_rise))
+ else: # nosing_overlap > 0 nosing_depth > 0
+ # kind of L shape
+ default_tread_verts = (
+ V(0, tread_rise - nosing_depth),
+ V(-nosing_overlap, tread_rise - nosing_depth),
+ V(-nosing_overlap, tread_rise),
+ V(tread_run, tread_rise),
+ )
+ add_edges = ((2, 3), (3, 4))
+ default_tread_edges = np.concatenate((default_tread_edges, add_edges))
+ default_tread_offset = Vector([tread_run, tread_rise])
+
+ def get_tread_data(i):
+ if custom_tread_run:
+ current_tread_run = None
+ if i == 0:
+ current_tread_run = custom_first_last_tread_run[0]
+ elif i == number_of_risers - 1:
+ current_tread_run = custom_first_last_tread_run[1]
+
+ if current_tread_run:
+ tread_offset = default_tread_offset.copy()
+ tread_offset.x = current_tread_run
+ tread_verts = deepcopy(default_tread_verts)
+ tread_verts[-1].x = current_tread_run
+ return tread_offset, tread_verts
+ return default_tread_offset, default_tread_verts
+
+ # treads
+ current_offset = V(0, 0)
+ for i in range(number_of_risers):
+ last_vert_i = len(vertices) - 1
+ tread_offset, tread_verts = get_tread_data(i)
+ current_tread_verts = [v + current_offset for v in tread_verts]
+ edges.extend(default_tread_edges + last_vert_i)
+ vertices.extend(current_tread_verts)
+ current_offset += tread_offset
+
+ if stair_type == "WOOD/STEEL":
+ builder = ShapeBuilder(None)
+ # full tread rectangle
+ get_tread_verts = partial(builder.get_rectangle_coords, position=V(0, -(tread_depth - tread_rise)))
+ default_tread_verts = get_tread_verts(size=V(tread_run + nosing_overlap, tread_depth))
+ default_tread_offset = V(tread_run + nosing_tread_gap, tread_rise)
+
+ def get_tread_data(i):
+ if custom_tread_run:
+ current_tread_run = None
+ if i == 0 and custom_first_last_tread_run[0] != 0:
+ current_tread_run = custom_first_last_tread_run[0]
+ elif i == number_of_risers - 1 and custom_first_last_tread_run[1] != 0:
+ current_tread_run = custom_first_last_tread_run[1]
+
+ if current_tread_run:
+ tread_offset = default_tread_offset.copy()
+ tread_offset.x = current_tread_run + nosing_tread_gap
+ tread_verts = get_tread_verts(size=V(current_tread_run + nosing_overlap, tread_depth))
+ return tread_offset, tread_verts
+ return default_tread_offset, default_tread_verts
+
+ # each tread is a separate shape
+ cur_offset = V(0, 0)
+ for i in range(number_of_risers):
+ tread_offset, tread_verts = get_tread_data(i)
+ cur_trade_shape = [v + cur_offset + nosing_overlap_offset for v in tread_verts]
+ vertices.extend(cur_trade_shape)
+
+ cur_vertex = i * 4
+ verts_to_add = (
+ (cur_vertex, cur_vertex + 1),
+ (cur_vertex + 1, cur_vertex + 2),
+ (cur_vertex + 2, cur_vertex + 3),
+ (cur_vertex + 3, cur_vertex),
+ )
+ edges.extend(verts_to_add)
+ cur_offset += tread_offset
+
+ elif stair_type == "GENERIC":
+ define_generic_stair_treads()
+
+ # close the shape
+ last_vert_i = len(vertices)
+ vertices.append(vertices[-1] * V(1, 0))
+ edges.extend([(last_vert_i - 1, last_vert_i), (last_vert_i, 0)])
+
+ elif stair_type == "CONCRETE":
+ define_generic_stair_treads()
+
+ # add the nibs
+ # basically we define stair bottom line as a line at `tread_depth` distance
+ # from the tread diagonal line
+ # we're going it define that line, sample it and abrupt it in case it meets a slab
+ # graph: https://www.desmos.com/calculator/bilmnti3cp
+ tread_diagonal_dir = V(tread_run, tread_rise).normalized()
+ # td_vector is clockwise orthogonal vector
+ td_vector = tread_diagonal_dir.yx * V(1, -1) * tread_depth
+
+ stair_tan = tread_rise / tread_run
+ # s0 is just a sampled point from the bottom line
+ # we stick to the third point as the first point
+ # is affected by customized tread run
+ s0 = V(custom_first_last_tread_run[0] or tread_run, tread_rise) + td_vector
+ # comes from y = stair_tan * x + b
+ b = s0.y - stair_tan * s0.x
+
+ def get_point_on_2d_line(x=None, y=None):
+ if y is None:
+ y = stair_tan * x + b
+ elif x is None:
+ x = (y - b) / stair_tan
+ return V(x, y)
+
+ # top nib
+ last_vert = vertices[-1]
+ last_vertex_i = len(vertices) - 1
+ # NOTE: has_top_nib = False and top_slab_depth are different things
+ if has_top_nib:
+ vertices.append(last_vert + Vector((0, -top_slab_depth)))
+ vertices.append(get_point_on_2d_line(y=last_vert.y - top_slab_depth))
+ edges.append((last_vertex_i, last_vertex_i + 1))
+ edges.append((last_vertex_i + 1, last_vertex_i + 2))
+ else:
+ new_vert = get_point_on_2d_line(last_vert.x)
+ vertices.append(new_vert)
+ edges.append((last_vertex_i, last_vertex_i + 1))
+
+ top_nib_end = len(vertices) - 1
+
+ # bottom nib
+ start_vert = vertices[0]
+ base_point = get_point_on_2d_line(x=start_vert.x)
+ if base_point.y > -base_slab_depth:
+ # stair doesn't meet the slab
+ vertices.append(base_point)
+ edges.append((0, len(vertices) - 1))
+ bottom_nib_end = len(vertices) - 1
+ else:
+ # slab overlaps stair
+ vertices.append(get_point_on_2d_line(y=start_vert.y - base_slab_depth))
+ vertices.append(start_vert + Vector((0, -base_slab_depth)))
+ last_vertex_i = len(vertices) - 1
+ edges.append((0, last_vertex_i))
+ edges.append((last_vertex_i - 1, last_vertex_i))
+ bottom_nib_end = len(vertices) - 2
+
+ # close the shape
+ edges.append((bottom_nib_end, top_nib_end))
+ else:
+ raise Exception(f"Unsupported stair type: {stair_type}")
+
+ vertices = (v.to_3d().xzy for v in vertices)
+ return (vertices, edges, faces)
diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py
index f838703059..1e74db5175 100644
--- a/src/blenderbim/blenderbim/tool/spatial.py
+++ b/src/blenderbim/blenderbim/tool/spatial.py
@@ -20,6 +20,7 @@ import bpy
import bmesh
import shapely
import ifcopenshell
+import blenderbim.core.type
import blenderbim.core.tool
import blenderbim.core.root
import blenderbim.core.spatial
@@ -77,6 +78,7 @@ class Spatial(blenderbim.core.tool.Spatial):
@classmethod
def enable_editing(cls, obj):
obj.BIMObjectSpatialProperties.is_editing = True
+ obj.BIMObjectSpatialProperties.relating_container_object = None
@classmethod
def get_container(cls, element):
@@ -270,6 +272,121 @@ class Spatial(blenderbim.core.tool.Spatial):
#HERE STARTS SPATIAL TOOL
+ @classmethod
+ def is_bounding_class(cls, visible_element):
+ for ifc_class in ["IfcWall", "IfcColumn", "IfcMember", "IfcVirtualElement", "IfcPlate"]:
+ if visible_element.is_a(ifc_class):
+ return True
+ return False
+
+ @classmethod
+ def get_space_polygon_from_context_visible_objects(cls, x, y):
+ boundary_lines = cls.get_boundary_lines_from_context_visible_objects()
+ unioned_boundaries = shapely.union_all(shapely.GeometryCollection(boundary_lines))
+ closed_polygons = shapely.polygonize(unioned_boundaries.geoms)
+ space_polygon = None
+ for polygon in closed_polygons.geoms:
+ if shapely.contains_xy(polygon, x, y):
+ space_polygon = shapely.force_3d(polygon)
+ return space_polygon
+
+ @classmethod
+ def get_boundary_lines_from_context_visible_objects(cls):
+ calculation_rl = bpy.context.scene.BIMModelProperties.rl3
+ collection = bpy.context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ cut_point = collection_obj.matrix_world.translation.copy() + Vector((0, 0, calculation_rl))
+ cut_normal = Vector((0, 0, 1))
+ boundary_lines = []
+
+ for obj in bpy.context.visible_objects:
+ visible_element = tool.Ifc.get_entity(obj)
+
+ if (
+ not visible_element
+ or obj.type != "MESH"
+ or not cls.is_bounding_class(visible_element)
+ or not tool.Drawing.is_intersecting_plane(obj, cut_point, cut_normal)
+ ):
+ continue
+
+ old_mesh = None
+ if visible_element.HasOpenings:
+ new_mesh = cls.get_gross_mesh_from_element(visible_element)
+ old_mesh = obj.data
+ obj.data = new_mesh
+
+ local_cut_point = obj.matrix_world.inverted() @ cut_point
+ local_cut_normal = obj.matrix_world.inverted().to_quaternion() @ cut_normal
+ verts, edges = tool.Drawing.bisect_mesh_with_plane(obj, local_cut_point, local_cut_normal)
+
+ if old_mesh:
+ obj.data = old_mesh
+ bpy.data.meshes.remove(new_mesh)
+
+ for edge in edges or []:
+ boundary_lines.append(
+ shapely.LineString(
+ [Vector((round(x, 3) for x in verts[edge[0]])), Vector((round(x, 3) for x in verts[edge[1]]))]
+ )
+ )
+
+ return boundary_lines
+
+ @classmethod
+ def get_gross_mesh_from_element(cls, visible_element):
+ gross_settings = ifcopenshell.geom.settings()
+ gross_settings.set(gross_settings.DISABLE_OPENING_SUBTRACTIONS, True)
+ new_mesh = cls.create_mesh_from_shape(ifcopenshell.geom.create_shape(gross_settings, visible_element))
+ return new_mesh
+
+ @classmethod
+ def create_mesh_from_shape(cls, shape):
+ geometry = shape.geometry
+ mesh = bpy.data.meshes.new("tmp")
+ verts = geometry.verts
+ if geometry.faces:
+ num_vertices = len(verts) // 3
+ total_faces = len(geometry.faces)
+ loop_start = range(0, total_faces, 3)
+ num_loops = total_faces // 3
+ loop_total = [3] * num_loops
+ num_vertex_indices = len(geometry.faces)
+
+ mesh.vertices.add(num_vertices)
+ mesh.vertices.foreach_set("co", verts)
+ mesh.loops.add(num_vertex_indices)
+ mesh.loops.foreach_set("vertex_index", geometry.faces)
+ mesh.polygons.add(num_loops)
+ mesh.polygons.foreach_set("loop_start", loop_start)
+ mesh.polygons.foreach_set("loop_total", loop_total)
+ mesh.polygons.foreach_set("use_smooth", [0] * total_faces)
+ mesh.update()
+ return mesh
+
+ @classmethod
+ def get_x_y_z_h_mat_from_active_obj(cls, active_obj):
+ element = tool.Ifc.get_entity(active_obj)
+ mat = active_obj.matrix_world
+ local_bbox_center = 0.125 * sum((Vector(b) for b in active_obj.bound_box), Vector())
+ global_bbox_center = mat @ local_bbox_center
+ x = global_bbox_center.x
+ y = global_bbox_center.y
+ z = (mat @ Vector(active_obj.bound_box[0])).z
+
+ h = active_obj.dimensions.z
+ return x, y, z, h, mat
+
+ @classmethod
+ def get_x_y_z_h_mat_from_cursor(cls):
+ collection = bpy.context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ x, y = bpy.context.scene.cursor.location.xy
+ z = collection_obj.matrix_world.translation.z
+ mat = Matrix()
+ h = 3
+ return x, y, z, h, mat
+
@classmethod
def get_union_shape_from_selected_objects(cls):
selected_objects = bpy.context.selected_objects
@@ -369,7 +486,7 @@ class Spatial(blenderbim.core.tool.Spatial):
@classmethod
def get_bmesh_from_polygon(cls, poly, h):
- mat = bpy.context.active_object.matrix_world
+ mat = Matrix()
bm = bmesh.new()
bm.verts.index_update()
bm.edges.index_update()
@@ -398,13 +515,38 @@ class Spatial(blenderbim.core.tool.Spatial):
@classmethod
def get_named_obj_from_bmesh(cls, name, bmesh):
+ mesh = cls.get_named_mesh_from_bmesh(name, bmesh)
+ obj = cls.get_named_obj_from_mesh(name, mesh)
+ return obj
+
+ @classmethod
+ def get_named_obj_from_mesh(cls, name, mesh):
+ obj = bpy.data.objects.new(name, mesh)
+ return obj
+
+ @classmethod
+ def get_named_mesh_from_bmesh(cls, name, bmesh):
mesh = bpy.data.meshes.new(name=name)
bmesh.to_mesh(mesh)
bmesh.free()
- obj = bpy.data.objects.new(name, mesh)
- mat = bpy.context.active_object.matrix_world
- obj.matrix_world = mat
- return obj
+ return mesh
+
+ @classmethod
+ def get_transformed_mesh_from_local_to_global(cls, mesh):
+ active_obj = cls.get_active_obj()
+ element = tool.Ifc.get_entity(active_obj)
+ mat = active_obj.matrix_world
+ mesh.transform(mat.inverted())
+ mesh.update()
+ return mesh
+
+ @classmethod
+ def edit_active_space_obj_from_mesh(cls, mesh):
+ active_obj = bpy.context.active_object
+ mesh.name = active_obj.data.name
+ mesh.BIMMeshProperties.ifc_definition_id = active_obj.data.BIMMeshProperties.ifc_definition_id
+ tool.Geometry.change_object_data(active_obj, mesh, is_global=True)
+ tool.Ifc.edit(active_obj)
@classmethod
def set_obj_origin_to_bboxcenter(cls, obj):
@@ -422,11 +564,49 @@ class Spatial(blenderbim.core.tool.Spatial):
vert.co = inverted @ aux_vector
obj.location = newLoc
+ @classmethod
+ def set_obj_origin_to_cursor_position(cls, obj):
+ mat = obj.matrix_world
+ inverted = mat.inverted()
+
+ collection = bpy.context.view_layer.active_layer_collection.collection
+ collection_obj = collection.BIMCollectionProperties.obj
+ x, y = bpy.context.scene.cursor.location.xy
+ z = collection_obj.matrix_world.translation.z
+
+ oldLoc = obj.location
+ newLoc = Vector((x,y,z))
+ diff = newLoc - oldLoc
+ for vert in obj.data.vertices:
+ aux_vector = mat @ vert.co
+ aux_vector = aux_vector - diff
+ vert.co = inverted @ aux_vector
+ obj.location = newLoc
+
+ @classmethod
+ def get_selected_objects(cls):
+ return bpy.context.selected_objects
+
+ @classmethod
+ def get_active_obj(cls):
+ return bpy.context.active_object
+
@classmethod
def get_active_obj_z(cls):
x, y, z = bpy.context.active_object.matrix_world.translation.xyz
return z
+ @classmethod
+ def get_active_obj_height(cls):
+ height = bpy.context.active_object.dimensions.z
+ return height
+
+ @classmethod
+ def get_relating_type_id(cls):
+ props = bpy.context.scene.BIMModelProperties
+ relating_type_id = props.relating_type_id
+ return relating_type_id
+
@classmethod
def traslate_obj_to_z_location(cls, obj, z):
if z != 0:
@@ -468,6 +648,10 @@ class Spatial(blenderbim.core.tool.Spatial):
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
return body
+ @classmethod
+ def assign_ifcspace_class_to_obj(cls, obj):
+ bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcSpace")
+
@classmethod
def assign_type_to_obj(cls, obj):
relating_type_id = bpy.context.scene.BIMModelProperties.relating_type_id
@@ -478,6 +662,10 @@ class Spatial(blenderbim.core.tool.Spatial):
element = tool.Ifc.get_entity(obj)
blenderbim.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type)
+ @classmethod
+ def assign_relating_type_to_element(cls, ifc, Type, element, relating_type):
+ blenderbim.core.type.assign_type(ifc, Type, element=element, type=relating_type)
+
@classmethod
def assign_container_to_obj(cls, obj):
active_obj = bpy.context.active_object
diff --git a/src/blenderbim/blenderbim/tool/style.py b/src/blenderbim/blenderbim/tool/style.py
index 3b52333d42..e39596e367 100644
--- a/src/blenderbim/blenderbim/tool/style.py
+++ b/src/blenderbim/blenderbim/tool/style.py
@@ -26,7 +26,7 @@ import os.path
# fmt: off
TEXTURE_MAPS_BY_METHODS = {
- "PHYSICAL": ("NORMAL", "EMISSIVE", "METALLICROUGHNESS", "DIFFUSE", "OCCLUSION"),
+ "PHYSICAL": ("NORMAL", "EMISSIVE", "METALLICROUGHNESS", "DIFFUSE", "OCCLUSION"),
"FLAT": ("EMISSIVE",)
}
# fmt: on
@@ -423,6 +423,7 @@ class Style(blenderbim.core.tool.Style):
@classmethod
def import_presentation_styles(cls, style_type):
+ color_to_tuple = lambda x: (x.Red, x.Green, x.Blue)
props = bpy.context.scene.BIMStylesProperties
props.styles.clear()
styles = sorted(tool.Ifc.get().by_type(style_type), key=lambda x: x.Name or "Unnamed")
@@ -430,6 +431,17 @@ class Style(blenderbim.core.tool.Style):
new = props.styles.add()
new.ifc_definition_id = style.id()
new.name = style.Name or "Unnamed"
+ new.ifc_class = style.is_a()
+ for surface_style in getattr(style, "Styles", []) or []:
+ new2 = new.style_classes.add()
+ new2.name = surface_style.is_a()
+ if surface_style.is_a("IfcSurfaceStyleShading"):
+ new.has_surface_colour = True
+ new.surface_colour = color_to_tuple(surface_style.SurfaceColour)
+ if surface_style.is_a("IfcSurfaceStyleRendering"):
+ if surface_style.DiffuseColour and surface_style.DiffuseColour.is_a("IfcColourRgb"):
+ new.has_diffuse_colour = True
+ new.diffuse_colour = color_to_tuple(surface_style.DiffuseColour)
new.total_elements = len(ifcopenshell.util.element.get_elements_by_style(tool.Ifc.get(), style))
@classmethod
diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py
index 6a0cd8b080..4a2c148c24 100644
--- a/src/blenderbim/blenderbim/tool/system.py
+++ b/src/blenderbim/blenderbim/tool/system.py
@@ -26,11 +26,12 @@ from math import pi, cos, sin
from mathutils import Matrix, Vector
from blenderbim.bim.module.system.data import ObjectSystemData, SystemDecorationData
from blenderbim.bim.module.drawing.decoration import profile_consequential
+from enum import Enum
class System(blenderbim.core.tool.System):
@classmethod
- def add_ports(cls, obj, add_start_port=True, add_end_port=True, offset_end_port=None):
+ def add_ports(cls, obj, add_start_port=True, add_end_port=True, end_port_pos=None, offset_end_port=None):
def add_port(mep_element, matrix):
port = tool.Ifc.run("system.add_port", element=mep_element)
port.FlowDirection = "NOTDEFINED"
@@ -49,11 +50,15 @@ class System(blenderbim.core.tool.System):
length = bbox["min_z"] if tool.Cad.is_x(bbox["max_z"], 0) else bbox["max_z"]
ports = []
if add_start_port:
- ports.append(add_port(mep_element, obj.matrix_world @ Matrix()))
+ ports.append(add_port(mep_element, obj.matrix_world))
if add_end_port:
- m = obj.matrix_world @ Matrix.Translation((0, 0, length))
- if offset_end_port:
- m.translation += offset_end_port
+ m = obj.matrix_world.copy()
+ if end_port_pos:
+ m.translation = end_port_pos
+ else:
+ m = m @ Matrix.Translation((0, 0, length))
+ if offset_end_port:
+ m.translation += offset_end_port
ports.append(add_port(mep_element, m))
return ports
@@ -75,7 +80,7 @@ class System(blenderbim.core.tool.System):
@classmethod
def disable_editing_system(cls):
- bpy.context.scene.BIMSystemProperties.active_system_id = 0
+ bpy.context.scene.BIMSystemProperties.edited_system_id = 0
@classmethod
def disable_system_editing_ui(cls):
@@ -122,11 +127,17 @@ class System(blenderbim.core.tool.System):
props.system_attributes.clear()
blenderbim.bim.helper.import_attributes2(system, props.system_attributes)
+ @classmethod
+ def get_systems(cls):
+ if tool.Ifc.get_schema() == "IFC2X3":
+ return tool.Ifc.get().by_type("IfcSystem") + tool.Ifc.get().by_type("IfcZone")
+ return tool.Ifc.get().by_type("IfcSystem")
+
@classmethod
def import_systems(cls):
props = bpy.context.scene.BIMSystemProperties
props.systems.clear()
- for system in tool.Ifc.get().by_type("IfcSystem"):
+ for system in cls.get_systems():
if system.is_a() in ["IfcStructuralAnalysisModel"]:
continue
new = props.systems.add()
@@ -144,16 +155,11 @@ class System(blenderbim.core.tool.System):
ifc_importer.file = tool.Ifc.get()
ifc_importer.calculate_unit_scale()
ifc_importer.process_context_filter()
- ports = set(ports)
- ports -= ifc_importer.create_products(ports)
- for port in ports or []:
- if tool.Ifc.get_object(port):
- continue
- port_obj = ifc_importer.create_product(port)
- if obj:
- port_obj.parent = obj
- port_obj.matrix_parent_inverse = obj.matrix_world.inverted()
+ ifc_importer.create_generic_elements(set(ports))
ifc_importer.place_objects_in_collections()
+ for port_obj in ifc_importer.added_data.values():
+ port_obj.parent = obj
+ port_obj.matrix_parent_inverse = obj.matrix_world.inverted()
@classmethod
def run_geometry_edit_object_placement(cls, obj=None):
@@ -185,10 +191,19 @@ class System(blenderbim.core.tool.System):
def select_system_products(cls, system):
tool.Spatial.select_products(ifcopenshell.util.system.get_system_elements(system))
+ @classmethod
+ def set_active_edited_system(cls, system):
+ bpy.context.scene.BIMSystemProperties.edited_system_id = system.id()
+
@classmethod
def set_active_system(cls, system):
bpy.context.scene.BIMSystemProperties.active_system_id = system.id()
+ @classmethod
+ def get_active_system(cls):
+ system_props = bpy.context.scene.BIMSystemProperties
+ return tool.Ifc.get_entity_by_id(system_props.active_system_id)
+
@classmethod
def get_decoration_data(cls):
all_vertices = []
@@ -214,27 +229,29 @@ class System(blenderbim.core.tool.System):
if not SystemDecorationData.is_loaded:
SystemDecorationData.load()
- object_system_data = ObjectSystemData.data
- selected_elements = object_system_data["connected_elements"]
+ class FlowDirection(Enum):
+ BACKWARD = -1
+ FORWARD = 1
+ BOTH = 2
+ AMBIGUOUS = 0
- # TODO: get only objects visible in viewport
- objects = set(bpy.data.objects) - set(bpy.data.collections["Types"].objects)
- for obj in objects:
+ connected_elements = ObjectSystemData.data["connected_elements"]
+
+ for element in SystemDecorationData.data["decorated_elements"]:
start_vert_i = len(all_vertices)
+ obj = tool.Ifc.get_object(element)
+
+ # skip stuff without objects, like distribution ports
+ if not obj:
+ continue
+
if obj.hide_get():
continue
- if not isinstance(obj.data, bpy.types.Mesh):
- continue
-
- element = tool.Ifc.get_entity(obj)
- if not element:
- continue
-
if not cls.is_mep_element(element):
continue
- selected_element = element in selected_elements
+ selected_element = element in connected_elements
verts_pos = []
port_data = SystemDecorationData.get_element_ports_data(element)
@@ -248,20 +265,29 @@ class System(blenderbim.core.tool.System):
flow_dirs = [p["flow_direction"] for p in port_data]
unique = set(flow_dirs)
if len(unique) == 1:
- return 0
+ if unique == {"SOURCEANDSINK"}:
+ return FlowDirection.BOTH
+ return FlowDirection.AMBIGUOUS
elif flow_dirs[0] == "SOURCE":
- return -1
+ return FlowDirection.BACKWARD
elif flow_dirs[0] == "SINK":
- return 1
+ return FlowDirection.FORWARD
elif flow_dirs[1] == "SOURCE":
- return 1
+ return FlowDirection.FORWARD
elif flow_dirs[1] == "SINK":
- return -1
- return 0
+ return FlowDirection.BACKWARD
+ return FlowDirection.AMBIGUOUS
- if len(port_data) == 2 and selected_element and (flow_direction := get_flow_direction(port_data)):
+ if (
+ len(port_data) == 2
+ and selected_element
+ and (flow_direction := get_flow_direction(port_data)) != FlowDirection.AMBIGUOUS
+ ):
edge_verts = verts_pos.copy()
- edge_verts = edge_verts[::flow_direction]
+
+ both_directions = flow_direction == FlowDirection.BOTH
+ if not both_directions:
+ edge_verts = edge_verts[:: flow_direction.value]
# create direction lines
direction_lines_offset = 0.4
@@ -291,13 +317,19 @@ class System(blenderbim.core.tool.System):
for i in range(n_direction_lines):
cur_offset = start_offset + edge_dir * i * direction_lines_offset
- arrow_base = cur_offset - edge_dir * direction_lines_width
- verts_pos.append(arrow_base + edge_ortho * direction_lines_width)
- verts_pos.append(cur_offset)
- verts_pos.append(arrow_base - edge_ortho * direction_lines_width)
- edges.append((cur_vert_index, cur_vert_index + 1))
- edges.append((cur_vert_index + 1, cur_vert_index + 2))
- cur_vert_index += 3
+ if both_directions:
+ verts_pos.append(cur_offset + edge_ortho * direction_lines_width)
+ verts_pos.append(cur_offset - edge_ortho * direction_lines_width)
+ edges.append((cur_vert_index, cur_vert_index + 1))
+ cur_vert_index += 2
+ else:
+ arrow_base = cur_offset - edge_dir * direction_lines_width
+ verts_pos.append(arrow_base + edge_ortho * direction_lines_width)
+ verts_pos.append(cur_offset)
+ verts_pos.append(arrow_base - edge_ortho * direction_lines_width)
+ edges.append((cur_vert_index, cur_vert_index + 1))
+ edges.append((cur_vert_index + 1, cur_vert_index + 2))
+ cur_vert_index += 3
all_vertices.extend(verts_pos)
@@ -336,3 +368,15 @@ class System(blenderbim.core.tool.System):
@classmethod
def is_mep_element(cls, element):
return element.is_a("IfcFlowSegment") or element.is_a("IfcFlowFitting")
+
+ @classmethod
+ def get_flow_element_controls(cls, element):
+ if not element.HasControlElements:
+ return []
+ return [control for control in element.HasControlElements[0].RelatedControlElements]
+
+ @classmethod
+ def get_flow_control_flow_element(cls, element):
+ if not element.AssignedToFlowElement:
+ return
+ return element.AssignedToFlowElement[0].RelatingFlowElement
diff --git a/src/blenderbim/blenderbim/tool/type.py b/src/blenderbim/blenderbim/tool/type.py
index 0dc1e18b82..37e294789a 100644
--- a/src/blenderbim/blenderbim/tool/type.py
+++ b/src/blenderbim/blenderbim/tool/type.py
@@ -27,10 +27,7 @@ import blenderbim.bim.helper
class Type(blenderbim.core.tool.Type):
@classmethod
def change_object_data(cls, obj, data, is_global=False):
- if is_global:
- obj.data.user_remap(data)
- else:
- obj.data = data
+ tool.Geometry.change_object_data(obj, data, is_global)
@classmethod
def disable_editing(cls, obj):
diff --git a/src/blenderbim/docs/blenderbim/scene.rst b/src/blenderbim/docs/blenderbim/scene.rst
index 74fa0a98a7..723191e150 100644
--- a/src/blenderbim/docs/blenderbim/scene.rst
+++ b/src/blenderbim/docs/blenderbim/scene.rst
@@ -10,172 +10,169 @@ Building Information Modeling Panel
System Setup
^^^^^^^^^^^^
- * **Quick Project Setup** - this will create a basic spatial tree. It will
- create a tree of collections with the structure ``IfcProject > IfcSite >
- IfcBuilding > IfcStorey`` This is merely for convenience instead of having to
- create it all by yourself, since all IFC exports require a valid spatial
- tree. You can see the tree of collections in the outliner when this is done.
- * **Schema Directory** - this folder stores the current IFC schema. You can
- download different schemas from the buildingSMART website. Unless you are an
- IFC guru, you probably shouldn't touch this. BlenderBIM recognises different
- IFC data based on what is provided in this schema folder. It defaults to the
- ``{{BLENDER_ADDONS_DIR}}/blenderbim/schema/`` folder, which is prepackaged
- with the IFC4 schema. This is known as the ``{SCHEMA_DIR}``.
- * **Data Directory** - the data directory holds the auxiliary data related to
- your IFC model. Examples include related property definitions, documents, and
- classification systems. Each project should have its own data directory. It
- defaults to the data directory in the
- ``{{BLENDER_ADDONS_DIR}}/blenderbim/data/`` folder, which comes with some
- example preset data. You are encouraged to copy this template and set your
- own. This is known as the ``{DATA_DIR}``.
+* **Quick Project Setup** - this will create a basic spatial tree. It will
+ create a tree of collections with the structure ``IfcProject > IfcSite >
+ IfcBuilding > IfcStorey`` This is merely for convenience instead of having to
+ create it all by yourself, since all IFC exports require a valid spatial
+ tree. You can see the tree of collections in the outliner when this is done.
+* **Schema Directory** - this folder stores the current IFC schema. You can
+ download different schemas from the buildingSMART website. Unless you are an
+ IFC guru, you probably shouldn't touch this. BlenderBIM recognises different
+ IFC data based on what is provided in this schema folder. It defaults to the
+ ``{{BLENDER_ADDONS_DIR}}/blenderbim/schema/`` folder, which is prepackaged
+ with the IFC4 schema. This is known as the ``{SCHEMA_DIR}``.
+* **Data Directory** - the data directory holds the auxiliary data related to
+ your IFC model. Examples include related property definitions, documents, and
+ classification systems. Each project should have its own data directory. It
+ defaults to the data directory in the
+ ``{{BLENDER_ADDONS_DIR}}/blenderbim/data/`` folder, which comes with some
+ example preset data. You are encouraged to copy this template and set your
+ own. This is known as the ``{DATA_DIR}``.
Software Identity
^^^^^^^^^^^^^^^^^
- * **GlobalId** - this field let's you enter an IFC element's ``GlobalId``. It
- must be in the 22-character encoded form.
- * **Select GlobalId** - this will select an element that has the same
- ``GlobalId`` attribute as what you have specified, based on what is currently
- visible in the scene.
+* **GlobalId** - this field let's you enter an IFC element's ``GlobalId``. It
+ must be in the 22-character encoded form.
+* **Select GlobalId** - this will select an element that has the same
+ ``GlobalId`` attribute as what you have specified, based on what is currently
+ visible in the scene.
IFC Categorisation
^^^^^^^^^^^^^^^^^^
- * **IFC Class** - this dropdown lets you pick from a list of all non-abstract
- children of ``IfcElement`` and ``IfcSpatialStructureElement``
- * **IFC Predefined Type** - this dropdown lets you pick from an enumeration of
- valid ``PredefinedType`` values for the currently selected *IFC Class*. It
- changes dynamically with the currently selected *IFC Class*.
- * **IFC Userdefined Type** - this field lets you enter a value for a user
- defined type. It is stored as the ``ObjectType`` attribute of an
- ``IfcProduct``. It is only set when the **IFC Predefined Type** is set to
- ``USERDEFINED``, otherwise it is ignored. It is recommended to make this
- value uppercase and alphabetic, to match the conventions for the
- ``PredefinedType`` enumeration.
- * **Assign Class** - this applies the active *IFC Class*, *IFC Predefined Type*
- and *IFC Userdefined Type* to any selected objects.
- * **Select Class** - this will select any objects that are currently visible
- that also have the same IFC class as the currently active *IFC Class*
- dropdown.
- * **Select Type** - same as *Select Class*, but it also filters by the
- currently active *IFC Predefined Type* dropdown, as well as the *IFC
- Userdefined Type* field.
+* **IFC Class** - this dropdown lets you pick from a list of all non-abstract
+ children of ``IfcElement`` and ``IfcSpatialStructureElement``
+* **IFC Predefined Type** - this dropdown lets you pick from an enumeration of
+ valid ``PredefinedType`` values for the currently selected *IFC Class*. It
+ changes dynamically with the currently selected *IFC Class*.
+* **IFC Userdefined Type** - this field lets you enter a value for a user
+ defined type. It is stored as the ``ObjectType`` attribute of an
+ ``IfcProduct``. It is only set when the **IFC Predefined Type** is set to
+ ``USERDEFINED``, otherwise it is ignored. It is recommended to make this
+ value uppercase and alphabetic, to match the conventions for the
+ ``PredefinedType`` enumeration.
+* **Assign Class** - this applies the active *IFC Class*, *IFC Predefined Type*
+ and *IFC Userdefined Type* to any selected objects.
+* **Select Class** - this will select any objects that are currently visible
+ that also have the same IFC class as the currently active *IFC Class* dropdown.
+* **Select Type** - same as *Select Class*, but it also filters by the
+ currently active *IFC Predefined Type* dropdown, as well as the *IFC
+ Userdefined Type* field.
Property Sets
^^^^^^^^^^^^^
- - **Pset Name** - this lets you select from a list of available property set
- types. The list is derived from the folders in
- ``{DATA_DIR}/pset``. Each folder name corresponds to a property set name. If
- you want to assign properties to an object based on an IFC standard pset,
- just create a new folder with the same name as the pset. You can also create
- your own custom property sets, so long as the folder name does not start with
- ``Pset_``, as these are reserved for official IFC property sets.
- - **Pset File** - this lets you select from a list of available property set
- data. The available property sets depends on the currently selected *PSet
- Name* dropdown. Each property set is represented by a ``.csv`` file inside
- ``{DATA_DIR}/pset/{PSET_NAME}/``. You can create your own ``.csv`` files
- with any software, where each line contains a property name and property
- value pair. Data types are automatically converted based on the property set
- templates defined in ``{SCHEMA_DIR}``. If the pset is part of an official IFC
- standard, you can only use property names that are part of the IFC standard.
- If you want to add your own custom properties, you will need to create your
- own *PSet Name* folder first, and then you can put in your own ``.csv`` file
- which contains any property names and values that you want.
- - **Assign Pset** - this assigns the currently selected *Pset file* to any
- selected objects. The assigned data will then be visible in the *Object
- Properties*. This only assigns a link to the ``.csv`` containing the data, so
- you can change the data in the ``.csv`` file and that will automatically
- propagate to all assigned elements when an IFC is exported, without needing
- to reassign the data.
- - **Unassign Pset** - this removes the link to the property set ``.csv``
- file for all currently selected objects.
+- **Pset Name** - this lets you select from a list of available property set
+ types. The list is derived from the folders in
+ ``{DATA_DIR}/pset``. Each folder name corresponds to a property set name. If
+ you want to assign properties to an object based on an IFC standard pset,
+ just create a new folder with the same name as the pset. You can also create
+ your own custom property sets, so long as the folder name does not start with
+ ``Pset_``, as these are reserved for official IFC property sets.
+- **Pset File** - this lets you select from a list of available property set
+ data. The available property sets depends on the currently selected *PSet
+ Name* dropdown. Each property set is represented by a ``.csv`` file inside
+ ``{DATA_DIR}/pset/{PSET_NAME}/``. You can create your own ``.csv`` files
+ with any software, where each line contains a property name and property
+ value pair. Data types are automatically converted based on the property set
+ templates defined in ``{SCHEMA_DIR}``. If the pset is part of an official IFC
+ standard, you can only use property names that are part of the IFC standard.
+ If you want to add your own custom properties, you will need to create your
+ own *PSet Name* folder first, and then you can put in your own ``.csv`` file
+ which contains any property names and values that you want.
+- **Assign Pset** - this assigns the currently selected *Pset file* to any
+ selected objects. The assigned data will then be visible in the *Object
+ Properties*. This only assigns a link to the ``.csv`` containing the data, so
+ you can change the data in the ``.csv`` file and that will automatically
+ propagate to all assigned elements when an IFC is exported, without needing
+ to reassign the data.
+- **Unassign Pset** - this removes the link to the property set ``.csv``
+ file for all currently selected objects.
Aggregates
^^^^^^^^^^
- - **Aggregate Class** - this lets you select what type of class you want an
- aggregate of parts to be.
- - **Aggregate name** - this lets you set the name of an aggregate that you can
- can create.
- - **Create Aggregate** - this will create a new aggregate from one or more
- currently selected objects. The selected objects will be moved out of the
- spatial tree into an ``IfcRelAggregates/*`` collection. Then, a collection
- instance will be created to represent the aggregation, and will be placed in
- the current location of the spatial tree, and the The parts will then be
- hidden so only the whole composition (i.e. the aggregate object) will be
- shown.
- - **Explode Aggregate** - this does the opposite of *Create Aggregate*, and
- will remove the aggregation.
- - **Edit Aggregate** - this will hide the collection instance that represents
- the aggregate object, and show all of the individual parts. This allows you
- to select and modify the aggregate parts.
- - **Save Aggregate** - this does the opposite of *Edit Aggregate*.
+- **Aggregate Class** - this lets you select what type of class you want an
+ aggregate of parts to be.
+- **Aggregate name** - this lets you set the name of an aggregate that you can
+ can create.
+- **Create Aggregate** - this will create a new aggregate from one or more
+ currently selected objects. The selected objects will be moved out of the
+ spatial tree into an ``IfcRelAggregates/*`` collection. Then, a collection
+ instance will be created to represent the aggregation, and will be placed in
+ the current location of the spatial tree, and the The parts will then be
+ hidden so only the whole composition (i.e. the aggregate object) will be shown.
+- **Explode Aggregate** - this does the opposite of *Create Aggregate*, and
+ will remove the aggregation.
+- **Edit Aggregate** - this will hide the collection instance that represents
+ the aggregate object, and show all of the individual parts. This allows you
+ to select and modify the aggregate parts.
+- **Save Aggregate** - this does the opposite of *Edit Aggregate*.
IFC Classifications Panel
-------------------------
- - **Classification** - this lets you select which classification system you'd
- like to use. The list of possible classification systems is derived from the
- ``{DATA_DIR}/class/classifications.csv`` file. By default, BlenderBIM comes
- with Uniclass 2015 and Omniclass. If you need another classification system,
- you can add it to this ``.csv`` file.
- - **Reference** - this lets you select a single classification reference item,
- filtered depending on the currently active *Classification*. The list is
- derived from the ``{DATA_DIR}/class/references.csv`` file. Out of the box,
- BlenderBIM only lists a single Uniclass reference as an example. It is
- advised to make a list of all the references you require for a project and
- add it to this ``.csv`` file.
- - **Assign Classification** - this assigns the currently active *Reference* to
- all of the selected objects. You can see the results in the *Object
- Properties* pane.
- - **Unassign Classification** - this removes the currently active *Reference*
- in all of the selected objects.
+- **Classification** - this lets you select which classification system you'd
+ like to use. The list of possible classification systems is derived from the
+ ``{DATA_DIR}/class/classifications.csv`` file. By default, BlenderBIM comes
+ with Uniclass 2015 and Omniclass. If you need another classification system,
+ you can add it to this ``.csv`` file.
+- **Reference** - this lets you select a single classification reference item,
+ filtered depending on the currently active *Classification*. The list is
+ derived from the ``{DATA_DIR}/class/references.csv`` file. Out of the box,
+ BlenderBIM only lists a single Uniclass reference as an example. It is
+ advised to make a list of all the references you require for a project and
+ add it to this ``.csv`` file.
+- **Assign Classification** - this assigns the currently active *Reference* to
+ all of the selected objects. You can see the results in the *Object
+ Properties* pane.
+- **Unassign Classification** - this removes the currently active *Reference*
+ in all of the selected objects.
IFC Owner History Panel
-----------------------
- - **Person** - this lets you select who you are. The values are derived from
- the ``{DATA_DIR}/owner/person.json`` file, particularly the
- ``Identification`` attribute, which is mandatory and a requirement in COBie
- data. You are encouraged to edit this file to add your own details. This
- information will be stored in the IFC file as part of the owner history to
- keep track of any objects which you edit. You will also be recorded as the
- author of the IFC file.
- - **Organisation** - this lets you select which organisation you are part of.
- The values are derived from the ``{DATA_DIR}/owner/organisation.json`` file,
- in particular the ``Name`` attribute, which is mandatory and a requirement in
- COBie data. You are encouraged to edit this file to add your own organisation
- details. This information will be stored in the IFC file as part of the
- owner history to keep track of any objects which you edit. The organisation
- will also be recorded as the author of the IFC file.
+- **Person** - this lets you select who you are. The values are derived from
+ the ``{DATA_DIR}/owner/person.json`` file, particularly the
+ ``Identification`` attribute, which is mandatory and a requirement in COBie
+ data. You are encouraged to edit this file to add your own details. This
+ information will be stored in the IFC file as part of the owner history to
+ keep track of any objects which you edit. You will also be recorded as the
+ author of the IFC file.
+- **Organisation** - this lets you select which organisation you are part of.
+ The values are derived from the ``{DATA_DIR}/owner/organisation.json`` file,
+ in particular the ``Name`` attribute, which is mandatory and a requirement in
+ COBie data. You are encouraged to edit this file to add your own organisation
+ details. This information will be stored in the IFC file as part of the
+ owner history to keep track of any objects which you edit. The organisation
+ will also be recorded as the author of the IFC file.
IFC Geometric Representation Contexts Panel
-------------------------------------------
- - **Has Model Context** - enabling this will allow you to export geometric data
- related to the model view of your BIM data. This is generally 3D
- representations. It may also contain wireframe representations such as an
- Axis model for structural members. This defaults to being enabled, as most
- people want to export model geometry.
+- **Has Model Context** - enabling this will allow you to export geometric data
+ related to the model view of your BIM data. This is generally 3D
+ representations. It may also contain wireframe representations such as an
+ Axis model for structural members. This defaults to being enabled, as most
+ people want to export model geometry.
- - **Available Subcontexts** - this lets you select a possible subcontext to
- be used underneath the Model context.
- - **Available Target Views** - subcontexts may have a particular target view,
- which you can set here.
- - **Add Subcontext** - This will add a new subcontext based on the currently
- selected *Available Subcontext* and *Available Target View*.
+ - **Available Subcontexts** - this lets you select a possible subcontext to
+ be used underneath the Model context.
+ - **Available Target Views** - subcontexts may have a particular target view,
+ which you can set here.
+ - **Add Subcontext** - This will add a new subcontext based on the currently
+ selected *Available Subcontext* and *Available Target View*.
- - **Subcontext Name** - for each subcontext you have added, it will show
- you the subcontext name. By default, the ``Body`` subcontext is added,
- as most people want to export the body geometry of products in their BIM
- data.
- - **Subcontext Target View** - same as *Subcontext Name*, but shows the
- target view. By default, the ``MODEL_VIEW`` target view is added, as most
- people will be viewing the model geometry of your BIM data.
- - **Remove Subcontext** - this will remove the subcontext.
+ - **Subcontext Name** - for each subcontext you have added, it will show
+ you the subcontext name. By default, the ``Body`` subcontext is added,
+ as most people want to export the body geometry of products in their BIM data.
+ - **Subcontext Target View** - same as *Subcontext Name*, but shows the
+ target view. By default, the ``MODEL_VIEW`` target view is added, as most
+ people will be viewing the model geometry of your BIM data.
+ - **Remove Subcontext** - this will remove the subcontext.
- - **Has Plan Context** - the same as *Has Model Context*, but it lets you add
- subcontexts and target views related to the ``PLAN`` context of your BIM
- data. This is usually plans, sections, RCPs, and other documentation views.
+- **Has Plan Context** - the same as *Has Model Context*, but it lets you add
+ subcontexts and target views related to the ``PLAN`` context of your BIM
+ data. This is usually plans, sections, RCPs, and other documentation views.
diff --git a/src/blenderbim/docs/conf.py b/src/blenderbim/docs/conf.py
index 27073e246d..a589be30ca 100644
--- a/src/blenderbim/docs/conf.py
+++ b/src/blenderbim/docs/conf.py
@@ -36,11 +36,11 @@
# -- Project information -----------------------------------------------------
project = "BlenderBIM Add-on"
-copyright = "2020-2022 IfcOpenShell Contributors"
+copyright = "2020-2023 IfcOpenShell Contributors"
author = "IfcOpenShell Contributors"
# The full version, including alpha/beta/rc tags
-release = "0.0.220504"
+release = "0.0.231104"
# -- General configuration ---------------------------------------------------
diff --git a/src/blenderbim/docs/devs/hello_world.rst b/src/blenderbim/docs/devs/hello_world.rst
index 957839d36c..09eb33da0a 100644
--- a/src/blenderbim/docs/devs/hello_world.rst
+++ b/src/blenderbim/docs/devs/hello_world.rst
@@ -21,7 +21,7 @@ BCF. The same concepts will apply. We can call this Native OpenBIM authoring,
which is a paradigm shift from traditional BIM which relies on translated IFC
data.
-.. image:: native-openbim.png
+.. image:: images/native-openbim.png
Every user operation reads or writes this data structure in memory, and the IFC
data becomes the source of truth for all data. There is no such thing as an
@@ -54,7 +54,7 @@ separated into modules. Each module focuses on a particular topic of BIM. Most
modules are self-contained, but sometimes they connect to one another, just like
how BIM works.
-.. image:: module-architecture.png
+.. image:: images/module-architecture.png
Modules are not arbitrary divisions. They tend to reflect how portions of BIM
data are segregated in the IFC international standard. This allows us to
@@ -79,7 +79,7 @@ To see the demo module in action, you'll need to enable it. In
module. When you restart Blender, you will see a new demo panel in your scene
properties interface tab. Have fun!
-.. image:: demo-module.png
+.. image:: images/demo-module.png
Now you're ready to learn how to code! Here are all the files associated with
the demo module. Feel free to read them in any order. Each file is heavily
@@ -166,7 +166,7 @@ The BlenderBIM Add-on code may be understood in three separate layers: **Deliver
three layers from one another. Because they are separate, they can be tested and
built separately.
-.. image:: architecture.png
+.. image:: images/architecture.png
The **Delivery** mechanism is how the application is delivered to
the user and handles user interactions. It covers the interface and triggering
@@ -228,7 +228,7 @@ time the BlenderBIM Add-on interacts with IFC, it uses the IfcOpenShell Python
bindings, so all IFC data is already deserialised into Python objects. The inner
workings of the C++ base is out of scope.
-.. image:: ifcopenshell-architecture.png
+.. image:: images/ifcopenshell-architecture.png
IfcOpenShell offers a core set of low-level functionality to read and write this
data. An example of the core functionality would be:
@@ -303,7 +303,7 @@ small, you can submit your changes just using the Github website. Browse to the
navigate to the file you want to edit the code of. Then just press the edit icon
to begin editing. When you're done, you'll be prompted to submit your changes.
-.. image:: github-editing.png
+.. image:: images/github-editing.png
If you're making a large change, you'll need to create a **Pull Request**.
Github has an excellent comprehensive guide on `how to contribute to projects
diff --git a/src/blenderbim/docs/devs/architecture.png b/src/blenderbim/docs/devs/images/architecture.png
similarity index 100%
rename from src/blenderbim/docs/devs/architecture.png
rename to src/blenderbim/docs/devs/images/architecture.png
diff --git a/src/blenderbim/docs/devs/demo-module.png b/src/blenderbim/docs/devs/images/demo-module.png
similarity index 100%
rename from src/blenderbim/docs/devs/demo-module.png
rename to src/blenderbim/docs/devs/images/demo-module.png
diff --git a/src/blenderbim/docs/devs/diagrams.svg b/src/blenderbim/docs/devs/images/diagrams.svg
similarity index 100%
rename from src/blenderbim/docs/devs/diagrams.svg
rename to src/blenderbim/docs/devs/images/diagrams.svg
diff --git a/src/blenderbim/docs/devs/documentation-style.png b/src/blenderbim/docs/devs/images/documentation-style.png
similarity index 100%
rename from src/blenderbim/docs/devs/documentation-style.png
rename to src/blenderbim/docs/devs/images/documentation-style.png
diff --git a/src/blenderbim/docs/devs/github-editing.png b/src/blenderbim/docs/devs/images/github-editing.png
similarity index 100%
rename from src/blenderbim/docs/devs/github-editing.png
rename to src/blenderbim/docs/devs/images/github-editing.png
diff --git a/src/blenderbim/docs/devs/ifcopenshell-architecture.png b/src/blenderbim/docs/devs/images/ifcopenshell-architecture.png
similarity index 100%
rename from src/blenderbim/docs/devs/ifcopenshell-architecture.png
rename to src/blenderbim/docs/devs/images/ifcopenshell-architecture.png
diff --git a/src/blenderbim/docs/devs/module-architecture.png b/src/blenderbim/docs/devs/images/module-architecture.png
similarity index 100%
rename from src/blenderbim/docs/devs/module-architecture.png
rename to src/blenderbim/docs/devs/images/module-architecture.png
diff --git a/src/blenderbim/docs/devs/native-openbim.png b/src/blenderbim/docs/devs/images/native-openbim.png
similarity index 100%
rename from src/blenderbim/docs/devs/native-openbim.png
rename to src/blenderbim/docs/devs/images/native-openbim.png
diff --git a/src/blenderbim/docs/devs/installation.rst b/src/blenderbim/docs/devs/installation.rst
index 51ec9d689a..a4f78147be 100644
--- a/src/blenderbim/docs/devs/installation.rst
+++ b/src/blenderbim/docs/devs/installation.rst
@@ -100,14 +100,16 @@ For Linux or Mac:
$ ln -s $PWD/src/ifcopenshell-python/ifcopenshell/util $BLENDER_ADDON_PATH/libs/site/packages/ifcopenshell/util
# Remove and link other IfcOpenShell utilities
+ $ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifccsv.py
+ $ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifcdiff.py
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifc4d
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifc5d
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifccityjson
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifcclash
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifcpatch
$ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifctester
- $ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifccsv.py
- $ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifcdiff.py
+ $ rm -r $BLENDER_ADDON_PATH/libs/site/packages/ifcfm
+
$ ln -s $PWD/src/ifccsv/ifccsv.py $BLENDER_ADDON_PATH/libs/site/packages/ifccsv.py
$ ln -s $PWD/src/ifcdiff/ifcdiff.py $BLENDER_ADDON_PATH/libs/site/packages/ifcdiff.py
$ ln -s $PWD/src/ifc4d/ifc4d $BLENDER_ADDON_PATH/libs/site/packages/ifc4d
@@ -116,6 +118,7 @@ For Linux or Mac:
$ ln -s $PWD/src/ifcclash/ifcclash $BLENDER_ADDON_PATH/libs/site/packages/ifcclash
$ ln -s $PWD/src/ifcpatch/ifcpatch $BLENDER_ADDON_PATH/libs/site/packages/ifcpatch
$ ln -s $PWD/src/ifctester/ifctester $BLENDER_ADDON_PATH/libs/site/packages/ifctester
+ $ ln -s $PWD/src/ifcfm/ifcfm $BLENDER_ADDON_PATH/libs/site/packages/ifcfm
# Manually download some third party dependencies
$ cd $BLENDER_ADDON_PATH/bim/data/gantt
@@ -162,14 +165,16 @@ Before running it follow the instructions descibed after `rem` tags.
mklink /D "%blenderbim%\libs\site\packages\ifcopenshell\util" "%cd%\src\ifcopenshell-python\ifcopenshell\util"
echo Remove and link other IfcOpenShell utilities...
+ del "%blenderbim%\libs\site\packages\ifccsv.py"
+ del "%blenderbim%\libs\site\packages\ifcdiff.py"
rd /S /Q "%blenderbim%\libs\site\packages\ifc4d"
rd /S /Q "%blenderbim%\libs\site\packages\ifc5d"
rd /S /Q "%blenderbim%\libs\site\packages\ifccityjson"
rd /S /Q "%blenderbim%\libs\site\packages\ifcclash"
rd /S /Q "%blenderbim%\libs\site\packages\ifcpatch"
rd /S /Q "%blenderbim%\libs\site\packages\ifctester"
- del "%blenderbim%\libs\site\packages\ifccsv.py"
- del "%blenderbim%\libs\site\packages\ifcdiff.py"
+ rd /S /Q "%blenderbim%\libs\site\packages\ifcfm"
+
mklink "%blenderbim%\libs\site\packages\ifccsv.py" "%cd%\src\ifccsv\ifccsv.py"
mklink "%blenderbim%\libs\site\packages\ifcdiff.py" "%cd%\src\ifcdiff\ifcdiff.py"
mklink /D "%blenderbim%\libs\site\packages\ifc4d" "%cd%\src\ifc4d\ifc4d"
@@ -178,6 +183,7 @@ Before running it follow the instructions descibed after `rem` tags.
mklink /D "%blenderbim%\libs\site\packages\ifcclash" "%cd%\src\ifcclash\ifcclash"
mklink /D "%blenderbim%\libs\site\packages\ifcpatch" "%cd%\src\ifcpatch\ifcpatch"
mklink /D "%blenderbim%\libs\site\packages\ifctester" "%cd%\src\ifctester\ifctester"
+ mklink /D "%blenderbim%\libs\site\packages\ifcfm" "%cd%\src\ifcfm\ifcfm"
echo Manually downloading some third party dependencies...
curl https://raw.githubusercontent.com/jsGanttImproved/jsgantt-improved/master/dist/jsgantt.js -o "%blenderbim%\bim\data\gantt\jsgantt.js"
diff --git a/src/blenderbim/docs/devs/ux_guidelines.rst b/src/blenderbim/docs/devs/ux_guidelines.rst
index 840e8723e0..956e154a32 100644
--- a/src/blenderbim/docs/devs/ux_guidelines.rst
+++ b/src/blenderbim/docs/devs/ux_guidelines.rst
@@ -14,7 +14,6 @@ BIM will by definition contain a (big) number of submodules or subschemas. Grant
3. Completeness : I need to have access to all the items that are related to the topic I'm interested in. If it is tied to another submodule, I need to have access to it.
-
* **Blender**
These considerations must be adapted to the Python API, to the general paradigm we have chosen to access, modify or create IFC data, and to the general philosophy of Blender. There are many ways and places where an add-on creator can choose to present information to the user. BlenderBim currently works that way :
@@ -69,12 +68,13 @@ BIM will by definition contain a (big) number of submodules or subschemas. Grant
The user should be advised why they are prevented to do things via either :
- - A custom message using Blender's report system
+ - A custom message using Blender's report system
- - A label in the UI replacing the missing UI elements
+ - A label in the UI replacing the missing UI elements
- - An helpful tooltip on an operator
- Generally the context itself should be used to the best of its ability to convey why it's possible to do some things or not. The separation of concerns in multiple different dynamically hidden-or-shown sub-panels should help limit confusion.
+ - A helpful tooltip on an operator
+
+ Generally the context itself should be used to the best of its ability to convey why it's possible to do some things or not. The separation of concerns in multiple different dynamically hidden-or-shown sub-panels should help limit confusion.
- The user should be forbidden to click on buttons when its execution returns early and does nothing. If a button is clickable and the user clicks on it, there should always be some kind of feedback.
@@ -82,7 +82,7 @@ Icons
^^^^^
* .. image:: https://user-images.githubusercontent.com/25156105/137270452-bf6c03ea-2d3e-4ae3-8121-6799e8beb335.png
-
+
**Icon name** : `"CANCEL"`
**Use** : To disable the edition state of a particular item.
@@ -113,9 +113,9 @@ Icons
**Proposal** : https://user-images.githubusercontent.com/25156105/137273329-532d6d59-e39d-483e-980b-b8405062eaa8.gif
-* .. image:: https://user-images.githubusercontent.com/25156105/137273981-26fa664a-a29e-402e-9d7e-67b8b71c2d5d.png
+.. image:: https://user-images.githubusercontent.com/25156105/137273981-26fa664a-a29e-402e-9d7e-67b8b71c2d5d.png
-**Icon name** : `"ADD"`
+* **Icon name** : `"ADD"`
**Use** : To add an item to a particular context, either initializing it (eg. adding a coordinate system) or adding an element to a list.
diff --git a/src/blenderbim/docs/devs/writing_docs.rst b/src/blenderbim/docs/devs/writing_docs.rst
index d16f7805a1..b40bccf4a3 100644
--- a/src/blenderbim/docs/devs/writing_docs.rst
+++ b/src/blenderbim/docs/devs/writing_docs.rst
@@ -26,7 +26,7 @@ images. All stroke widths are 3px with a corner radius of 3px. Horizontal
underlines are 5px with a corner radius of 2px. The dark green is ``39b54a`` and
the light green is ``d9e021``.
-.. image:: documentation-style.png
+.. image:: images/documentation-style.png
Special keywords such as **Technical Terminology** that the user should be
aware of should be bolded, titlecased, and used consistently. You *may*
diff --git a/src/blenderbim/docs/users/attributes.png b/src/blenderbim/docs/users/attributes.png
deleted file mode 100644
index 1635813e4b..0000000000
Binary files a/src/blenderbim/docs/users/attributes.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/blenderbim-layout.png b/src/blenderbim/docs/users/blenderbim-layout.png
deleted file mode 100644
index 3ef73d21aa..0000000000
Binary files a/src/blenderbim/docs/users/blenderbim-layout.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/creating_an_ifc_model.rst b/src/blenderbim/docs/users/creating_an_ifc_model.rst
index 5e0d60b6a9..417b1efd38 100644
--- a/src/blenderbim/docs/users/creating_an_ifc_model.rst
+++ b/src/blenderbim/docs/users/creating_an_ifc_model.rst
@@ -20,14 +20,14 @@ In the **Properties** panel in the bottom right, activate the icon for the
**Scene Properties** tab, and find the **IFC Project** subpanel. Click on
**Create Project** to create a blank IFC project.
-.. image:: create-project.png
+.. image:: images/create-project.png
In the top right **Outliner** panel, you will see a hierarchy of spaces that has
been automatically created for you. This hierarchy is known is the **Spatial
Tree**. The Camera, Cube, and Light come with a fresh new Blender session by
default, and are not part of your IFC project.
-.. image:: default-spatial-tree.png
+.. image:: images/default-spatial-tree.png
Any Blender object that you want to be part of IFC project must be converted
into a IFC object by assigning a category. This category is known as the **IFC
@@ -45,7 +45,7 @@ Properties** tab, and find the **IFC Class** panel. Let's pretend our Cube is a
column, so select **IfcColumn** from the **Class** drop-down, and press **Assign
IFC Class**.
-.. image:: assign-class.png
+.. image:: images/assign-class.png
.. tip::
@@ -56,12 +56,12 @@ All IFC objects must also belong inside the **Spatial Tree**. In the
**Outliner** panel, you can drag and drop your newly created **IfcColumn/Cube**
inside the **IfcBuildingStorey/Ground Floor**. Wasn't that simple?
-.. image:: drag-drop-outliner-tree.png
+.. image:: images/drag-drop-outliner-tree.png
Go back to the **Scene Properties** tab and to the **IFC Project** panel and
press **Save Project**. Save your new IFC model somewhere on your computer.
-.. image:: save-project.png
+.. image:: images/save-project.png
Congratulations! You have now created your first OpenBIM model from Blender! You
can open the IFC file in any other program, and you will see something similar
@@ -70,7 +70,7 @@ are `IfcPipeline `__, `IFC.JS
`__, and `3DViewer
`__.
-.. image:: ifc-pipeline.png
+.. image:: images/ifc-pipeline.png
Placing occurrences of an element type
--------------------------------------
diff --git a/src/blenderbim/docs/users/dealing_with_large_models.rst b/src/blenderbim/docs/users/dealing_with_large_models.rst
index bc1da512e3..30a55b1a4e 100644
--- a/src/blenderbim/docs/users/dealing_with_large_models.rst
+++ b/src/blenderbim/docs/users/dealing_with_large_models.rst
@@ -64,12 +64,12 @@ Filtered model loading
You may filter elements and only load a portion of the model. Click on **Enable
Advanced Mode** when loading a model.
-.. image:: advanced-mode.png
+.. image:: images/advanced-mode.png
This will preload the model and present you with model loading options in the
**IFC Project** panel.
-.. image:: advanced-mode-settings.png
+.. image:: images/advanced-mode-settings.png
**Filter Modes** include:
diff --git a/src/blenderbim/docs/users/element-class-select.png b/src/blenderbim/docs/users/element-class-select.png
deleted file mode 100644
index 4e2304b93f..0000000000
Binary files a/src/blenderbim/docs/users/element-class-select.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/element-class.png b/src/blenderbim/docs/users/element-class.png
deleted file mode 100644
index c38e518e2c..0000000000
Binary files a/src/blenderbim/docs/users/element-class.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/example-project.png b/src/blenderbim/docs/users/example-project.png
deleted file mode 100644
index e9816f4c55..0000000000
Binary files a/src/blenderbim/docs/users/example-project.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/exploring_an_ifc_model.rst b/src/blenderbim/docs/users/exploring_an_ifc_model.rst
index 7cb0346235..3e35a99c2e 100644
--- a/src/blenderbim/docs/users/exploring_an_ifc_model.rst
+++ b/src/blenderbim/docs/users/exploring_an_ifc_model.rst
@@ -21,29 +21,31 @@ use some creativity when reading the data :)
Loading a model
---------------
-Blender's interface is divided into panels. The main **Viewport** panel shows 3D
-geometry. The top right **Outliner** panel shows a tree of geometric objects.
-The bottom right **Properties** panel shows data and relationships.
+Blender's interface is divided into three panels. The left **Outliner** panel
+shows a tree of geometric objects. The centre main **Viewport** panel shows 3D
+geometry. The right **Properties** panel shows data and relationships.
-.. image:: blenderbim-layout.png
+.. image:: images/blenderbim-layout.png
The **Properties** panel has tabs to switch between different types of
-properties. Make sure you have the **Scene Properties** tab activated, and find
-the **IFC Project** subpanel. Click on **Load Project** and browse to your
-``.ifc`` file.
+properties.
-.. image:: properties-loadproject.png
+.. image:: images/properties-tabs.png
+
+Click on ``File > Open IFC Project`` and browse to your ``.ifc`` file.
+
+.. image:: images/properties-loadproject.png
After loading, you will see the model appear in the **Viewport** panel.
-.. image:: example-project.png
+.. image:: images/example-project.png
-Let's take a look at the **IFC Project** subpanel again. It shows the loaded
-filename, as well as the **IFC Schema**. There are two commonly seen **IFC
-Schema** versions: IFC2X3 and IFC4. Checking the **IFC Schema** is important
-because it has an impact on what BIM data may be stored. IFC4 is the newer
-version and it is recommended to use IFC4 models as it has significantly more
-BIM capabilities compared to IFC2X3.
+Take a look at the **Project Info** subpanel. It shows the loaded filename, as
+well as the **IFC Schema**. There are two commonly seen **IFC Schema**
+versions: IFC2X3 and IFC4. Checking the **IFC Schema** is important because it
+has an impact on what BIM data may be stored. IFC4 is the newer version and it
+is recommended to use IFC4 models as it has significantly more BIM capabilities
+compared to IFC2X3.
.. tip::
@@ -63,7 +65,7 @@ orthographic view.
To switch to a top view, front view, or side view, click the relevant axis on
the **Navigate Gizmo**.
-.. image:: navigate-gizmo.png
+.. image:: images/navigate-gizmo.png
You can also use your mouse to navigate. Hover your mouse over the **Viewport**
panel and click and drag the Middle Mouse Button (``MMB``) to **Orbit**. Scroll
@@ -89,7 +91,7 @@ is the ``.`` button on the numpad. After zooming into an element, when you
You can also zoom to all objects in the project by clicking on ``View > Frame
All``.
-.. image:: frame-selected.png
+.. image:: images/frame-selected.png
Another good way to navigate is by flying or walking around similar to a video
game. Choose ``View > Navigation > Walk Navigation``, or use the ``Shift-```
@@ -103,7 +105,7 @@ Sometimes, you want to look through objects. You can toggle **X-Ray Mode** by
pressing the button on the top right of the **Viewport** panel. The hotkey is
``Alt-Z``.
-.. image:: x-ray-mode.png
+.. image:: images/x-ray-mode.png
.. tip::
@@ -125,7 +127,7 @@ represents the type of object, and the name is the name of the object. Examples
of classes you will see are ``IfcBuilding``, or ``IfcWall``. This naming
convention makes it easy to quickly spot types of objects.
-.. image:: outliner.png
+.. image:: images/outliner.png
Objects are organised in a hierarchy. By default, this hierarchy represents a
breakdown of spaces, from large spaces such as a site and a building, down to
@@ -142,7 +144,7 @@ hierarchy.
When there are lots of objects, you can type a name in the filter box to quickly
identify objects by name or type.
-.. image:: outliner-filter.png
+.. image:: images/outliner-filter.png
Clicking on an object in the **Outliner** panel also selects the corresponding
object in the **Viewport** panel. A good strategy to find objects is to then use
@@ -157,7 +159,7 @@ next to the **IfcProject** collection. This will hide everything in the project.
Then navigate through the hierarchy and enable the **Tick Icon** next to an
**IfcBuildingStory**.
-.. image:: outliner-isolate.png
+.. image:: images/outliner-isolate.png
Viewing element classes
-----------------------
@@ -180,10 +182,10 @@ properties and relationships it is allowed to have. For example, a Wall
as you explore more.
To view an object's class, click on an object in the **Viewport** or **Outliner**
-panel, then switch to the **Object Properties** tab in the **Properties** panel.
-You can see the **Class** name in the **IFC Class** subpanel.
+panel, then switch to the **Object Information** tab in the **Properties** panel.
+You can see the **Class** name in the **Object Metadata** subpanel.
-.. image:: element-class.png
+.. image:: images/element-class.png
In this case, the **Class** of our roof is an **IfcSlab**. You'll notice this is
the same **Class** name used as a prefix for the object name in the **Outliner**
@@ -219,7 +221,7 @@ Press the **Select Icon** to select all objects that are of the same
hide elements instead, you can use ``Object > Show/Hidden > Hide Selected``
(hotkey ``H``).
-.. image:: element-class-select.png
+.. image:: images/element-class-select.png
.. note::
@@ -232,7 +234,7 @@ click on the bottom right status bar and enable **Scene Statistics** you will
see information like **Objects 4/4**, which means that 4 objects are selected
out of 4 available objects. This is a great way of counting objects like toilets.
-.. image:: scene-statistics.png
+.. image:: images/scene-statistics.png
Viewing attributes and properties
---------------------------------
@@ -240,11 +242,11 @@ Viewing attributes and properties
You can view the **Attributes**, **Properties**, and **Quantities** of the
selected object in the **Object Properties** tab.
-Let's focus on **Attributes** first. Scroll down to the **IFC Attributes**
+Let's focus on **Attributes** first. Scroll down to the **Attributes**
subpanel. **Attributes** are a limited set of fundamental data (usually less
than 10) associated with all IFC elements. These are fixed by the IFC standard.
-.. image:: attributes.png
+.. image:: images/attributes.png
Here are some common attributes and what they mean:
@@ -273,9 +275,9 @@ have different **Properties** depending on what information they want to store.
Each **Property** has a name and a value, and are grouped into **Property
Sets**. Each **Property Set** also has a name.
-You can find **Properties** in the **IFC Property Sets** subpanel.
+You can find **Properties** in the **Object Property Sets** subpanel.
-.. image:: psets.png
+.. image:: images/psets.png
Some very common **Properties** are standardised by international BIM standards.
For example, the load bearing **Property** of a beam should always be called
@@ -297,9 +299,9 @@ value, and are grouped into **Quantity Sets**. Similarly, there are also common
quantities defined as part of the international standard, denoted by the prefix
``Qto_``. This prefix is short for "Quantity Take-Off".
-You can find **Quantities** in the **IFC Quantity Sets** subpanel.
+You can find **Quantities** in the **Object Quantity Sets** subpanel.
-.. image:: qtos.png
+.. image:: images/qtos.png
Finding the location of objects
-------------------------------
@@ -315,12 +317,12 @@ as a multi-storey column which can be related to multiple building storeys.
Even in these cases, IFC enforces one location to be its primary
location, known as its **Spatial Container**.
-If you click on any object, you can see its location in the **IFC Spatial
-Container** subpanel in the **Object Properties** tab.
+If you click on any object, you can see its location in the **Spatial
+Container** subpanel in the **Object Information** tab.
Press the **Select Icon** to select all objects that are in the same location.
-.. image:: spatial-container.png
+.. image:: images/spatial-container.png
Checking construction types
---------------------------
@@ -333,18 +335,17 @@ You can see a list of **Construction Types** in the **Outliner** panel in the
with the wall type names of ``WT01``, ``WT02``, and ``WT03``, you should see
three **IfcWallType** objects with those same names in the **Outliner**.
-You can click on these types to see more details about them in the **Object
-Properties** panel.
+You can click on these types to see more details about them in the
+**Properties** panel.
-.. image:: outliner-types.png
+.. image:: images/outliner-types.png
When selecting an object, you can also see its construction type in **Object
-Properties** under the **IFC Construction Type** subpanel. You can press the
-**Select Icon** to select all objects that are of the same **Construction
-Type**. You can use the hide and isolate hotkeys to quickly view them in the
-model.
+Information** under the **Type** subpanel. You can press the **Select Icon** to
+select all objects that are of the same **Construction Type**. You can use the
+hide and isolate hotkeys to quickly view them in the model.
-.. image:: properties-types.png
+.. image:: images/properties-types.png
A **Construction Type** defines properties that are common to all occurrences of
that type. For example, if a wall type specifies a fire rating property, then
@@ -361,7 +362,7 @@ the **Outliner** by pressing the **Visibility Icon**. Then, select a type, and
click on ``View > Local View > Toggle Local View`` (hotkey ``/``) in the
**Viewport**. Toggle the view to see the entire model again.
-.. image:: type-local-view.png
+.. image:: images/type-local-view.png
.. note::
@@ -374,17 +375,17 @@ Filtering by materials
----------------------
Everything in the built environment is made from a physical raw **Material**
-resources. For example, a **Material** might be a 140mm core filled block.
-Another **Material** might be a 190mm hollowcore block. **Materials** are
-grouped into categories like steel, concrete, brick, block, and so on.
+resources. For example, a **Material** might be blockwork. Another
+**Material** might be in-situ concrete. **Materials** are grouped into
+categories like steel, concrete, brick, block, and so on.
-We can see a list of **Materials** used in the project in the **IFC Materials**
-subpanel in the **Scene Properties** tab.
+We can see a list of **Materials** used in the project in the **Materials**
+subpanel in the **Geometry and Materials** tab.
Press the **Select Icon** to select all objects that are of the selected
material.
-.. image:: materials.png
+.. image:: images/materials.png
Taking simple measurements
--------------------------
@@ -393,22 +394,17 @@ The simplest form of measurement is the one that's already taken for you. The
**Viewing attributes and properties** section describes how to view
pre-calculated **Quantities**.
-Sometimes, you may wish to take manual measurements yourself. To view the
-overall dimensions of an object, first select an object, then expand out the
-viewport **Sidebar**.
+Sometimes, you may wish to take manual measurements yourself. You can view the
+overall X, Y, and Z dimensions of the currently selected object in the
+**Derived Coordinates** subpanel in the **Geometry and Materials** tab.
-.. image:: viewport-sidebar.png
-
-In the **Item** tab, you can find the X, Y, and Z overall **Dimensions** of the
-currently selected object.
-
-.. image:: viewport-dimensions.png
+.. image:: images/dimensions.png
Another way to manually measure from two points is to use the **Measure** tool.
First, press the **Snap Icon** to enable snapping. Then choose snap targets in
the **Snap Menu** in the top middle section of the **Viewport** panel.
-.. image:: snap-targets.png
+.. image:: images/snap-targets.png
.. tip::
@@ -425,7 +421,7 @@ line along the X axis. Alternatively, press the ``Y`` or ``Z`` key to lock the
measurement line along the Y or Z axis. Let go of the mouse to finish your
measurement.
-.. image:: measure-tool.png
+.. image:: images/measure-tool.png
To delete a measurement, just click on one point of the measurement, and press
the ``Delete`` key. You can also click and drag the ends of your measurement
diff --git a/src/blenderbim/docs/users/general_usage.rst b/src/blenderbim/docs/users/general_usage.rst
index 1d61093de8..a776c7bc64 100644
--- a/src/blenderbim/docs/users/general_usage.rst
+++ b/src/blenderbim/docs/users/general_usage.rst
@@ -9,4 +9,5 @@ and exploring models.
:maxdepth: 1
:caption: Contents:
+ general_usage/interface
general_usage/ifc_project
diff --git a/src/blenderbim/docs/users/general_usage/ifc_project.rst b/src/blenderbim/docs/users/general_usage/ifc_project.rst
index 5d8dbc2200..361980ddf9 100644
--- a/src/blenderbim/docs/users/general_usage/ifc_project.rst
+++ b/src/blenderbim/docs/users/general_usage/ifc_project.rst
@@ -6,10 +6,10 @@ Overview
.. container:: location-scene
- |location| Scene Properties |>| IFC Project Info |>| IFC Project
+ |location| Scene Properties |>| IFC Project Info |>| IFC Project
- .. |location| image:: ../../images/location-scene.svg
- .. |>| image:: ../../images/location-breadcrumb.svg
+ .. |location| image:: /images/location-scene.svg
+ .. |>| image:: /images/location-breadcrumb.svg
The IFC Project panel lets you create a new IFC project, load an existing IFC
project, or view high level project metadata about the currently loaded project.
@@ -104,20 +104,20 @@ Advanced mode
.. image:: images/ifc-project-load.png
-.. |FILE| image:: ../../images/icon-FILE.svg
+.. |FILE| image:: /images/icon-FILE.svg
:class: icon
-.. |FILE_CACHE| image:: ../../images/icon-FILE_CACHE.svg
+.. |FILE_CACHE| image:: /images/icon-FILE_CACHE.svg
:class: icon
-.. |FILE_HIDDEN| image:: ../../images/icon-FILE_HIDDEN.svg
+.. |FILE_HIDDEN| image:: /images/icon-FILE_HIDDEN.svg
:class: icon
-.. |GREASEPENCIL| image:: ../../images/icon-GREASEPENCIL.svg
+.. |GREASEPENCIL| image:: /images/icon-GREASEPENCIL.svg
:class: icon
-.. |EXPORT| image:: ../../images/icon-EXPORT.svg
+.. |EXPORT| image:: /images/icon-EXPORT.svg
:class: icon
-.. |FILE_TICK| image:: ../../images/icon-FILE_TICK.svg
+.. |FILE_TICK| image:: /images/icon-FILE_TICK.svg
:class: icon
diff --git a/src/blenderbim/docs/users/general_usage/interface.rst b/src/blenderbim/docs/users/general_usage/interface.rst
new file mode 100644
index 0000000000..3d602b5280
--- /dev/null
+++ b/src/blenderbim/docs/users/general_usage/interface.rst
@@ -0,0 +1,11 @@
+User Interface
+==============
+
+This section covers the general user interface of BlenderBIM.
+
+.. toctree::
+ :hidden:
+ :maxdepth: 1
+ :caption: Contents:
+
+ interface/workspace
diff --git a/src/blenderbim/docs/users/general_usage/interface/images/interface_window_file-menue.png b/src/blenderbim/docs/users/general_usage/interface/images/interface_window_file-menue.png
new file mode 100644
index 0000000000..8b24f50bf6
Binary files /dev/null and b/src/blenderbim/docs/users/general_usage/interface/images/interface_window_file-menue.png differ
diff --git a/src/blenderbim/docs/users/general_usage/interface/images/interface_window_start-up.png b/src/blenderbim/docs/users/general_usage/interface/images/interface_window_start-up.png
new file mode 100644
index 0000000000..23e7b47ed4
Binary files /dev/null and b/src/blenderbim/docs/users/general_usage/interface/images/interface_window_start-up.png differ
diff --git a/src/blenderbim/docs/users/general_usage/interface/workspace.rst b/src/blenderbim/docs/users/general_usage/interface/workspace.rst
new file mode 100644
index 0000000000..94aecb7d14
--- /dev/null
+++ b/src/blenderbim/docs/users/general_usage/interface/workspace.rst
@@ -0,0 +1,27 @@
+Workspace
+=========
+
+For general informations about the Blender user interface see the respective
+`Blender handbook section `__.
+
+After installation of BlenderBIM the default Blender start-up screen looks different from the standard Blender interface.
+
+BlenderBIM adds a new `BIM` **Workspace** to the interface and by default activates this workspace on start-up.
+It also modifies the layout of views and sidebars and adds custom functionality to the toolbar.
+The left **Outliner** panel shows a tree of geometric objects. The centre main **Viewport** panel shows 3D geometry.
+The right **Properties** panel shows data and relationships.
+
+.. image:: images/interface_window_start-up.png
+ :alt: Blender start up window with installed BlenderBIM add-on
+
+1. BlenderBIM `BIM` workspace tab
+2. Outliner with the document tree
+3. Main 3D viewport
+4. Property editor
+5. Toolbar with added BIM functionality
+6. Status bar with information about the currently used Blender and BlenderBIM version
+
+Additionally, the `File` menue in the Topbar adds menue entries to Create/Open and Save an IFC project directly.
+
+.. image:: images/interface_window_file-menue.png
+ :alt: Additional file menue options related to IFC projects
diff --git a/src/blenderbim/docs/users/georeferencing.rst b/src/blenderbim/docs/users/georeferencing.rst
index 29c6fae4be..4d8ea599fb 100644
--- a/src/blenderbim/docs/users/georeferencing.rst
+++ b/src/blenderbim/docs/users/georeferencing.rst
@@ -30,7 +30,7 @@ You can check whether or not your model is georeferenced in the **IFC
Georeferencing** panel in the **Scene Properties** tab. You should see a section
for the **Projected CRS** with an EPSG code.
-.. image:: projectedcrs.png
+.. image:: images/projectedcrs.png
If you do not see this, your project is not georeferenced.
@@ -59,7 +59,7 @@ Northings. Similarly, the model's +Y axis will point to **Grid North**. As
there is no **Map Conversion** involved, you will see a 0 in the Eastings,
Northings, and Orthogonal Height in the **IFC Georeferencing** panel.
-.. image:: mapcoordinates.png
+.. image:: images/mapcoordinates.png
When **Local engineering coordinates** are used, typically the architect will
nominate a local origin and model geometry will be drawn orthogonally (i.e.
@@ -71,7 +71,7 @@ North**. The surveyor will then provide the necessary **Map Conversion**
parameters to convert from **Local engineering coordinates** to Eastings,
Northings, Orthogonal Height, and **Grid North**.
-.. image:: mapconversion.png
+.. image:: images/mapconversion.png
.. warning::
@@ -96,7 +96,7 @@ abscissa of 1 and ordinate of 0. This default (1, 0) vector implies **Project
East** and **Grid East** coalign, which means there is no rotation between
**Project North** and **Grid North**.
-.. image:: xaxisabscissaordinate.png
+.. image:: images/xaxisabscissaordinate.png
.. tip::
@@ -132,7 +132,7 @@ Georeferencing** panel under the **Blender Offset** header. It
is very similar to a **Map Conversion**, but it will not have a scale and only
temporarily affects your Blender session.
-.. image:: blenderoffset.png
+.. image:: images/blenderoffset.png
.. note::
@@ -149,7 +149,7 @@ Advanced Mode** when loading a project. Then, set the **Distance Limit** (in
meters) and the **False Origin** coordinate before pressing **Load Project
Elements**.
-.. image:: manualorigin.png
+.. image:: images/manualorigin.png
When a false origin is used, there are two possible methods to offset objects by
the false origin.
@@ -163,7 +163,7 @@ check the "Blender Offset" property in the **Transform** panel in the **Object
Properties**. This is an advanced property used by powerusers to debug
coordinate issues and may be safely ignored by most users.
-.. image:: offsetmode.png
+.. image:: images/offsetmode.png
Incorrect coordinate use
------------------------
@@ -198,7 +198,7 @@ in your coordinate in the **Input** field. Press either the **Local to Global**
or **Global to Local** button to convert the coordinate. You will see the result
of the calculation in the **Output** field.
-.. image:: coordinateconversion.png
+.. image:: images/coordinateconversion.png
True north
----------
@@ -222,7 +222,7 @@ vector, but it should be only used as a reference, never used as a way to
coordinate model rotations, and always with the understanding that it is not a
fixed value.
-.. image:: truenorth.png
+.. image:: images/truenorth.png
.. warning::
diff --git a/src/blenderbim/docs/users/advanced-mode-settings.png b/src/blenderbim/docs/users/images/advanced-mode-settings.png
similarity index 100%
rename from src/blenderbim/docs/users/advanced-mode-settings.png
rename to src/blenderbim/docs/users/images/advanced-mode-settings.png
diff --git a/src/blenderbim/docs/users/advanced-mode.png b/src/blenderbim/docs/users/images/advanced-mode.png
similarity index 100%
rename from src/blenderbim/docs/users/advanced-mode.png
rename to src/blenderbim/docs/users/images/advanced-mode.png
diff --git a/src/blenderbim/docs/users/assign-class.png b/src/blenderbim/docs/users/images/assign-class.png
similarity index 100%
rename from src/blenderbim/docs/users/assign-class.png
rename to src/blenderbim/docs/users/images/assign-class.png
diff --git a/src/blenderbim/docs/users/images/attributes.png b/src/blenderbim/docs/users/images/attributes.png
new file mode 100644
index 0000000000..4b5c250f36
Binary files /dev/null and b/src/blenderbim/docs/users/images/attributes.png differ
diff --git a/src/blenderbim/docs/users/images/blenderbim-layout.png b/src/blenderbim/docs/users/images/blenderbim-layout.png
new file mode 100644
index 0000000000..8e4c7d83dc
Binary files /dev/null and b/src/blenderbim/docs/users/images/blenderbim-layout.png differ
diff --git a/src/blenderbim/docs/users/blenderoffset.png b/src/blenderbim/docs/users/images/blenderoffset.png
similarity index 100%
rename from src/blenderbim/docs/users/blenderoffset.png
rename to src/blenderbim/docs/users/images/blenderoffset.png
diff --git a/src/blenderbim/docs/users/coordinateconversion.png b/src/blenderbim/docs/users/images/coordinateconversion.png
similarity index 100%
rename from src/blenderbim/docs/users/coordinateconversion.png
rename to src/blenderbim/docs/users/images/coordinateconversion.png
diff --git a/src/blenderbim/docs/users/create-project.png b/src/blenderbim/docs/users/images/create-project.png
similarity index 100%
rename from src/blenderbim/docs/users/create-project.png
rename to src/blenderbim/docs/users/images/create-project.png
diff --git a/src/blenderbim/docs/users/default-spatial-tree.png b/src/blenderbim/docs/users/images/default-spatial-tree.png
similarity index 100%
rename from src/blenderbim/docs/users/default-spatial-tree.png
rename to src/blenderbim/docs/users/images/default-spatial-tree.png
diff --git a/src/blenderbim/docs/users/images/dimensions.png b/src/blenderbim/docs/users/images/dimensions.png
new file mode 100644
index 0000000000..b1946ab1b0
Binary files /dev/null and b/src/blenderbim/docs/users/images/dimensions.png differ
diff --git a/src/blenderbim/docs/users/drag-drop-outliner-tree.png b/src/blenderbim/docs/users/images/drag-drop-outliner-tree.png
similarity index 100%
rename from src/blenderbim/docs/users/drag-drop-outliner-tree.png
rename to src/blenderbim/docs/users/images/drag-drop-outliner-tree.png
diff --git a/src/blenderbim/docs/users/images/element-class-select.png b/src/blenderbim/docs/users/images/element-class-select.png
new file mode 100644
index 0000000000..f343dd483f
Binary files /dev/null and b/src/blenderbim/docs/users/images/element-class-select.png differ
diff --git a/src/blenderbim/docs/users/images/element-class.png b/src/blenderbim/docs/users/images/element-class.png
new file mode 100644
index 0000000000..1232eb396d
Binary files /dev/null and b/src/blenderbim/docs/users/images/element-class.png differ
diff --git a/src/blenderbim/docs/users/images/example-project.png b/src/blenderbim/docs/users/images/example-project.png
new file mode 100644
index 0000000000..5f09f00b67
Binary files /dev/null and b/src/blenderbim/docs/users/images/example-project.png differ
diff --git a/src/blenderbim/docs/users/frame-selected.png b/src/blenderbim/docs/users/images/frame-selected.png
similarity index 100%
rename from src/blenderbim/docs/users/frame-selected.png
rename to src/blenderbim/docs/users/images/frame-selected.png
diff --git a/src/blenderbim/docs/users/ifc-pipeline.png b/src/blenderbim/docs/users/images/ifc-pipeline.png
similarity index 100%
rename from src/blenderbim/docs/users/ifc-pipeline.png
rename to src/blenderbim/docs/users/images/ifc-pipeline.png
diff --git a/src/blenderbim/docs/users/install-blenderbim-1.png b/src/blenderbim/docs/users/images/install-blenderbim-1.png
similarity index 100%
rename from src/blenderbim/docs/users/install-blenderbim-1.png
rename to src/blenderbim/docs/users/images/install-blenderbim-1.png
diff --git a/src/blenderbim/docs/users/install-blenderbim-2.png b/src/blenderbim/docs/users/images/install-blenderbim-2.png
similarity index 100%
rename from src/blenderbim/docs/users/install-blenderbim-2.png
rename to src/blenderbim/docs/users/images/install-blenderbim-2.png
diff --git a/src/blenderbim/docs/users/install-blenderbim-3.png b/src/blenderbim/docs/users/images/install-blenderbim-3.png
similarity index 100%
rename from src/blenderbim/docs/users/install-blenderbim-3.png
rename to src/blenderbim/docs/users/images/install-blenderbim-3.png
diff --git a/src/blenderbim/docs/users/images/install-blenderbim-4.png b/src/blenderbim/docs/users/images/install-blenderbim-4.png
new file mode 100644
index 0000000000..553eb91982
Binary files /dev/null and b/src/blenderbim/docs/users/images/install-blenderbim-4.png differ
diff --git a/src/blenderbim/docs/users/manualorigin.png b/src/blenderbim/docs/users/images/manualorigin.png
similarity index 100%
rename from src/blenderbim/docs/users/manualorigin.png
rename to src/blenderbim/docs/users/images/manualorigin.png
diff --git a/src/blenderbim/docs/users/mapconversion.png b/src/blenderbim/docs/users/images/mapconversion.png
similarity index 100%
rename from src/blenderbim/docs/users/mapconversion.png
rename to src/blenderbim/docs/users/images/mapconversion.png
diff --git a/src/blenderbim/docs/users/mapcoordinates.png b/src/blenderbim/docs/users/images/mapcoordinates.png
similarity index 100%
rename from src/blenderbim/docs/users/mapcoordinates.png
rename to src/blenderbim/docs/users/images/mapcoordinates.png
diff --git a/src/blenderbim/docs/users/images/materials.png b/src/blenderbim/docs/users/images/materials.png
new file mode 100644
index 0000000000..3207387d1b
Binary files /dev/null and b/src/blenderbim/docs/users/images/materials.png differ
diff --git a/src/blenderbim/docs/users/measure-tool.png b/src/blenderbim/docs/users/images/measure-tool.png
similarity index 100%
rename from src/blenderbim/docs/users/measure-tool.png
rename to src/blenderbim/docs/users/images/measure-tool.png
diff --git a/src/blenderbim/docs/users/navigate-gizmo.png b/src/blenderbim/docs/users/images/navigate-gizmo.png
similarity index 100%
rename from src/blenderbim/docs/users/navigate-gizmo.png
rename to src/blenderbim/docs/users/images/navigate-gizmo.png
diff --git a/src/blenderbim/docs/users/offsetmode.png b/src/blenderbim/docs/users/images/offsetmode.png
similarity index 100%
rename from src/blenderbim/docs/users/offsetmode.png
rename to src/blenderbim/docs/users/images/offsetmode.png
diff --git a/src/blenderbim/docs/users/outliner-filter.png b/src/blenderbim/docs/users/images/outliner-filter.png
similarity index 100%
rename from src/blenderbim/docs/users/outliner-filter.png
rename to src/blenderbim/docs/users/images/outliner-filter.png
diff --git a/src/blenderbim/docs/users/images/outliner-isolate.png b/src/blenderbim/docs/users/images/outliner-isolate.png
new file mode 100644
index 0000000000..ee6cc3ff2a
Binary files /dev/null and b/src/blenderbim/docs/users/images/outliner-isolate.png differ
diff --git a/src/blenderbim/docs/users/outliner-types.png b/src/blenderbim/docs/users/images/outliner-types.png
similarity index 100%
rename from src/blenderbim/docs/users/outliner-types.png
rename to src/blenderbim/docs/users/images/outliner-types.png
diff --git a/src/blenderbim/docs/users/outliner.png b/src/blenderbim/docs/users/images/outliner.png
similarity index 100%
rename from src/blenderbim/docs/users/outliner.png
rename to src/blenderbim/docs/users/images/outliner.png
diff --git a/src/blenderbim/docs/users/projectedcrs.png b/src/blenderbim/docs/users/images/projectedcrs.png
similarity index 100%
rename from src/blenderbim/docs/users/projectedcrs.png
rename to src/blenderbim/docs/users/images/projectedcrs.png
diff --git a/src/blenderbim/docs/users/images/properties-loadproject.png b/src/blenderbim/docs/users/images/properties-loadproject.png
new file mode 100644
index 0000000000..acea46f2a9
Binary files /dev/null and b/src/blenderbim/docs/users/images/properties-loadproject.png differ
diff --git a/src/blenderbim/docs/users/images/properties-tabs.png b/src/blenderbim/docs/users/images/properties-tabs.png
new file mode 100644
index 0000000000..e8a9257770
Binary files /dev/null and b/src/blenderbim/docs/users/images/properties-tabs.png differ
diff --git a/src/blenderbim/docs/users/images/properties-types.png b/src/blenderbim/docs/users/images/properties-types.png
new file mode 100644
index 0000000000..4e718f3969
Binary files /dev/null and b/src/blenderbim/docs/users/images/properties-types.png differ
diff --git a/src/blenderbim/docs/users/images/psets.png b/src/blenderbim/docs/users/images/psets.png
new file mode 100644
index 0000000000..45032e373e
Binary files /dev/null and b/src/blenderbim/docs/users/images/psets.png differ
diff --git a/src/blenderbim/docs/users/images/qtos.png b/src/blenderbim/docs/users/images/qtos.png
new file mode 100644
index 0000000000..cdd75344e1
Binary files /dev/null and b/src/blenderbim/docs/users/images/qtos.png differ
diff --git a/src/blenderbim/docs/users/save-project.png b/src/blenderbim/docs/users/images/save-project.png
similarity index 100%
rename from src/blenderbim/docs/users/save-project.png
rename to src/blenderbim/docs/users/images/save-project.png
diff --git a/src/blenderbim/docs/users/scene-statistics.png b/src/blenderbim/docs/users/images/scene-statistics.png
similarity index 100%
rename from src/blenderbim/docs/users/scene-statistics.png
rename to src/blenderbim/docs/users/images/scene-statistics.png
diff --git a/src/blenderbim/docs/users/snap-targets.png b/src/blenderbim/docs/users/images/snap-targets.png
similarity index 100%
rename from src/blenderbim/docs/users/snap-targets.png
rename to src/blenderbim/docs/users/images/snap-targets.png
diff --git a/src/blenderbim/docs/users/images/spatial-container.png b/src/blenderbim/docs/users/images/spatial-container.png
new file mode 100644
index 0000000000..2d13edfd42
Binary files /dev/null and b/src/blenderbim/docs/users/images/spatial-container.png differ
diff --git a/src/blenderbim/docs/users/truenorth.png b/src/blenderbim/docs/users/images/truenorth.png
similarity index 100%
rename from src/blenderbim/docs/users/truenorth.png
rename to src/blenderbim/docs/users/images/truenorth.png
diff --git a/src/blenderbim/docs/users/images/type-local-view.png b/src/blenderbim/docs/users/images/type-local-view.png
new file mode 100644
index 0000000000..4ce3f186d3
Binary files /dev/null and b/src/blenderbim/docs/users/images/type-local-view.png differ
diff --git a/src/blenderbim/docs/users/x-ray-mode.png b/src/blenderbim/docs/users/images/x-ray-mode.png
similarity index 100%
rename from src/blenderbim/docs/users/x-ray-mode.png
rename to src/blenderbim/docs/users/images/x-ray-mode.png
diff --git a/src/blenderbim/docs/users/xaxisabscissaordinate.png b/src/blenderbim/docs/users/images/xaxisabscissaordinate.png
similarity index 100%
rename from src/blenderbim/docs/users/xaxisabscissaordinate.png
rename to src/blenderbim/docs/users/images/xaxisabscissaordinate.png
diff --git a/src/blenderbim/docs/users/install-blenderbim-4.png b/src/blenderbim/docs/users/install-blenderbim-4.png
deleted file mode 100644
index 179613072c..0000000000
Binary files a/src/blenderbim/docs/users/install-blenderbim-4.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/installation.rst b/src/blenderbim/docs/users/installation.rst
index c50b4d3267..fd23a05832 100644
--- a/src/blenderbim/docs/users/installation.rst
+++ b/src/blenderbim/docs/users/installation.rst
@@ -31,12 +31,12 @@ Installation
Open up Blender, and click on ``Edit > Preferences``.
- .. image:: install-blenderbim-1.png
+ .. image:: images/install-blenderbim-1.png
Select the **Add-ons** tab, and press **Install...** on the top right. Navigate
to the .zip you downloaded in Step 2, and press **Install Add-on**.
- .. image:: install-blenderbim-2.png
+ .. image:: images/install-blenderbim-2.png
.. warning::
@@ -44,11 +44,11 @@ Installation
You should now see **Import-Export: BlenderBIM** available in your add-ons list. Enable the add-on by pressing the checkbox.
- .. image:: install-blenderbim-3.png
+ .. image:: images/install-blenderbim-3.png
-All done! If you check your Scene properties in the panel on the bottom right, you will see a panel to manage your **IFC Project**.
+All done! Your interface will now look similar to below. If you check the ``File`` menu you should also see an option to ``Open IFC Project``.
-.. image:: install-blenderbim-4.png
+.. image:: images/install-blenderbim-4.png
You can enable add-ons permanently by using ``Save User Settings`` from the Addons menu.
diff --git a/src/blenderbim/docs/users/materials.png b/src/blenderbim/docs/users/materials.png
deleted file mode 100644
index 8abaf46a04..0000000000
Binary files a/src/blenderbim/docs/users/materials.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/outliner-isolate.png b/src/blenderbim/docs/users/outliner-isolate.png
deleted file mode 100644
index b63fd9cdc8..0000000000
Binary files a/src/blenderbim/docs/users/outliner-isolate.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/properties-loadproject.png b/src/blenderbim/docs/users/properties-loadproject.png
deleted file mode 100644
index 88f5be2ddc..0000000000
Binary files a/src/blenderbim/docs/users/properties-loadproject.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/properties-types.png b/src/blenderbim/docs/users/properties-types.png
deleted file mode 100644
index dd719f80a1..0000000000
Binary files a/src/blenderbim/docs/users/properties-types.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/psets.png b/src/blenderbim/docs/users/psets.png
deleted file mode 100644
index cae396693e..0000000000
Binary files a/src/blenderbim/docs/users/psets.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/qtos.png b/src/blenderbim/docs/users/qtos.png
deleted file mode 100644
index 5746f10a83..0000000000
Binary files a/src/blenderbim/docs/users/qtos.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/spatial-container.png b/src/blenderbim/docs/users/spatial-container.png
deleted file mode 100644
index a8c2c74e83..0000000000
Binary files a/src/blenderbim/docs/users/spatial-container.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/type-local-view.png b/src/blenderbim/docs/users/type-local-view.png
deleted file mode 100644
index e448279567..0000000000
Binary files a/src/blenderbim/docs/users/type-local-view.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/viewport-dimensions.png b/src/blenderbim/docs/users/viewport-dimensions.png
deleted file mode 100644
index 52dda47f68..0000000000
Binary files a/src/blenderbim/docs/users/viewport-dimensions.png and /dev/null differ
diff --git a/src/blenderbim/docs/users/viewport-sidebar.png b/src/blenderbim/docs/users/viewport-sidebar.png
deleted file mode 100644
index 7931d22a93..0000000000
Binary files a/src/blenderbim/docs/users/viewport-sidebar.png and /dev/null differ
diff --git a/src/blenderbim/scripts/classifications/brickClassification.py b/src/blenderbim/scripts/classifications/brick_classifiction.py
similarity index 100%
rename from src/blenderbim/scripts/classifications/brickClassification.py
rename to src/blenderbim/scripts/classifications/brick_classifiction.py
diff --git a/src/blenderbim/scripts/classifications/uniclass_classification.py b/src/blenderbim/scripts/classifications/uniclass_classification.py
new file mode 100644
index 0000000000..ce55fae9e7
--- /dev/null
+++ b/src/blenderbim/scripts/classifications/uniclass_classification.py
@@ -0,0 +1,60 @@
+import os
+import ifcopenshell
+import pandas as pd
+
+directory_path = "uniclass/"
+
+edition = "July 2023"
+
+ifc = ifcopenshell.file(schema="IFC4")
+classification = ifc.create_entity(
+ "IfcClassification",
+ Source="RIBA Enterprises Ltd",
+ Edition=edition,
+ EditionDate="2023-07-01",
+ Name="Uniclass",
+ Description="Uniclass is a unified classification system made up of a set of tables that can be used by different parts of the industry in various ways.",
+ Location="https://uniclass.thenbs.com/",
+ ReferenceTokens=["_"],
+)
+
+references = {}
+
+tables = [
+ ("Ac", "Activities"),
+ ("Co", "Complexes"),
+ ("En", "Entities"),
+ ("SL", "Spaces / Locations"),
+ ("EF", "Elements / Functions"),
+ ("Ss", "Systems"),
+ ("Pr", "Products"),
+ ("TE", "Tools and equipment"),
+ ("PM", "Project management"),
+ ("FI", "Form of information"),
+ ("Ro", "Roles"),
+ ("Ma", "Materials"),
+ ("PC", "Properties and characteristics"),
+ ("Zz", "CAD"),
+]
+
+for identification, name in tables:
+ ref = ifc.create_entity("IfcClassificationReference", Identification=identification, Name=name)
+ references[identification] = ref
+ ref.ReferencedSource = classification
+
+for filename in os.listdir(directory_path):
+ if filename.endswith(".xlsx") and "change-log" not in filename and "codes-not-in-use" not in filename:
+ file_path = os.path.join(directory_path, filename)
+ df = pd.read_excel(file_path, header=2)
+ for index, row in df.iterrows():
+ identification = row["Code"]
+ name = row["Title"]
+ ref = ifc.create_entity("IfcClassificationReference", Identification=identification, Name=name)
+ references[identification] = ref
+ parent = "_".join(identification.split("_")[0:-1])
+ if parent in references:
+ ref.ReferencedSource = references[parent]
+ else:
+ ref.ReferencedSource = classification
+
+ifc.write(f"Uniclass {edition}.ifc")
diff --git a/src/blenderbim/scripts/classifications/getIfcClassification.py b/src/blenderbim/scripts/classifications/xml_classification.py
similarity index 100%
rename from src/blenderbim/scripts/classifications/getIfcClassification.py
rename to src/blenderbim/scripts/classifications/xml_classification.py
diff --git a/src/blenderbim/scripts/setup_pytest.py b/src/blenderbim/scripts/setup_pytest.py
index 8bfad2dfb0..f8b1c9f571 100644
--- a/src/blenderbim/scripts/setup_pytest.py
+++ b/src/blenderbim/scripts/setup_pytest.py
@@ -18,18 +18,20 @@
import sys
import subprocess
+from pathlib import Path
print("Here are the detected system paths:")
print(sys.path)
py_exec = str(sys.executable)
+base_python_path = str(Path(sys.executable).parent.parent) # path without bin/python.exe
print("Detected executable:", py_exec)
subprocess.call([py_exec, "-m", "ensurepip", "--user"])
subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pip"])
-sys_paths = [p for p in sys.path if "site-packages" in p]
+sys_paths = [p for p in sys.path if "site-packages" in p and p.startswith(base_python_path)]
if sys_paths:
print("Detected installation directory:", sys_paths[-1])
subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade", "pytest"])
diff --git a/src/blenderbim/test/bim/feature/aggregate.feature b/src/blenderbim/test/bim/feature/aggregate.feature
index 9d6c35d294..407b02cc17 100644
--- a/src/blenderbim/test/bim/feature/aggregate.feature
+++ b/src/blenderbim/test/bim/feature/aggregate.feature
@@ -42,6 +42,7 @@ Scenario: Unassign object - multiple objects are contained again to their indire
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcMember"
And I press "bim.assign_class"
And I add a cube
@@ -105,6 +106,7 @@ Scenario: Add aggregate - add multiple elements to a custom aggregate class
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcMember"
And I press "bim.assign_class"
And I add a cube
diff --git a/src/blenderbim/test/bim/feature/brick.feature b/src/blenderbim/test/bim/feature/brick.feature
index 06fcfbdefd..19c3084d04 100644
--- a/src/blenderbim/test/bim/feature/brick.feature
+++ b/src/blenderbim/test/bim/feature/brick.feature
@@ -66,6 +66,7 @@ Scenario: Add Brick - from geometry without a Brick IFC library
And I press "bim.new_brick_file"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
And I press "bim.assign_class"
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
@@ -79,6 +80,7 @@ Scenario: Add Brick - from geometry with a Brick IFC library
And the Brickschema is stubbed
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
And I press "bim.assign_class"
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
@@ -139,6 +141,7 @@ Scenario: Remove Brick - with a Brick IFC library reference
And the Brickschema is stubbed
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
And I press "bim.assign_class"
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
@@ -203,6 +206,7 @@ Scenario: Convert IFC to brick
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcUnitaryEquipment"
And I set "scene.BIMRootProperties.ifc_predefined_type" to "AIRHANDLER"
And I press "bim.assign_class"
@@ -220,6 +224,7 @@ Scenario: Assign brick reference
And I set "scene.BIMBrickProperties.active_brick_index" to "0"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
And I press "bim.assign_class"
And the object "IfcChiller/Cube" is selected
diff --git a/src/blenderbim/test/bim/feature/model.feature b/src/blenderbim/test/bim/feature/model.feature
index 3aa74ffaee..66022e0cdf 100644
--- a/src/blenderbim/test/bim/feature/model.feature
+++ b/src/blenderbim/test/bim/feature/model.feature
@@ -525,3 +525,88 @@ Scenario: Create a door, undo and create a new door
And I press "mesh.add_door()"
Then nothing happens
And the object "IfcDoor/IfcDoor" exists
+
+Scenario: Create a MEP transition
+ Given an empty IFC project
+ And I create default MEP types
+ And the variable "element_types" is "[str(e.id()) for e in {ifc}.by_type('IfcDuctSegmentType')]"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[0]"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/RectSegment"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[1]"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/CircleSegment"
+
+ And the object "IfcDuctSegment/RectSegment" is moved to "0,0,0"
+ And the object "IfcDuctSegment/CircleSegment" is moved to "2.5,0,0"
+ And the object "IfcDuctSegment/CircleSegment" is selected
+ And additionally the object "IfcDuctSegment/RectSegment" is selected
+ And I press "bim.mep_add_transition"
+
+ Then the object "IfcDuctFitting/DuctFitting" exists
+ And the object "IfcDuctFittingType/Transition" exists
+ And the object "IfcDuctSegment/RectSegment" is at "0,0,0"
+ And the object "IfcDuctSegment/RectSegment" dimensions are "0.4,0.2,2.370096"
+ And the object "IfcDuctSegment/CircleSegment" is at "3.1299,0,0"
+ And the object "IfcDuctSegment/CircleSegment" dimensions are "0.1000, 0.09927, 2.370096"
+ And the object "IfcDuctFitting/DuctFitting" is at "2.370096, 0.0000, 0.0000"
+ And the object "IfcDuctFitting/DuctFitting" dimensions are "0.4000, 0.2000, 0.759807"
+
+Scenario: Create a MEP bend between intersecting with different locations
+ Given an empty IFC project
+ And I create default MEP types
+ And the variable "element_types" is "[str(e.id()) for e in {ifc}.by_type('IfcDuctSegmentType')]"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[0]"
+ And I set "scene.BIMModelProperties.extrusion_depth" to "5.0"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/Seg1"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[0]"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/Seg2"
+ And the object "IfcDuctSegment/Seg2" is rotated by "0,0,90" deg
+
+ And the object "IfcDuctSegment/Seg2" is moved to "6,1,1"
+ And the object "IfcDuctSegment/Seg1" is selected
+ And additionally the object "IfcDuctSegment/Seg2" is selected
+ And I press "bim.mep_add_bend"
+
+ Then the object "IfcDuctFitting/DuctFitting" exists
+ And the object "IfcDuctFittingType/Bend" exists
+ And the object "IfcDuctSegment/Seg1" is at "0,0,1.0"
+ And the object "IfcDuctSegment/Seg1" dimensions are "0.4,0.2,5.5"
+ And the object "IfcDuctSegment/Seg2" is at "6.0,0.5,1.0"
+ And the object "IfcDuctSegment/Seg2" dimensions are "0.4,0.2,5.5"
+ And the object "IfcDuctFitting/DuctFitting" is at "6.0, 0.5, 1.0"
+ And the object "IfcDuctFitting/DuctFitting" dimensions are "0.7, 0.2, 0.7"
+
+Scenario: Create a MEP bend between intersecting segments at the same location
+ Given an empty IFC project
+ And I create default MEP types
+ And the variable "element_types" is "[str(e.id()) for e in {ifc}.by_type('IfcDuctSegmentType')]"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[0]"
+ And I set "scene.BIMModelProperties.extrusion_depth" to "5.0"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/Seg1"
+
+ And I set "scene.BIMModelProperties.relating_type_id" to "{element_types}[0]"
+ And I press "bim.add_constr_type_instance"
+ And I rename the object "IfcDuctSegment/DuctSegment" to "IfcDuctSegment/Seg2"
+ And the object "IfcDuctSegment/Seg2" is rotated by "0,0,90" deg
+
+ And the object "IfcDuctSegment/Seg1" is selected
+ And additionally the object "IfcDuctSegment/Seg2" is selected
+ And I press "bim.mep_add_bend"
+
+ Then the object "IfcDuctFitting/DuctFitting" exists
+ And the object "IfcDuctFittingType/Bend" exists
+ And the object "IfcDuctSegment/Seg1" is at "0.5,0,1.0"
+ And the object "IfcDuctSegment/Seg1" dimensions are "0.4,0.2,4.5"
+ And the object "IfcDuctSegment/Seg2" is at "0.0,0.5,1.0"
+ And the object "IfcDuctSegment/Seg2" dimensions are "0.4,0.2,4.5"
+ And the object "IfcDuctFitting/DuctFitting" is at "0.0, 0.5, 1.0"
+ And the object "IfcDuctFitting/DuctFitting" dimensions are "0.7, 0.2, 0.7"
diff --git a/src/blenderbim/test/bim/feature/project.feature b/src/blenderbim/test/bim/feature/project.feature
index c427e2e877..14a8a952c3 100644
--- a/src/blenderbim/test/bim/feature/project.feature
+++ b/src/blenderbim/test/bim/feature/project.feature
@@ -175,7 +175,7 @@ Scenario: Load project elements - load objects filtered by whitelist
And I press "bim.load_project(filepath='{cwd}/test/files/basic.ifc', is_advanced=True)"
When I set "scene.BIMProjectProperties.collection_mode" to "DECOMPOSITION"
And I set "scene.BIMProjectProperties.filter_mode" to "WHITELIST"
- And I set "scene.BIMProjectProperties.filter_query" to ".IfcSlab"
+ And I set "scene.BIMProjectProperties.filter_query" to "IfcSlab"
And I set "scene.BIMProjectProperties.should_filter_spatial_elements" to "True"
And I press "bim.load_project_elements"
Then the object "IfcProject/My Project" is an "IfcProject"
@@ -195,7 +195,7 @@ Scenario: Load project elements - load objects filtered by blacklist
And I press "bim.load_project(filepath='{cwd}/test/files/basic.ifc', is_advanced=True)"
When I set "scene.BIMProjectProperties.collection_mode" to "DECOMPOSITION"
And I set "scene.BIMProjectProperties.filter_mode" to "BLACKLIST"
- And I set "scene.BIMProjectProperties.filter_query" to ".IfcSlab"
+ And I set "scene.BIMProjectProperties.filter_query" to "IfcSlab"
And I set "scene.BIMProjectProperties.should_filter_spatial_elements" to "True"
And I press "bim.load_project_elements"
Then the object "IfcProject/My Project" is an "IfcProject"
diff --git a/src/blenderbim/test/bim/feature/spatial.feature b/src/blenderbim/test/bim/feature/spatial.feature
index 03e54ef479..b400efbec6 100644
--- a/src/blenderbim/test/bim/feature/spatial.feature
+++ b/src/blenderbim/test/bim/feature/spatial.feature
@@ -116,17 +116,6 @@ Scenario: Execute generate spaces from walls
When I press "bim.generate_spaces_from_walls"
Then nothing happens
-Scenario: Execute generate flooring coverings from walls
- Given an empty IFC project
- And I load the demo construction library
- And I set "scene.BIMModelProperties.ifc_class" to "IfcWallType"
- And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL100'][0].id()"
- And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
- And I press "bim.add_constr_type_instance"
- And the object "IfcWall/Wall" is selected
- When I press "bim.generate_flooring_coverings_from_walls"
- Then nothing happens
-
Scenario: Execute toggle space visibility
Given an empty IFC project
And I add a cube
diff --git a/src/blenderbim/test/bim/feature/system.feature b/src/blenderbim/test/bim/feature/system.feature
index a9ae5756e9..addd965b95 100644
--- a/src/blenderbim/test/bim/feature/system.feature
+++ b/src/blenderbim/test/bim/feature/system.feature
@@ -61,6 +61,7 @@ Scenario: Assign system
And I press "bim.enable_editing_system(system={system})"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcPump"
And I press "bim.assign_class"
And the object "IfcPump/Cube" is selected
@@ -76,6 +77,7 @@ Scenario: Unassign system
And I press "bim.enable_editing_system(system={system})"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcPump"
And I press "bim.assign_class"
And the object "IfcPump/Cube" is selected
@@ -92,9 +94,35 @@ Scenario: Select system products
And I press "bim.enable_editing_system(system={system})"
And I add a cube
And the object "Cube" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcPump"
And I press "bim.assign_class"
And the object "IfcPump/Cube" is selected
And I press "bim.assign_system(system={system})"
When I press "bim.select_system_products(system={system})"
Then nothing happens
+
+Scenario: Assign flow controls to flow element_type
+ Given an empty IFC project
+ And I add an empty
+ And the object "Empty" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
+ And I set "scene.BIMRootProperties.ifc_class" to "IfcActuator"
+ And I press "bim.assign_class"
+ And I add an empty
+ And the object "Empty" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
+ And I set "scene.BIMRootProperties.ifc_class" to "IfcActuator"
+ And I press "bim.assign_class"
+ And I add an empty
+ And the object "Empty" is selected
+ And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
+ And I set "scene.BIMRootProperties.ifc_class" to "IfcFlowSegment"
+ And I press "bim.assign_class"
+ And the object "IfcActuator/Empty" is selected
+ And additionally the object "IfcActuator/Empty.001" is selected
+ And additionally the object "IfcFlowSegment/Empty" is selected
+ When I press "bim.assign_unassign_flow_control(assign=True)"
+ And the variable "assigned_controls" is "set(tool.System.get_flow_element_controls({ifc}.by_type('IfcFlowSegment')[0]))"
+ Then the variable "assigned_controls" is "set[{ifc}.by_type('IfcActuator')]"
+
diff --git a/src/blenderbim/test/bim/test_feature.py b/src/blenderbim/test/bim/test_feature.py
index 9fd1c4317f..317add69f2 100644
--- a/src/blenderbim/test/bim/test_feature.py
+++ b/src/blenderbim/test/bim/test_feature.py
@@ -28,6 +28,7 @@ from blenderbim.tool.brick import BrickStore
from blenderbim.bim.module.model.data import AuthoringData
from pytest_bdd import scenarios, given, when, then, parsers
from mathutils import Vector
+from math import radians
scenarios("feature")
@@ -108,6 +109,20 @@ def i_load_a_new_pset_template_file():
IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path)
+@given("I create default MEP types")
+def i_create_default_mep_types():
+ model_props = bpy.context.scene.BIMModelProperties
+
+ model_props.type_class = "IfcDuctSegmentType"
+ model_props.type_name = "RECT1"
+ model_props.type_template = "FLOW_SEGMENT_RECTANGULAR"
+ bpy.ops.bim.add_type()
+
+ model_props.type_template = "FLOW_SEGMENT_CIRCULAR"
+ model_props.type_name = "RECT2"
+ bpy.ops.bim.add_type()
+
+
@given("I add a cube")
@when("I add a cube")
def i_add_a_cube():
@@ -227,13 +242,23 @@ def then_the_object_name_is_selected(name):
assert obj in bpy.context.selected_objects
+@given(parsers.parse('the object "{name}" is rotated by "{rotation_deg}" deg'))
+@when(parsers.parse('the object "{name}" is rotated by "{rotation_deg}" deg'))
+def the_object_name_is_rotated_by(name, rotation_deg):
+ rotation_deg = [radians(float(rot)) for rot in rotation_deg.split(",")]
+ obj = the_object_name_exists(name)
+ obj.rotation_euler[0] += rotation_deg[0]
+ obj.rotation_euler[1] += rotation_deg[1]
+ obj.rotation_euler[2] += rotation_deg[2]
+ bpy.context.view_layer.update() # make sure matrix is updated
+
+
@given(parsers.parse('the object "{name}" is moved to "{location}"'))
@when(parsers.parse('the object "{name}" is moved to "{location}"'))
def the_object_name_is_moved_to_location(name, location):
location = [float(co) for co in location.split(",")]
- the_object_name_exists(name).matrix_world[0][3] = location[0]
- the_object_name_exists(name).matrix_world[1][3] = location[1]
- the_object_name_exists(name).matrix_world[2][3] = location[2]
+ obj = the_object_name_exists(name)
+ obj.matrix_world.translation = location
@given(parsers.parse('the object "{name}" is scaled to "{scale}"'))
diff --git a/src/blenderbim/test/core/test_drawing.py b/src/blenderbim/test/core/test_drawing.py
index cb5e76f248..55c6dfc3f8 100644
--- a/src/blenderbim/test/core/test_drawing.py
+++ b/src/blenderbim/test/core/test_drawing.py
@@ -140,7 +140,7 @@ class TestAddSheet:
class TestOpenSheet:
def test_run(self, drawing):
drawing.get_document_uri("sheet", "LAYOUT").should_be_called().will_return("uri")
- drawing.open_svg("uri").should_be_called()
+ drawing.open_layout_svg("uri").should_be_called()
subject.open_sheet(drawing, sheet="sheet")
@@ -311,7 +311,7 @@ class TestAddDrawing:
drawing.generate_drawing_name("target_view", "location_hint").should_be_called().will_return("drawing_name")
drawing.ensure_unique_drawing_name("drawing_name").should_be_called().will_return("name")
drawing.generate_drawing_matrix("target_view", "location_hint").should_be_called().will_return("matrix")
- drawing.create_camera("name", "matrix").should_be_called().will_return("obj")
+ drawing.create_camera("name", "matrix", "location_hint").should_be_called().will_return("obj")
drawing.get_body_context().should_be_called().will_return("context")
drawing.run_root_assign_class(
obj="obj",
diff --git a/src/blenderbim/test/core/test_geometry.py b/src/blenderbim/test/core/test_geometry.py
index 354cb8781d..87dfbc4f67 100644
--- a/src/blenderbim/test/core/test_geometry.py
+++ b/src/blenderbim/test/core/test_geometry.py
@@ -192,6 +192,7 @@ class TestAddRepresentation:
class TestSwitchRepresentation:
def test_switching_to_a_freshly_loaded_representation(self, ifc, geometry):
geometry.is_edited("obj").should_be_called().will_return(False)
+ geometry.get_object_data("obj").should_be_called().will_return("current_obj_data")
geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation")
geometry.get_representation_data("representation").should_be_called().will_return(None)
geometry.import_representation("obj", "representation", apply_openings=True).should_be_called().will_return("new_data")
@@ -216,6 +217,7 @@ class TestSwitchRepresentation:
def test_switching_to_a_reloaded_representation_and_deleting_the_existing_data(self, ifc, geometry):
geometry.is_edited("obj").should_be_called().will_return(False)
+ geometry.get_object_data("obj").should_be_called().will_return("current_obj_data")
geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation")
geometry.get_representation_data("representation").should_be_called().will_return("existing_data")
geometry.import_representation("obj", "representation", apply_openings=True).should_be_called().will_return("new_data")
@@ -224,6 +226,7 @@ class TestSwitchRepresentation:
geometry.link("representation", "new_data").should_be_called()
geometry.change_object_data("obj", "new_data", is_global=True).should_be_called()
geometry.record_object_materials("obj").should_be_called()
+ geometry.has_data_users("existing_data").should_be_called().will_return(False)
geometry.delete_data("existing_data").should_be_called()
geometry.clear_modifiers("obj").should_be_called()
ifc.get_entity("obj").should_be_called().will_return("element")
@@ -241,6 +244,7 @@ class TestSwitchRepresentation:
def test_switching_to_an_existing_representation(self, ifc, geometry):
geometry.is_edited("obj").should_be_called().will_return(False)
+ geometry.get_object_data("obj").should_be_called().will_return("current_obj_data")
geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation")
geometry.get_representation_data("representation").should_be_called().will_return("data")
geometry.change_object_data("obj", "data", is_global=True).should_be_called()
@@ -264,6 +268,7 @@ class TestSwitchRepresentation:
geometry.get_representation_id("mapped_rep").should_be_called().will_return("representation_id")
geometry.run_geometry_update_representation(obj="obj").should_be_called()
geometry.does_representation_id_exist("representation_id").should_be_called().will_return(True)
+ geometry.get_object_data("obj").should_be_called().will_return("current_obj_data")
geometry.resolve_mapped_representation("mapped_rep").should_be_called().will_return("representation")
geometry.get_representation_data("representation").should_be_called().will_return("data")
geometry.change_object_data("obj", "data", is_global=False).should_be_called()
diff --git a/src/blenderbim/test/core/test_georeference.py b/src/blenderbim/test/core/test_georeference.py
index 957e43b232..13aee6060c 100644
--- a/src/blenderbim/test/core/test_georeference.py
+++ b/src/blenderbim/test/core/test_georeference.py
@@ -97,8 +97,7 @@ class TestSetCursorLocation:
class TestConvertLocalToGlobal:
def test_run(self, georeference):
georeference.get_coordinates("input").should_be_called().will_return("coordinates")
- georeference.get_map_conversion().should_be_called().will_return("map_conversion")
- georeference.xyz2enh("coordinates", "map_conversion").should_be_called().will_return("enh")
+ georeference.xyz2enh("coordinates").should_be_called().will_return("enh")
georeference.set_coordinates("output", "enh").should_be_called()
georeference.set_cursor_location("enh").should_be_called()
subject.convert_local_to_global(georeference)
@@ -107,8 +106,7 @@ class TestConvertLocalToGlobal:
class TestConvertGlobalToLocal:
def test_run(self, georeference):
georeference.get_coordinates("input").should_be_called().will_return("coordinates")
- georeference.get_map_conversion().should_be_called().will_return("map_conversion")
- georeference.enh2xyz("coordinates", "map_conversion").should_be_called().will_return("xyz")
+ georeference.enh2xyz("coordinates").should_be_called().will_return("xyz")
georeference.set_coordinates("output", "xyz").should_be_called()
georeference.set_cursor_location("xyz").should_be_called()
subject.convert_global_to_local(georeference)
diff --git a/src/blenderbim/test/core/test_material.py b/src/blenderbim/test/core/test_material.py
index f931c5f192..32e7abb2ca 100644
--- a/src/blenderbim/test/core/test_material.py
+++ b/src/blenderbim/test/core/test_material.py
@@ -28,13 +28,13 @@ class TestUnlinkMaterial:
class TestAddMaterial:
def test_add_a_default_material(self, ifc, material, style):
- material.add_default_material_object().should_be_called().will_return("obj")
+ material.add_default_material_object("name").should_be_called().will_return("obj")
material.get_name("obj").should_be_called().will_return("name")
ifc.run("material.add_material", name="name").should_be_called().will_return("material")
ifc.link("material", "obj").should_be_called()
style.get_style("obj").should_be_called().will_return(None)
material.is_editing_materials().should_be_called().will_return(False)
- assert subject.add_material(ifc, material, style) == "material"
+ assert subject.add_material(ifc, material, style, name="name") == "material"
def test_add_a_material_to_a_blender_material_object(self, ifc, material, style):
material.get_name("obj").should_be_called().will_return("name")
diff --git a/src/blenderbim/test/core/test_system.py b/src/blenderbim/test/core/test_system.py
index cabd2d9a68..f77cae4cd1 100644
--- a/src/blenderbim/test/core/test_system.py
+++ b/src/blenderbim/test/core/test_system.py
@@ -62,7 +62,7 @@ class TestRemoveSystem:
class TestEnableEditingSystem:
def test_run(self, system):
system.import_system_attributes("system").should_be_called()
- system.set_active_system("system").should_be_called()
+ system.set_active_edited_system("system").should_be_called()
subject.enable_editing_system(system, system="system")
@@ -87,6 +87,7 @@ class TestUnassignSystem:
class TestSelectSystemProducts:
def test_run(self, system):
system.select_system_products("system").should_be_called()
+ system.set_active_system("system").should_be_called()
subject.select_system_products(system, system="system")
diff --git a/src/blenderbim/test/tool/test_drawing.py b/src/blenderbim/test/tool/test_drawing.py
index f7fe0c4743..68c316941b 100644
--- a/src/blenderbim/test/tool/test_drawing.py
+++ b/src/blenderbim/test/tool/test_drawing.py
@@ -53,10 +53,10 @@ class TestCreateAnnotationObject(NewFile):
class TestCreateCamera(NewFile):
def test_run(self):
- obj = subject.create_camera("Name", mathutils.Matrix())
+ obj = subject.create_camera("Name", mathutils.Matrix(), "PERSPECTIVE")
assert obj.name == "Name"
assert obj.matrix_world == mathutils.Matrix()
- assert obj.data.type == "ORTHO"
+ assert obj.data.type == "PERSP"
assert obj.data.ortho_scale == 50
assert obj.data.clip_end == 10
assert obj.users_collection[0] == bpy.context.scene.collection
@@ -319,6 +319,7 @@ class TestGetDrawingGroup(NewFile):
tool.Ifc.set(ifc)
element = ifc.createIfcAnnotation()
group = ifcopenshell.api.run("group.add_group", ifc)
+ group.ObjectType = "DRAWING"
ifcopenshell.api.run("group.assign_group", ifc, products=[element], group=group)
assert subject.get_drawing_group(element) == group
@@ -676,6 +677,10 @@ class TestDrawingMaintainingSheetPosition(NewFile):
ifc = tool.Ifc.get()
sheet_path = Path.cwd() / "layouts" / "A00 - UNTITLED.svg"
+ bpy.ops.mesh.primitive_cube_add(size=10, location=(0, 0, 4))
+ obj = bpy.data.objects["Cube"]
+ bpy.ops.bim.assign_class(ifc_class="IfcActuator", predefined_type="ELECTRICACTUATOR", userdefined_type="")
+
bpy.ops.bim.load_sheets()
bpy.ops.bim.add_sheet()
@@ -693,12 +698,21 @@ class TestDrawingMaintainingSheetPosition(NewFile):
bpy.ops.bim.add_drawing_to_sheet()
bpy.ops.bim.open_sheet()
+ # uncomment if debugging
+ # without `sleep` `bim.open_sheet` tend to open sheet in browser
+ # with PLAN_VIEW.svg that will be created only later
+ # from time import sleep
+ # sleep(0.1)
+
# check drawing default position
drawing_data = self.get_sheet_drawing_data(sheet_path)
assert drawing_data["foreground"] == (30.0, 30.0, 500.0, 500.0)
assert drawing_data["view-title"] == (30.0, 535.0, 50.22, 10.0)
- bpy.context.scene.camera.data.BIMCameraProperties.raster_x = 1200
+ bpy.context.scene.camera.data.BIMCameraProperties.width = 25
+ bpy.context.scene.camera.data.BIMCameraProperties.height = 25
+ tool.Blender.force_depsgraph_update()
+
bpy.ops.bim.create_drawing()
bpy.ops.bim.open_sheet()
@@ -706,8 +720,8 @@ class TestDrawingMaintainingSheetPosition(NewFile):
# check drawing position on the sheet
drawing_data = self.get_sheet_drawing_data(sheet_path)
- assert drawing_data["foreground"] == (30.0, 71.67, 500.0, 416.67)
- assert drawing_data["view-title"] == (30.0, 493.33, 50.22, 10.0)
+ assert drawing_data["foreground"] == (155.0, 155.0, 250.0, 250.0)
+ assert drawing_data["view-title"] == (155.0, 410.0, 50.22, 10.0)
class TestUpdateTextValue(NewFile):
diff --git a/src/blenderbim/test/tool/test_georeference.py b/src/blenderbim/test/tool/test_georeference.py
index 8540fed870..177d9aeb6b 100644
--- a/src/blenderbim/test/tool/test_georeference.py
+++ b/src/blenderbim/test/tool/test_georeference.py
@@ -247,25 +247,21 @@ class TestSetBlenderTrueNorth(NewFile):
assert round(math.degrees(bpy.context.scene.sun_pos_properties.north_offset)) == 45
-class TestGetMapConversion(NewFile):
- def test_run(self):
- ifc = ifcopenshell.file()
- tool.Ifc.set(ifc)
- ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
- ifcopenshell.api.run("context.add_context", ifc, context_type="Model")
- ifcopenshell.api.run("georeference.add_georeferencing", ifc)
- assert subject.get_map_conversion().is_a("IfcMapConversion")
-
-
class TestXyz2Enh(NewFile):
def test_run(self):
- assert subject.xyz2enh([0.0, 0.0, 0.0], None) == [0.0, 0.0, 0.0]
+ ifc = ifcopenshell.file()
+ ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
+ tool.Ifc.set(ifc)
+ assert subject.xyz2enh([0.0, 0.0, 0.0]) == (0.0, 0.0, 0.0)
def test_using_the_blender_offset(self):
+ ifc = ifcopenshell.file()
+ ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
+ tool.Ifc.set(ifc)
props = bpy.context.scene.BIMGeoreferenceProperties
props.has_blender_offset = True
props.blender_eastings = "1.0"
- assert subject.xyz2enh([0.0, 0.0, 0.0], None) == (1.0, 0.0, 0.0)
+ assert subject.xyz2enh([0.0, 0.0, 0.0]) == (1.0, 0.0, 0.0)
def test_using_the_map_conversion(self):
ifc = ifcopenshell.file()
@@ -275,7 +271,7 @@ class TestXyz2Enh(NewFile):
ifcopenshell.api.run("georeference.add_georeferencing", ifc)
map_conversion = ifc.by_type("IfcMapConversion")[0]
map_conversion.Eastings = 1.0
- assert subject.xyz2enh([0.0, 0.0, 0.0], map_conversion) == (1.0, 0.0, 0.0)
+ assert subject.xyz2enh([0.0, 0.0, 0.0]) == (1.0, 0.0, 0.0)
def test_applying_both_blender_offset_and_map_conversion(self):
props = bpy.context.scene.BIMGeoreferenceProperties
@@ -288,18 +284,24 @@ class TestXyz2Enh(NewFile):
ifcopenshell.api.run("georeference.add_georeferencing", ifc)
map_conversion = ifc.by_type("IfcMapConversion")[0]
map_conversion.Northings = 1.0
- assert subject.xyz2enh([0.0, 0.0, 0.0], map_conversion) == (1.0, 1.0, 0.0)
+ assert subject.xyz2enh([0.0, 0.0, 0.0]) == (1.0, 1.0, 0.0)
class TestEnh2Xyz(NewFile):
def test_run(self):
- assert subject.enh2xyz([0.0, 0.0, 0.0], None) == [0.0, 0.0, 0.0]
+ ifc = ifcopenshell.file()
+ ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
+ tool.Ifc.set(ifc)
+ assert subject.enh2xyz([0.0, 0.0, 0.0]) == (0.0, 0.0, 0.0)
def test_using_the_blender_offset(self):
+ ifc = ifcopenshell.file()
+ ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
+ tool.Ifc.set(ifc)
props = bpy.context.scene.BIMGeoreferenceProperties
props.has_blender_offset = True
props.blender_eastings = "1.0"
- assert subject.enh2xyz([0.0, 0.0, 0.0], None) == (-1.0, 0.0, 0.0)
+ assert subject.enh2xyz([0.0, 0.0, 0.0]) == (-1.0, 0.0, 0.0)
def test_using_the_map_conversion(self):
ifc = ifcopenshell.file()
@@ -309,7 +311,7 @@ class TestEnh2Xyz(NewFile):
ifcopenshell.api.run("georeference.add_georeferencing", ifc)
map_conversion = ifc.by_type("IfcMapConversion")[0]
map_conversion.Eastings = 1.0
- assert subject.enh2xyz([0.0, 0.0, 0.0], map_conversion) == (-1.0, 0.0, 0.0)
+ assert subject.enh2xyz([0.0, 0.0, 0.0]) == (-1.0, 0.0, 0.0)
def test_applying_both_blender_offset_and_map_conversion(self):
props = bpy.context.scene.BIMGeoreferenceProperties
@@ -322,7 +324,7 @@ class TestEnh2Xyz(NewFile):
ifcopenshell.api.run("georeference.add_georeferencing", ifc)
map_conversion = ifc.by_type("IfcMapConversion")[0]
map_conversion.Northings = 1.0
- assert subject.enh2xyz([0.0, 0.0, 0.0], map_conversion) == (-1.0, -1.0, 0.0)
+ assert subject.enh2xyz([0.0, 0.0, 0.0]) == (-1.0, -1.0, 0.0)
class TestSetIfcGridNorth(NewFile):
diff --git a/src/blenderbim/test/tool/test_material.py b/src/blenderbim/test/tool/test_material.py
index fa2e7b8b4e..467eb34afe 100644
--- a/src/blenderbim/test/tool/test_material.py
+++ b/src/blenderbim/test/tool/test_material.py
@@ -31,14 +31,19 @@ class TestImplementsTool(NewFile):
class TestAddDefaultMaterialObject(NewFile):
def test_run(self):
- material = subject.add_default_material_object()
+ material = subject.add_default_material_object(None)
assert isinstance(material, bpy.types.Material)
assert material.name == "Default"
+ def test_specify_a_name(self):
+ material = subject.add_default_material_object("Material")
+ assert isinstance(material, bpy.types.Material)
+ assert material.name == "Material"
+
class TestDeleteObject(NewFile):
def test_run(self):
- material = subject.add_default_material_object()
+ material = subject.add_default_material_object(None)
assert bpy.data.materials.get("Default")
subject.delete_object(material)
assert not bpy.data.materials.get("Default")
diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py
index 90546c0a16..f82f4f8a1c 100644
--- a/src/blenderbim/test/tool/test_model.py
+++ b/src/blenderbim/test/tool/test_model.py
@@ -23,6 +23,7 @@ import blenderbim.tool as tool
import numpy as np
from test.bim.bootstrap import NewFile
from blenderbim.tool.model import Model as subject
+from ifcopenshell.util.shape_builder import V
class TestImplementsTool(NewFile):
@@ -52,12 +53,24 @@ class TestGenerateOccurrenceName(NewFile):
bpy.context.scene.BIMModelProperties.occurrence_name_function = '"Foobar"'
assert subject.generate_occurrence_name(element_type, "IfcWall") == "Foobar"
-class TestGetManualBooleans(NewFile):
- def test_run(self):
- assert isinstance(subject(), blenderbim.core.tool.Model)
- def test_len_returned_boolean(self):
+class TestGetManualBooleans(NewFile):
+ def test_get_manual_booleans(self):
+ clippings = [
+ {
+ "type": "IfcBooleanClippingResult",
+ "operand_type": "IfcHalfSpaceSolid",
+ "matrix": np.eye(4).tolist(),
+ },
+ {
+ "type": "IfcBooleanResult",
+ "operand_type": "IfcHalfSpaceSolid",
+ "matrix": np.eye(4).tolist(),
+ },
+ ]
+
ifc = ifcopenshell.file()
+ self.ifc = ifc
tool.Ifc.set(ifc)
ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
length = ifcopenshell.api.run("unit.add_si_unit", ifc, unit_type="LENGTHUNIT")
@@ -65,17 +78,267 @@ class TestGetManualBooleans(NewFile):
ifcopenshell.api.run("unit.assign_unit", ifc)
element = ifc.createIfcColumn()
hea100 = ifc.create_entity(
- "IfcIShapeProfileDef", ProfileName="HEA100", ProfileType="AREA",
- OverallWidth=100, OverallDepth=96, WebThickness=5, FlangeThickness=8, FilletRadius=12,
+ "IfcIShapeProfileDef",
+ ProfileName="HEA100",
+ ProfileType="AREA",
+ OverallWidth=100,
+ OverallDepth=96,
+ WebThickness=5,
+ FlangeThickness=8,
+ FilletRadius=12,
)
model3d = ifcopenshell.api.run("context.add_context", ifc, context_type="Model")
- body = ifcopenshell.api.run("context.add_context", ifc,context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=model3d)
- representation = ifcopenshell.api.run("geometry.add_profile_representation", ifc, context=body, profile=hea100, depth=5)
+ body = ifcopenshell.api.run(
+ "context.add_context",
+ ifc,
+ context_type="Model",
+ context_identifier="Body",
+ target_view="MODEL_VIEW",
+ parent=model3d,
+ )
+ representation = ifcopenshell.api.run(
+ "geometry.add_profile_representation", ifc, context=body, profile=hea100, depth=5, clippings=clippings
+ )
ifcopenshell.api.run("geometry.assign_representation", ifc, product=element, representation=representation)
- matrix = np.eye(4)
- matrix = ifcopenshell.util.placement.rotation(45,"X") @ matrix
- matrix[:,3][0:3] = (0, 0, 3)
- matrix = matrix.tolist()
- ifcopenshell.api.run("geometry.add_boolean", ifc, representation = representation, type = "IfcHalfSpaceSolid", matrix = matrix)
- assert len(subject.get_manual_booleans(element)) == 1
+ booleans = subject.get_booleans(element)
+ assert len(booleans) == 2
+ assert len(subject.get_manual_booleans(element)) == 0
+ subject.mark_manual_booleans(element, booleans)
+ assert len(subject.get_manual_booleans(element)) == 2
+
+
+class TestStairCalculatedParams(NewFile):
+ def compare_data(self, pset_data, expected_calculated_data):
+ calculated_data = subject.get_active_stair_calculated_params(pset_data)
+ for key, value in expected_calculated_data.items():
+ assert tool.Cad.is_x(calculated_data[key], value)
+
+ def test_run(self):
+ bpy.ops.bim.create_project()
+ bpy.ops.mesh.add_clever_stair()
+ pset_data_base = {
+ "number_of_treads": 3,
+ "height": 1.0,
+ "tread_run": 0.3,
+ "custom_first_last_tread_run": (0.0, 0.0),
+ "nosing_length": 0.0,
+ }
+ calculated_data_base = {
+ "Number of Risers": 4,
+ "Tread Rise": 0.25,
+ "Length": 1.2,
+ }
+ self.compare_data(pset_data_base, calculated_data_base)
+
+ # custom first and last treads run
+ pset_data = pset_data_base.copy()
+ calculated_data = calculated_data_base.copy()
+ pset_data["custom_first_last_tread_run"] = (0.1, 0.4)
+ calculated_data["Length"] += -0.2 + 0.1
+ self.compare_data(pset_data, calculated_data)
+
+ # overlap affects stair length only by first tread
+ pset_data = pset_data_base.copy()
+ calculated_data = calculated_data_base.copy()
+ pset_data["nosing_length"] = 0.1
+ calculated_data["Length"] += 0.1
+ self.compare_data(pset_data, calculated_data)
+
+ # tread gap
+ pset_data = pset_data_base.copy()
+ calculated_data = calculated_data_base.copy()
+ pset_data["nosing_length"] = -0.1
+ calculated_data["Length"] += 0.1 * pset_data["number_of_treads"]
+ self.compare_data(pset_data, calculated_data)
+
+
+class TestGenerateStair2DProfile(NewFile):
+ def compare_data(self, generated_profile, expected_profile):
+ verts_gen, edges_gen, faces_gen = generated_profile
+ verts, edges, faces = expected_profile
+
+ assert np.all(edges == np.array(edges_gen))
+ assert faces == tuple(tuple(face) for face in faces_gen)
+ for vert, vert_gen in zip(verts, verts_gen, strict=True):
+ assert tool.Cad.are_vectors_equal(vert, vert_gen, 0.01)
+
+ def test_create_concrete_stair(self):
+ kwargs = {
+ "base_slab_depth": 0.25,
+ "has_top_nib": False,
+ "height": 1.0,
+ "number_of_treads": 3,
+ "stair_type": "CONCRETE",
+ "top_slab_depth": 0.25,
+ "tread_depth": 0.25,
+ "tread_run": 0.3,
+ "width": 1.2,
+ }
+ verts_data = (
+ V(0.0, 0, 0.0),
+ V(0.0, 0, 0.25),
+ V(0.3, 0, 0.25),
+ V(0.3, 0, 0.5),
+ V(0.6, 0, 0.5),
+ V(0.6, 0, 0.75),
+ V(0.9, 0, 0.75),
+ V(0.9, 0, 1.0),
+ V(1.2, 0, 1.0),
+ V(1.2, 0, 0.67457),
+ V(0.1, 0, -0.25),
+ V(0.0, 0, -0.25),
+ )
+ edges_data = (
+ (0, 1),
+ (1, 2),
+ (2, 3),
+ (3, 4),
+ (4, 5),
+ (5, 6),
+ (6, 7),
+ (7, 8),
+ (8, 9),
+ (0, 11),
+ (10, 11),
+ (10, 9),
+ )
+ faces_data = ()
+ expected_profile = (verts_data, edges_data, faces_data)
+ generated_profile = subject.generate_stair_2d_profile(**kwargs)
+ self.compare_data(generated_profile, expected_profile)
+
+ def test_create_concrete_stair_nib(self):
+ kwargs = {
+ "base_slab_depth": 0.25,
+ "has_top_nib": True,
+ "height": 1.0,
+ "number_of_treads": 3,
+ "stair_type": "CONCRETE",
+ "top_slab_depth": 0.25,
+ "tread_depth": 0.25,
+ "tread_run": 0.3,
+ "width": 1.2,
+ }
+ verts_data = (
+ V(0.0, 0, 0.0),
+ V(0.0, 0, 0.25),
+ V(0.3, 0, 0.25),
+ V(0.3, 0, 0.5),
+ V(0.6, 0, 0.5),
+ V(0.6, 0, 0.75),
+ V(0.9, 0, 0.75),
+ V(0.9, 0, 1.0),
+ V(1.2, 0, 1.0),
+ V(1.2, 0, 0.75),
+ V(1.3, 0, 0.75),
+ V(0.1, 0, -0.25),
+ V(0.0, 0, -0.25),
+ )
+
+ edges_data = (
+ (0, 1),
+ (1, 2),
+ (2, 3),
+ (3, 4),
+ (4, 5),
+ (5, 6),
+ (6, 7),
+ (7, 8),
+ (8, 9),
+ (9, 10),
+ (0, 12),
+ (11, 12),
+ (11, 10),
+ )
+
+ faces_data = ()
+ expected_profile = (verts_data, edges_data, faces_data)
+ generated_profile = subject.generate_stair_2d_profile(**kwargs)
+ self.compare_data(generated_profile, expected_profile)
+
+ def test_create_wood_steel_stair(self):
+ kwargs = {
+ "height": 1.0,
+ "number_of_treads": 3,
+ "stair_type": "WOOD/STEEL",
+ "tread_depth": 0.25,
+ "tread_run": 0.3,
+ "width": 1.2,
+ }
+ verts_data = (
+ V(0.0, 0, 0.0),
+ V(0.3, 0, 0.0),
+ V(0.3, 0, 0.25),
+ V(0.0, 0, 0.25),
+ V(0.3, 0, 0.25),
+ V(0.6, 0, 0.25),
+ V(0.6, 0, 0.5),
+ V(0.3, 0, 0.5),
+ V(0.6, 0, 0.5),
+ V(0.9, 0, 0.5),
+ V(0.9, 0, 0.75),
+ V(0.6, 0, 0.75),
+ V(0.9, 0, 0.75),
+ V(1.2, 0, 0.75),
+ V(1.2, 0, 1.0),
+ V(0.9, 0, 1.0),
+ )
+
+ edges_data = (
+ (0, 1),
+ (1, 2),
+ (2, 3),
+ (3, 0),
+ (4, 5),
+ (5, 6),
+ (6, 7),
+ (7, 4),
+ (8, 9),
+ (9, 10),
+ (10, 11),
+ (11, 8),
+ (12, 13),
+ (13, 14),
+ (14, 15),
+ (15, 12),
+ )
+
+ faces_data = ()
+
+ expected_profile = (verts_data, edges_data, faces_data)
+ generated_profile = subject.generate_stair_2d_profile(**kwargs)
+ self.compare_data(generated_profile, expected_profile)
+
+ def test_create_generic_stair(self):
+ kwargs = {"height": 1.0, "number_of_treads": 3, "stair_type": "GENERIC", "tread_run": 0.3, "width": 1.2}
+ verts_data = (
+ V(0.0, 0, 0.0),
+ V(0.0, 0, 0.25),
+ V(0.3, 0, 0.25),
+ V(0.3, 0, 0.5),
+ V(0.6, 0, 0.5),
+ V(0.6, 0, 0.75),
+ V(0.9, 0, 0.75),
+ V(0.9, 0, 1.0),
+ V(1.2, 0, 1.0),
+ V(1.2, 0, 0.0),
+ )
+
+ edges_data = (
+ (0, 1),
+ (1, 2),
+ (2, 3),
+ (3, 4),
+ (4, 5),
+ (5, 6),
+ (6, 7),
+ (7, 8),
+ (8, 9),
+ (9, 0),
+ )
+
+ faces_data = ()
+ expected_profile = (verts_data, edges_data, faces_data)
+ generated_profile = subject.generate_stair_2d_profile(**kwargs)
+ self.compare_data(generated_profile, expected_profile)
diff --git a/src/blenderbim/test/tool/test_system.py b/src/blenderbim/test/tool/test_system.py
index 2b23513f05..419c46cc7f 100644
--- a/src/blenderbim/test/tool/test_system.py
+++ b/src/blenderbim/test/tool/test_system.py
@@ -20,8 +20,11 @@ import bpy
import ifcopenshell
import blenderbim.core.tool
import blenderbim.tool as tool
+import numpy as np
from test.bim.bootstrap import NewFile
from blenderbim.tool.system import System as subject
+from mathutils import Euler, Vector, Matrix
+from math import pi
class TestImplementsTool(NewFile):
@@ -29,6 +32,59 @@ class TestImplementsTool(NewFile):
assert isinstance(subject(), blenderbim.core.tool.System)
+class TestAddPorts(NewFile):
+ def setup_mep_segment(self):
+ bpy.ops.bim.create_project()
+ bpy.ops.mesh.primitive_cube_add(size=1, location=(0, 0, 0))
+ obj = bpy.data.objects["Cube"]
+ obj.scale = (1, 1, 5)
+ bpy.ops.bim.assign_class(ifc_class="IfcDuctSegment", predefined_type="RIGIDSEGMENT", userdefined_type="")
+ element = tool.Ifc.get_entity(obj)
+ obj.matrix_world = Euler((pi / 2, 0, pi / 2)).to_matrix().to_4x4() @ obj.matrix_world
+ # move origin
+ for v in obj.data.vertices:
+ v.co += Vector((0, 0, 2.5))
+ return obj, element
+
+ def check_ports_matrices(self, ports, expected_matrices):
+ si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
+ for port, expected_matrix in zip(ports, expected_matrices, strict=True):
+ port_matrix = tool.Model.get_element_matrix(port)
+ port_matrix.translation *= si_conversion
+ assert np.allclose(port_matrix, expected_matrix, atol=1.0e-5)
+
+ def test_run(self):
+ # default use
+ obj, element = self.setup_mep_segment()
+ ports = subject.add_ports(obj)
+ assert len(subject.get_ports(element)) == len(ports)
+ self.check_ports_matrices(ports, (obj.matrix_world, obj.matrix_world @ Matrix.Translation((0, 0, 5))))
+
+ # skip end port
+ obj, element = self.setup_mep_segment()
+ ports = subject.add_ports(obj, add_end_port=False)
+ self.check_ports_matrices(ports, (obj.matrix_world,))
+
+ # skip start port
+ obj, element = self.setup_mep_segment()
+ ports = subject.add_ports(obj, add_start_port=False)
+ self.check_ports_matrices(ports, (obj.matrix_world @ Matrix.Translation((0, 0, 5)),))
+
+ # position end port
+ obj, element = self.setup_mep_segment()
+ ports = subject.add_ports(obj, end_port_pos=Vector((1, 2, 3)))
+ translated_matrix = obj.matrix_world.copy()
+ translated_matrix.translation = (1, 2, 3)
+ self.check_ports_matrices(ports, (obj.matrix_world, translated_matrix))
+
+ # offset end port
+ obj, element = self.setup_mep_segment()
+ ports = subject.add_ports(obj, offset_end_port=Vector((0, 0, 1)))
+ translated_matrix = obj.matrix_world.copy()
+ translated_matrix.translation = (5, 0, 1)
+ self.check_ports_matrices(ports, (obj.matrix_world, translated_matrix))
+
+
class TestCreateEmptyAtCursorWithElementOrientation(NewFile):
def test_run(self):
ifc = ifcopenshell.file()
@@ -53,9 +109,9 @@ class TestDeleteElementObjects(NewFile):
class TestDisableEditingSystem(NewFile):
def test_run(self):
- bpy.context.scene.BIMSystemProperties.active_system_id = 10
+ bpy.context.scene.BIMSystemProperties.edited_system_id = 10
subject.disable_editing_system()
- assert bpy.context.scene.BIMSystemProperties.active_system_id == 0
+ assert bpy.context.scene.BIMSystemProperties.edited_system_id == 0
class TestDisableSystemEditingUI(NewFile):
@@ -177,7 +233,11 @@ class TestLoadPorts(NewFile):
ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcProject")
ifcopenshell.api.run("unit.assign_unit", ifc)
tool.Ifc().set(ifc)
+
element = ifc.createIfcChiller()
+ obj = bpy.data.objects.new("Object", None)
+ tool.Ifc.link(element, obj)
+
port = ifc.createIfcDistributionPort()
subject.load_ports(element, [port])
obj = tool.Ifc.get_object(port)
@@ -215,5 +275,32 @@ class TestSetActiveSystem(NewFile):
ifc = ifcopenshell.file()
tool.Ifc().set(ifc)
system = ifcopenshell.api.run("system.add_system", ifc, ifc_class="IfcSystem")
- subject.set_active_system(system)
- assert bpy.context.scene.BIMSystemProperties.active_system_id == system.id()
+ subject.set_active_edited_system(system)
+ assert bpy.context.scene.BIMSystemProperties.edited_system_id == system.id()
+
+
+class TestFlowElementAndControls(NewFile):
+ def test_run(self):
+ ifc = ifcopenshell.file()
+ flow_element = ifc.createIfcFlowSegment()
+ flow_control = ifc.createIfcController()
+ flow_control1 = ifc.createIfcController()
+
+ assert len(subject.get_flow_element_controls(flow_element)) == 0
+ assert subject.get_flow_control_flow_element(flow_control) == None
+
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ ifc,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ ifc,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ controls = subject.get_flow_element_controls(flow_element)
+ assert set(controls) == set((flow_control, flow_control1))
+ assert subject.get_flow_control_flow_element(flow_control) == flow_element
diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp
index 059aebd45c..f73b137921 100644
--- a/src/ifcconvert/IfcConvert.cpp
+++ b/src/ifcconvert/IfcConvert.cpp
@@ -461,6 +461,7 @@ int main(int argc, char** argv) {
("space-name-transform", po::value(),
"Additional transform to the space labels in SVG")
("edge-arrows", "Adds arrow heads to edge segments to signify edge direction")
+ ("ecef", "Write glTF in Earth-Centered Earth-Fixed coordinates. Requires PROJ")
;
po::options_description cmdline_options;
@@ -527,6 +528,7 @@ int main(int argc, char** argv) {
const bool generate_uvs = vmap.count("generate-uvs") != 0;
const bool validate = vmap.count("validate") != 0;
const bool edge_arrows = vmap.count("edge-arrows") != 0;
+ const bool write_gltf_ecef = vmap.count("ecef") != 0;
const bool no_wire_intersection_check = vmap.count("no-wire-intersection-check") != 0;
const bool no_wire_intersection_tolerance = vmap.count("no-wire-intersection-tolerance") != 0;
const bool strict_tolerance = vmap.count("strict-tolerance") != 0;
@@ -840,7 +842,8 @@ int main(int argc, char** argv) {
settings.set(SerializerSettings::USE_MATERIAL_NAMES, use_material_names);
settings.set(SerializerSettings::USE_ELEMENT_TYPES, use_element_types);
settings.set(SerializerSettings::USE_ELEMENT_HIERARCHY, use_element_hierarchy);
- settings.set_deflection_tolerance(deflection_tolerance);
+ settings.set(SerializerSettings::WRITE_GLTF_ECEF, write_gltf_ecef);
+ settings.set_deflection_tolerance(deflection_tolerance);
settings.set_angular_tolerance(angular_tolerance);
settings.precision = precision;
diff --git a/src/ifccsv/ifccsv.py b/src/ifccsv/ifccsv.py
index 04d18727e2..474de0b93a 100755
--- a/src/ifccsv/ifccsv.py
+++ b/src/ifccsv/ifccsv.py
@@ -73,6 +73,7 @@ class IfcCsv:
empty="",
bool_true="YES",
bool_false="NO",
+ concat=", ",
sort=None,
groups=None,
summaries=None,
@@ -103,6 +104,8 @@ class IfcCsv:
value = bool_true
elif value is False:
value = bool_false
+ elif isinstance(value, (list, tuple)) and concat is not None:
+ value = concat.join(map(str, value))
result.append(value)
self.results.append(result)
@@ -453,6 +456,7 @@ if __name__ == "__main__":
)
parser.add_argument("--bool_true", type=str, default="YES", help="How to represent true values. Defaults to YES.")
parser.add_argument("--bool_false", type=str, default="NO", help="How to represent false values. Defaults to NO.")
+ parser.add_argument("--concat", type=str, default=", ", help="How to concatenate lists. Defaults to ', '.")
parser.add_argument("-q", "--query", type=str, default="", help='Specify a IFC query selector, such as "IfcWall"')
parser.add_argument(
"-a",
@@ -486,6 +490,7 @@ if __name__ == "__main__":
empty=args.empty,
bool_true=args.bool_true,
bool_false=args.bool_false,
+ concat=args.concat,
sort=sort,
)
elif getattr(args, "import"):
diff --git a/src/ifcfm/ifcfm/__init__.py b/src/ifcfm/ifcfm/__init__.py
index 36f6679145..20210a2d1a 100644
--- a/src/ifcfm/ifcfm/__init__.py
+++ b/src/ifcfm/ifcfm/__init__.py
@@ -125,7 +125,7 @@ class Writer:
else:
self.config = getattr(self.parser.preset, "config")
- def write(self, null="N/A", empty="-", bool_true="YES", bool_false="NO"):
+ def write(self, null="N/A", empty="-", bool_true="YES", bool_false="NO", list_separator=", "):
self.categories = {}
null = self.config.get("null", null)
empty = self.config.get("empty", empty)
@@ -155,6 +155,8 @@ class Writer:
value = bool_true
elif value is False:
value = bool_false
+ elif isinstance(value, (list, tuple)):
+ value = list_separator.join([str(v) for v in value])
processed_row.append(value)
rows.append(processed_row)
@@ -256,11 +258,14 @@ class Writer:
cell_format = "n"
else:
cell_format = colours[c - 1] # Adjusted the indexing
- cell = worksheet.cell(row=r, column=c, value=col)
+ cell = worksheet.cell(row=r, column=c, value=str(col))
cell.fill = cell_formats[cell_format]
c += 1
r += 1
+ if "Sheet" in workbook.sheetnames and len(workbook.sheetnames) > 1:
+ workbook.remove(workbook["Sheet"])
+
workbook.save(output)
def write_pd(self):
diff --git a/src/ifcfm/ifcfm/basic.py b/src/ifcfm/ifcfm/basic.py
index 697f9c2bbe..76e1a8e856 100644
--- a/src/ifcfm/ifcfm/basic.py
+++ b/src/ifcfm/ifcfm/basic.py
@@ -64,9 +64,10 @@ def get_facility_data(ifc_file, element):
"Name": element.Name,
"ProjectName": ifc_file.by_type("IfcProject")[0].Name,
"SiteName": getattr(get_facility_parent(element, "IfcSite"), "Name", None),
- "Category": get_classification(element),
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "ClassificationIdentification": get_classification_identification(element),
+ "ClassificationName": get_classification_name(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelProjectID": ifc_file.by_type("IfcProject")[0].GlobalId,
"ModelSiteID": getattr(get_facility_parent(element, "IfcSite"), "GlobalId", None),
@@ -80,9 +81,10 @@ def get_facility_data(ifc_file, element):
def get_storey_data(ifc_file, element):
return {
"Name": element.Name,
- "Category": "Level",
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "ClassificationIdentification": "Level",
+ "ClassificationName": get_classification_name(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelObject": element.is_a(),
"ModelID": element.GlobalId,
@@ -95,10 +97,11 @@ def get_space_data(ifc_file, element):
return {
"Name": element.Name,
"Description": element.LongName,
- "Category": get_classification(element),
+ "ClassificationIdentification": get_classification_identification(element),
+ "ClassificationName": get_classification_name(element),
"LevelName": getattr(get_facility_parent(element, "IfcBuildingStorey"), "Name", None),
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelID": element.GlobalId,
"AreaGross": get_property(psets, "Qto_SpaceBaseQuantities", "GrossFloorArea", decimals=2),
@@ -111,8 +114,8 @@ def get_zone_data(ifc_file, element):
return {
"Name": zone.Name,
"SpaceName": space.Name,
- "AuthorOrganizationName": get_owner_name(zone),
- "AuthorDate": get_owner_creation_date(zone),
+ "OrganizationName": get_owner_name(zone),
+ "CreationDate": get_owner_creation_date(zone),
"ModelSoftware": get_owner_application(zone),
"ModelID": zone.GlobalId,
}
@@ -123,9 +126,10 @@ def get_element_type_data(ifc_file, element):
return {
"Name": element.Name,
"Description": element.Description,
- "Category": get_classification(element),
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "ClassificationIdentification": get_classification_identification(element),
+ "ClassificationName": get_classification_name(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelObject": "{}[{}]".format(element.is_a(), ifcopenshell.util.element.get_predefined_type(element)),
"ModelID": element.GlobalId,
@@ -149,8 +153,8 @@ def get_element_data(ifc_file, element):
"TypeName": ifcopenshell.util.element.get_type(element).Name,
"SpaceName": space_name,
"SystemName": system,
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelObject": "{}[{}]".format(element.is_a(), ifcopenshell.util.element.get_predefined_type(element)),
"ModelID": element.GlobalId,
@@ -169,9 +173,10 @@ def get_system_data(ifc_file, element):
return {
"Name": element.Name,
"Description": element.Description,
- "Category": get_classification(element),
- "AuthorOrganizationName": get_owner_name(element),
- "AuthorDate": get_owner_creation_date(element),
+ "ClassificationIdentification": get_classification_identification(element),
+ "ClassificationName": get_classification_name(element),
+ "OrganizationName": get_owner_name(element),
+ "CreationDate": get_owner_creation_date(element),
"ModelSoftware": get_owner_application(element),
"ModelID": element.GlobalId,
}
@@ -205,12 +210,18 @@ def get_facility_parent(element, ifc_class):
parent = ifcopenshell.util.element.get_aggregate(parent)
-def get_classification(element):
+def get_classification_identification(element):
references = list(ifcopenshell.util.classification.get_references(element))
if references:
if hasattr(references[0], "Identification"):
- return "{}:{}".format(references[0].Identification, references[0].Name)
- return "{}:{}".format(references[0].ItemReference, references[0].Name)
+ return references[0].Identification
+ return references[0].ItemReference
+
+
+def get_classification_name(element):
+ references = list(ifcopenshell.util.classification.get_references(element))
+ if references:
+ return references[0].Name
def get_property(psets, pset_name, prop_name, decimals=None):
@@ -239,9 +250,10 @@ config = {
"Name",
"ProjectName",
"SiteName",
- "Category",
- "AuthorOrganizationName",
- "AuthorDate",
+ "ClassificationIdentification",
+ "ClassificationName",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelProjectID",
"ModelSiteID",
@@ -259,9 +271,10 @@ config = {
"keys": ["Name"],
"headers": [
"Name",
- "Category",
- "AuthorOrganizationName",
- "AuthorDate",
+ "ClassificationIdentification",
+ "ClassificationName",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelObject",
"ModelID",
@@ -277,10 +290,11 @@ config = {
"headers": [
"Name",
"Description",
- "Category",
+ "ClassificationIdentification",
+ "ClassificationName",
"LevelName",
- "AuthorOrganizationName",
- "AuthorDate",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelID",
"AreaGross",
@@ -293,7 +307,7 @@ config = {
},
"Zones": {
"keys": ["Name", "SpaceName"],
- "headers": ["Name", "SpaceName", "AuthorOrganizationName", "AuthorDate", "ModelSoftware", "ModelID"],
+ "headers": ["Name", "SpaceName", "OrganizationName", "CreationDate", "ModelSoftware", "ModelID"],
"colours": "prreee",
"sort": [{"name": "Name", "order": "ASC"}],
"get_category_elements": get_zones,
@@ -304,9 +318,10 @@ config = {
"headers": [
"Name",
"Description",
- "Category",
- "AuthorOrganizationName",
- "AuthorDate",
+ "ClassificationIdentification",
+ "ClassificationName",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelObject",
"ModelID",
@@ -329,8 +344,8 @@ config = {
"TypeName",
"SpaceName",
"SystemName",
- "AuthorOrganizationName",
- "AuthorDate",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelObject",
"ModelID",
@@ -353,9 +368,10 @@ config = {
"headers": [
"Name",
"Description",
- "Category",
- "AuthorOrganizationName",
- "AuthorDate",
+ "ClassificationIdentification",
+ "ClassificationName",
+ "OrganizationName",
+ "CreationDate",
"ModelSoftware",
"ModelID",
],
diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py
index 29d13cc3c2..7f94ae3187 100644
--- a/src/ifcfm/ifcfm/cobie24.py
+++ b/src/ifcfm/ifcfm/cobie24.py
@@ -66,22 +66,6 @@ def get_zones(ifc_file):
has_space = True
if not has_space:
results.append((zone, None))
- if zones:
- return results
-
- zone_spaces = {}
- for space in ifc_file.by_type("IfcSpace"):
- for _, props in ifcopenshell.util.element.get_psets(space).items():
- for name, value in props.items():
- if "ZoneName" in name:
- zone_name = val(value)
- space_name = val(space.Name)
- category = name
- zone_key = str(name) + "," + str(category)
- zone_spaces.setdefault(zone_key, [])
- if space_name not in zone_spaces[zone_key]:
- zone_spaces[zone_key].append(space_name)
- results.append(((zone_name, category), space_name))
return results
@@ -264,7 +248,7 @@ def get_attributes(ifc_file):
def get_contact_data(ifc_file, element):
- the_actor = element.Theactor
+ the_actor = element.TheActor
if the_actor.is_a("IfcPerson"):
pao = None
@@ -298,20 +282,20 @@ def get_contact_data(ifc_file, element):
"CreatedOn": get_created_on(element),
"Category": ",".join(roles),
"Company": getattr(organization, "Name", None),
- "Phone": get_pao_address(person, organisation, "TelephoneNumbers"),
+ "Phone": get_pao_address(person, organization, "TelephoneNumbers"),
"ExternalSystem": get_external_system(element),
"ExternalObject": element.is_a(),
"ExternalIdentifier": element.GlobalId,
- "Department": get_pao_address(person, organisation, "InternalLocation"),
+ "Department": get_pao_address(person, organization, "InternalLocation"),
"OrganizationCode": getattr(organization, "Id", getattr(organization, "Identification", None)),
"GivenName": getattr(person, "GivenName", None),
"FamilyName": getattr(person, "FamilyName", None),
- "Street": get_pao_address(person, organisation, "AddressLines"),
- "PostalBox": get_pao_address(person, organisation, "PostalBox"),
- "Town": get_pao_address(person, organisation, "Town"),
- "StateRegion": get_pao_address(person, organisation, "Region"),
- "PostalCode": get_pao_address(person, organisation, "PostalCode"),
- "Country": get_pao_address(person, organisation, "Country"),
+ "Street": get_pao_address(person, organization, "AddressLines"),
+ "PostalBox": get_pao_address(person, organization, "PostalBox"),
+ "Town": get_pao_address(person, organization, "Town"),
+ "StateRegion": get_pao_address(person, organization, "Region"),
+ "PostalCode": get_pao_address(person, organization, "PostalCode"),
+ "Country": get_pao_address(person, organization, "Country"),
}
@@ -320,27 +304,21 @@ def get_facility_data(ifc_file, element):
site_name = None
site_description = None
if site:
- site_name = val(site.Name) or val(site.LongName) or site.GlobalId
- site_description = val(site.Description) or val(site.LongName) or val(site.Name)
+ site_name = val(site.Name)
+ site_description = val(site.Description)
project = None
project_name = None
project_description = None
try:
project = ifc_file.by_type("IfcProject")[0]
- project_name = val(project.Name) or val(project.LongName) or project.GlobalId
- project_description = val(project.Description) or val(project.LongName) or val(project.Name)
+ project_name = val(project.Name)
+ project_description = val(project.Description)
except:
pass
- name = val(element.Name) or val(element.LongName)
- if not name:
- name = val(project.Name) or val(project.LongName)
- if not name and site:
- name = val(site.Name) or val(site.LongName)
-
return {
- "Name": name,
+ "Name": val(element.Name),
"CreatedBy": get_created_by(element),
"CreatedOn": get_created_on(element),
"Category": get_category(element),
@@ -353,12 +331,12 @@ def get_facility_data(ifc_file, element):
"AreaMeasurement": get_area_measurement(element),
"ExternalSystem": get_external_system(element),
"ExternalProjectObject": "IfcProject",
- "ExternalProjectIdentifier": project.GlobalId if project else ifcopenshell.guid.new(),
+ "ExternalProjectIdentifier": project.GlobalId if project else None,
"ExternalSiteObject": "IfcSite",
- "ExternalSiteIdentifier": site.GlobalId if site else ifcopenshell.guid.new(),
+ "ExternalSiteIdentifier": site.GlobalId if site else None,
"ExternalFacilityObject": "IfcBuilding",
"ExternalFacilityIdentifier": element.GlobalId,
- "Description": val(element.Description) or val(element.LongName) or val(element.Name),
+ "Description": val(element.Description),
"ProjectDescription": project_description,
"SiteDescription": site_description,
"Phase": val(project.Phase) if project else None,
@@ -366,10 +344,6 @@ def get_facility_data(ifc_file, element):
def get_floor_data(ifc_file, element):
- external_object = element.is_a()
- if element.ObjectType and element.ObjectType.lower() in ("site", "ifcsite"):
- external_object = "IfcSite"
-
height_names = {
"Height",
"NetHeight",
@@ -400,9 +374,9 @@ def get_floor_data(ifc_file, element):
"CreatedOn": get_created_on(element),
"Category": get_category(element),
"ExternalSystem": get_external_system(element),
- "ExternalObject": external_object,
+ "ExternalObject": element.is_a(),
"ExternalIdentifier": element.GlobalId,
- "Description": val(element.Description) or val(element.LongName) or val(element.Name),
+ "Description": val(element.Description),
"Elevation": val(elevation),
"Height": height,
}
@@ -439,10 +413,11 @@ def get_space_data(ifc_file, element):
"CreatedOn": get_created_on(element),
"Category": get_category(element),
"FloorName": floor_name,
- "Description": val(element.Description) or val(element.LongName) or val(element.Name),
+ "Description": val(element.Description),
"ExternalSystem": get_external_system(element),
"ExternalObject": element.is_a(),
"ExternalIdentifier": element.GlobalId,
+ # Stopped here
"RoomTag": room_tag,
"UsableHeight": usable_height,
"GrossArea": gross_area,
@@ -453,21 +428,6 @@ def get_space_data(ifc_file, element):
def get_zone_data(ifc_file, element):
zone, space = element
- if isinstance(zone, tuple):
- name, category = zone
- history = get_history(ifc_file)
- return {
- "Name": name,
- "CreatedBy": get_email_from_history(history) if history else None,
- "CreatedOn": ifcopenshell.util.date.ifc2datetime(history.CreationDate).isoformat() if history else None,
- "Category": category,
- "SpaceNames": space,
- "ExternalSystem": history.OwningApplication.ApplicationFullName if history else None,
- "ExternalObject": "IfcPropertySingleValue",
- "ExternalIdentifier": None,
- "Description": val(name) or val(category),
- }
-
name = zone.Name
parent = ifcopenshell.util.element.get_aggregate(zone)
if parent and val(parent.Name):
@@ -490,136 +450,108 @@ def get_zone_data(ifc_file, element):
def get_type_data(ifc_file, element):
- pset_metadata = {}
- pset_mapping = {
- "manufacturer": {"Manufacturer"},
- "model_number": {"ModelNumber", "ArticleNumber", "ModelReference"},
- "warranty_guarantor_parts": {"WarrantyGuarantorParts", "PointOfContact"},
- "warranty_guarantor_labor": {"WarrantyGuarantorLabor", "PointOfContact"},
- "warranty_description": {"WarrantyDescription", "WarrantyIdentifier"},
- "replacement_cost": {"ReplacementCost", "Replacement Cost", "Replacement", "Cost"},
- "nominal_length": {"NominalLength", "OverallLength", "Length"},
- "nominal_width": {"NominalWidth", "OverallWidth", "Width"},
- # https://github.com/opensourceBIM/COBie-plugins/blob/master/COBiePlugins/lib/IfcToCobieConfig.xml#L104
- "nominal_height": {"NominalHeight", "Height"}, # Original has a typo "Heght"
- "model_reference": {"ModelLabel"}, # I believe this is what the intention was, not "ModelReference".
- "shape": {"Shape"},
- "size": {"Size"},
- "color": {"Color", "Colour"},
- "finish": {"Finish"},
- "grade": {"Grade"},
- "material": {"Material"},
- "constituents": {"Constituents", "Parts"},
- "features": {"Features"},
- "accessibility_performance": {"AccessibilityPerformance", "Access"},
- "code_performance": {"CodePerformance", "Regulation"},
- "sustainability_performance": {"SustainabilityPerformance", "Environmental"},
- }
asset_type = None
- asset_type_names = {"AssetType", "AssetAccountingType"}
+ manufacturer = None
+ model_number = None
+ warranty_guarantor_parts = None
+ warranty_guarantor_labor = None
warranty_duration_parts = None
- warranty_duration_parts_names = {"WarrantyDurationParts", "WarrantyPeriod"}
warranty_duration_labor = None
- warranty_duration_labor_names = {"WarrantyDurationLabor", "WarrantyPeriod"}
warranty_duration_unit = None
+ replacement_cost = None
expected_life = None
- expected_life_names = {"ExpectedLife", "Expected Life", "ServiceLifeDuration", "Expected"}
duration_unit = None
+ warranty_description = None
+ nominal_length = None
+ nominal_width = None
+ nominal_height = None
+ model_reference = None
+ shape = None
+ size = None
+ color = None
+ finish = None
+ grade = None
+ material = None
+ constituents = None
+ features = None
+ accessibility_performance = None
+ code_performance = None
+ sustainability_performance = None
for pset_name, props in ifcopenshell.util.element.get_psets(element).items():
pset_warranty_type = None
- if pset_name == "Pset_Warranty":
- if "parts" in (props.get("WarrantyIdentifier", "") or "").lower():
- pset_warranty_type = "parts"
- elif "labor" in (props.get("WarrantyIdentifier", "") or "").lower():
- pset_warranty_type = "labor"
-
- pset = ifc_file.by_id(props["id"])
-
- for name, value in props.items():
- for key, prop_names in pset_mapping.items():
- if not pset_metadata.get(key, None) and name in prop_names and val(value):
- pset_metadata[key] = str(value)
-
- if not asset_type and name in asset_type_names and val(value):
- value = value.strip().lower()
- if value in ("moveable", "nonfixed"):
- asset_type = "Moveable"
- elif value == "fixed":
- asset_type = "Fixed"
- if not warranty_duration_parts and name in warranty_duration_parts_names and val(value):
- warranty_duration_parts = str(value)
- if not warranty_duration_unit:
- warranty_duration_unit = get_property_unit(pset, name)
- if not warranty_duration_labor and name in warranty_duration_labor_names and val(value):
- warranty_duration_labor = str(value)
- if not warranty_duration_unit:
- warranty_duration_unit = get_property_unit(pset, name)
- if not expected_life and name in expected_life_names and val(value):
- expected_life = str(value)
- if not duration_unit:
- duration_unit = get_property_unit(pset, name)
-
- if pset_warranty_type == "parts" and val(value):
- if name == "PointOfContact":
- # https://github.com/buildingSMART/IFC4.3.x-development/issues/698
- warranty_guarantor_parts = str(value)
- elif name == "WarrantyPeriod":
- warranty_duration_parts = str(value)
- unit = get_property_unit(pset, name)
- warranty_duration_unit = unit or warranty_duration_unit
- elif pset_warranty_type == "labor" and val(value):
- if name == "PointOfContact":
- # https://github.com/buildingSMART/IFC4.3.x-development/issues/698
- warranty_guarantor_labor = str(value)
- elif name == "WarrantyPeriod":
- warranty_duration_labor = str(value)
- unit = get_property_unit(pset, name)
- warranty_duration_unit = unit or warranty_duration_unit
-
- if warranty_duration_parts or warranty_duration_labor:
- if not warranty_duration_unit:
- warranty_duration_unit = get_unit_type_name(ifc_file, "TIMEUNIT")
-
- if not asset_type and element.is_a("IfcFurnitureType"):
- asset_type = "Moveable"
+ if pset_name == "COBie_Warranty":
+ warranty_guarantor_parts = props.get("WarrantyGuarantorParts", None)
+ warranty_guarantor_labor = props.get("WarrantyGuarantorLabor", None)
+ warranty_duration_parts = props.get("WarrantyDurationParts", None)
+ warranty_duration_labor = props.get("WarrantyDurationLabor", None)
+ warranty_duration_unit = props.get("WarrantyDurationUnit", None)
+ warranty_description = props.get("WarrantyDescription", None)
+ elif pset_name == "COBie_Asset":
+ asset_type = props.get("AssetType", None)
+ elif pset_name == "COBie_EconomicImpactValues":
+ replacement_cost = props.get("ReplacementCost", None)
+ elif pset_name == "COBie_ServiceLife":
+ duration_unit = props.get("DurationUnit", None)
+ duration_unit = props.get("ServiceLifeDuration", props.get("ExpectedLife", None))
+ elif pset_name == "COBie_Specification":
+ nominal_length = props.get("NominalLength", None)
+ nominal_width = props.get("NominalWidth", None)
+ nominal_height = props.get("NominalHeight", None)
+ shape = props.get("Shape", None)
+ size = props.get("Size", None)
+ color = props.get("Color", None)
+ finish = props.get("Finish", None)
+ grade = props.get("Grade", None)
+ material = props.get("Material", None)
+ constituents = props.get("Constituents", None)
+ features = props.get("Features", None)
+ accessibility_performance = props.get("AccessibilityPerformance", None)
+ code_performance = props.get("CodePerformance", None)
+ sustainability_performance = props.get("SustainabilityPerformance", None)
+ elif pset_name == "Pset_ServiceLife":
+ duration_unit = props.get("ServiceLifeDuration", None)
+ elif pset_name == "Pset_ManufacturerTypeInformation":
+ manufacturer = props.get("Manufacturer", None)
+ model_number = props.get("ModelLabel", None)
+ model_reference = props.get("ModelReference", None)
return {
"Name": val(element.Name),
"CreatedBy": get_created_by(element),
"CreatedOn": get_created_on(element),
"Category": get_category(element),
- "Description": val(element.Description) or val(element.Name),
+ "Description": val(element.Description),
"AssetType": asset_type,
- "Manufacturer": pset_metadata.get("manufacturer", None),
- "ModelNumber": pset_metadata.get("model_number", None),
- "WarrantyGuarantorParts": pset_metadata.get("warranty_guarantor_parts", None),
+ "Manufacturer": manufacturer,
+ "ModelNumber": model_number,
+ "WarrantyGuarantorParts": warranty_guarantor_parts,
"WarrantyDurationParts": warranty_duration_parts,
- "WarrantyGuarantorLabor": pset_metadata.get("warranty_guarantor_labor", None),
+ "WarrantyGuarantorLabor": warranty_guarantor_labor,
"WarrantyDurationLabor": warranty_duration_labor,
"WarrantyDurationUnit": warranty_duration_unit,
"ExternalSystem": get_external_system(element),
"ExternalObject": element.is_a(),
"ExternalIdentifier": element.GlobalId,
- "ReplacementCost": pset_metadata.get("replacement_cost", None),
+ "ReplacementCost": replacement_cost,
"ExpectedLife": expected_life,
"DurationUnit": duration_unit,
- "WarrantyDescription": pset_metadata.get("warranty_description", None),
- "NominalLength": pset_metadata.get("nominal_length", None),
- "NominalWidth": pset_metadata.get("nominal_width", None),
- "NominalHeight": pset_metadata.get("nominal_height", None),
- "ModelReference": pset_metadata.get("model_reference", None),
- "Shape": pset_metadata.get("shape", None),
- "Size": pset_metadata.get("size", None),
- "Color": pset_metadata.get("color", None),
- "Finish": pset_metadata.get("finish", None),
- "Grade": pset_metadata.get("grade", None),
- "Material": pset_metadata.get("material", None),
- "Constituents": pset_metadata.get("constituents", None),
- "Features": pset_metadata.get("features", None),
- "AccessibilityPerformance": pset_metadata.get("accessibility_performance", None),
- "CodePerformance": pset_metadata.get("code_performance", None),
- "SustainabilityPerformance": pset_metadata.get("sustainability_performance", None),
+ "WarrantyDescription": warranty_description,
+ "NominalLength": nominal_length,
+ "NominalWidth": nominal_width,
+ "NominalHeight": nominal_height,
+ "ModelReference": model_reference,
+ "Shape": shape,
+ "Size": size,
+ "Color": color,
+ "Finish": finish,
+ "Grade": grade,
+ "Material": material,
+ "Constituents": constituents,
+ "Features": features,
+ "AccessibilityPerformance": accessibility_performance,
+ "CodePerformance": code_performance,
+ "SustainabilityPerformance": sustainability_performance,
}
@@ -976,6 +908,7 @@ def get_owner_name(element):
def get_created_on(element):
if getattr(element, "OwnerHistory", None):
return ifcopenshell.util.date.ifc2datetime(element.OwnerHistory.CreationDate).isoformat()
+ return "1900-12-31T23:59:59" # Yes, really
def get_external_system(element):
@@ -1009,13 +942,20 @@ def get_area_measurement(element):
if result:
return result
+ psets = ifcopenshell.util.element.get_psets(element)
+ if psets:
+ for _, props in psets.items():
+ for name, value in props.items():
+ if name == "MethodOfMeasurement":
+ return value
+
def get_category(element):
references = list(ifcopenshell.util.classification.get_references(element))
results = []
for reference in references:
if reference.is_a("IfcClassification"):
- results.append(reference.Name)
+ continue
elif reference.is_a("IfcClassificationReference"):
identification = val(getattr(reference, "Identification", getattr(reference, "ItemReference", None)))
if val(reference.Name) and identification and val(reference.Name) != identification:
@@ -1024,40 +964,9 @@ def get_category(element):
results.append(reference.Name)
elif identification:
results.append(identification)
- elif reference.ReferencedSource and val(reference.ReferencedSource.Name):
- results.append(reference.ReferencedSource.Name)
- elif val(reference.Location):
- results.append(reference.Location)
if results:
return ",".join(results)
- category_props = [
- ("Assembly Code", "Assembly Description"),
- ("Category Code", "Category Description"),
- ("Classification Code", "Classification Description"),
- ("OmniClass Number", "OmniClass Title"),
- ("Uniclass Code", "Uniclass Description"),
- ]
-
- psets = ifcopenshell.util.element.get_psets(element)
- properties = {}
- if psets:
- for _, props in psets.items():
- properties.update(props)
-
- for code, description in category_props:
- code = val(properties.get(code, None))
- if code:
- description = val(properties.get(description, None))
- if code and description:
- results.append(code + " : " + description)
- else:
- results.append(code)
- if results:
- return ",".join(results)
-
- return val(getattr(element, "ObjectType", None))
-
def get_pao_address(person, organization, name):
for actor in [organization, person]:
diff --git a/src/ifcfm/ifcfm/cobie24legacy.py b/src/ifcfm/ifcfm/cobie24legacy.py
index 0de1a783ad..8b50dfa8a4 100644
--- a/src/ifcfm/ifcfm/cobie24legacy.py
+++ b/src/ifcfm/ifcfm/cobie24legacy.py
@@ -496,7 +496,7 @@ def get_type_data(ifc_file, element):
pset_metadata = {}
pset_mapping = {
"manufacturer": {"Manufacturer"},
- "model_number": {"ModelNumber", "ArticleNumber", "ModelReference"},
+ "model_number": {"ModelNumber", "ArticleNumber", "ModelLabel"},
"warranty_guarantor_parts": {"WarrantyGuarantorParts", "PointOfContact"},
"warranty_guarantor_labor": {"WarrantyGuarantorLabor", "PointOfContact"},
"warranty_description": {"WarrantyDescription", "WarrantyIdentifier"},
@@ -505,7 +505,7 @@ def get_type_data(ifc_file, element):
"nominal_width": {"NominalWidth", "OverallWidth", "Width"},
# https://github.com/opensourceBIM/COBie-plugins/blob/master/COBiePlugins/lib/IfcToCobieConfig.xml#L104
"nominal_height": {"NominalHeight", "Height"}, # Original has a typo "Heght"
- "model_reference": {"ModelLabel"}, # I believe this is what the intention was, not "ModelReference".
+ "model_reference": {"ModelReference"},
"shape": {"Shape"},
"size": {"Size"},
"color": {"Color", "Colour"},
@@ -993,6 +993,7 @@ def get_owner_name(element):
def get_created_on(element):
if getattr(element, "OwnerHistory", None):
return ifcopenshell.util.date.ifc2datetime(element.OwnerHistory.CreationDate).isoformat()
+ return "1900-12-31T23:59:59" # Yes, really
def get_external_system(element):
diff --git a/src/ifcgeom/IfcGeom.cpp b/src/ifcgeom/IfcGeom.cpp
index e743461445..72ebf0376e 100644
--- a/src/ifcgeom/IfcGeom.cpp
+++ b/src/ifcgeom/IfcGeom.cpp
@@ -249,65 +249,64 @@ bool IfcGeom::Kernel::convert_openings(const IfcSchema::IfcProduct* entity, cons
for (IfcSchema::IfcRelVoidsElement::list::it it = openings->begin(); it != openings->end(); ++it) {
IfcSchema::IfcRelVoidsElement* v = *it;
IfcSchema::IfcFeatureElementSubtraction* fes = v->RelatedOpeningElement();
- if (fes->declaration().is(IfcSchema::IfcOpeningElement::Class())) {
- if (!fes->Representation()) continue;
+ if (!fes->Representation()) {
+ continue;
+ }
- /*
- // Not yet implemented and tested, process opening placement up to parent wall
- // placement so that the matrix inverse can be eliminated.
- // @todo property check and handle the decomposition into parts (where element
- // carying geom and opening are in different branches).
- // @todo properly check whether opening correctly references wall placement
- // and fallback to matrix inverse when not the case.
- auto relative = entity;
- {
- auto ds = relative->Decomposes();
- if (ds->size() == 1) {
- relative = (*ds->begin())->RelatingObject()->as();
- }
+ /*
+ // Not yet implemented and tested, process opening placement up to parent wall
+ // placement so that the matrix inverse can be eliminated.
+ // @todo property check and handle the decomposition into parts (where element
+ // carying geom and opening are in different branches).
+ // @todo properly check whether opening correctly references wall placement
+ // and fallback to matrix inverse when not the case.
+ auto relative = entity;
+ {
+ auto ds = relative->Decomposes();
+ if (ds->size() == 1) {
+ relative = (*ds->begin())->RelatingObject()->as();
}
- set_conversion_placement_rel_to_instance(relative);
- */
+ }
+ set_conversion_placement_rel_to_instance(relative);
+ */
- // Convert the IfcRepresentation of the IfcOpeningElement
- gp_Trsf opening_trsf;
- if (fes->ObjectPlacement()) {
- try {
- convert(fes->ObjectPlacement(), opening_trsf);
- } catch (const std::exception& e) {
- Logger::Error(e);
- } catch (...) {
- Logger::Error("Failed to construct placement");
- }
+ // Convert the IfcRepresentation of the IfcOpeningElement
+ gp_Trsf opening_trsf;
+ if (fes->ObjectPlacement()) {
+ try {
+ convert(fes->ObjectPlacement(), opening_trsf);
+ } catch (const std::exception& e) {
+ Logger::Error(e);
+ } catch (...) {
+ Logger::Error("Failed to construct placement");
}
+ }
- // set_conversion_placement_rel_to_instance(nullptr);
+ // set_conversion_placement_rel_to_instance(nullptr);
- // Move the opening into the coordinate system of the IfcProduct
- opening_trsf.PreMultiply(entity_trsf.Inverted());
+ // Move the opening into the coordinate system of the IfcProduct
+ opening_trsf.PreMultiply(entity_trsf.Inverted());
- IfcSchema::IfcProductRepresentation* prodrep = fes->Representation();
- IfcSchema::IfcRepresentation::list::ptr reps = prodrep->Representations();
+ IfcSchema::IfcProductRepresentation* prodrep = fes->Representation();
+ IfcSchema::IfcRepresentation::list::ptr reps = prodrep->Representations();
- IfcGeom::IfcRepresentationShapeItems opening_shapes;
+ IfcGeom::IfcRepresentationShapeItems opening_shapes;
- for (IfcSchema::IfcRepresentation::list::it it2 = reps->begin(); it2 != reps->end(); ++it2) {
- if (IfcParse::traverse((*it2))->as()->size()) {
- continue;
- }
- convert_shapes(*it2, opening_shapes);
+ for (IfcSchema::IfcRepresentation::list::it it2 = reps->begin(); it2 != reps->end(); ++it2) {
+ if (IfcParse::traverse((*it2))->as()->size()) {
+ continue;
}
+ convert_shapes(*it2, opening_shapes);
+ }
- for (unsigned int i = 0; i < opening_shapes.size(); ++i) {
- TopoDS_Shape opening_shape_solid;
- const TopoDS_Shape& opening_shape_unlocated = util::ensure_fit_for_subtraction(opening_shapes[i].Shape(), opening_shape_solid, getValue(GV_PRECISION));
-
- gp_GTrsf gtrsf = opening_shapes[i].Placement();
- gtrsf.PreMultiply(opening_trsf);
- TopoDS_Shape opening_shape = util::apply_transformation(opening_shape_unlocated, gtrsf);
- opening_vector.push_back(std::make_pair(util::min_edge_length(opening_shape), opening_shape));
- }
+ for (unsigned int i = 0; i < opening_shapes.size(); ++i) {
+ TopoDS_Shape opening_shape_solid;
+ const TopoDS_Shape& opening_shape_unlocated = util::ensure_fit_for_subtraction(opening_shapes[i].Shape(), opening_shape_solid, getValue(GV_PRECISION));
+ gp_GTrsf gtrsf = opening_shapes[i].Placement();
+ gtrsf.PreMultiply(opening_trsf);
+ TopoDS_Shape opening_shape = util::apply_transformation(opening_shape_unlocated, gtrsf);
+ opening_vector.push_back(std::make_pair(util::min_edge_length(opening_shape), opening_shape));
}
}
@@ -515,7 +514,7 @@ double IfcGeom::Kernel::getValue(GeomValue var) const {
IfcSchema::IfcRelVoidsElement::list::ptr IfcGeom::Kernel::find_openings(IfcSchema::IfcProduct* product) {
std::vector rs;
- if ( product->declaration().is(IfcSchema::IfcElement::Class()) && !product->declaration().is(IfcSchema::IfcOpeningElement::Class()) ) {
+ if ( product->declaration().is(IfcSchema::IfcElement::Class()) && !product->declaration().is(IfcSchema::IfcFeatureElementSubtraction::Class()) ) {
IfcSchema::IfcElement* element = (IfcSchema::IfcElement*)product;
auto rels = element->HasOpenings();
rs.insert(rs.end(), rels->begin(), rels->end());
@@ -527,7 +526,7 @@ IfcSchema::IfcRelVoidsElement::list::ptr IfcGeom::Kernel::find_openings(IfcSchem
auto decomposes = obdef->Decomposes();
if (decomposes->size() != 1) break;
IfcSchema::IfcObjectDefinition* rel_obdef = (*decomposes->begin())->RelatingObject();
- if ( rel_obdef->declaration().is(IfcSchema::IfcElement::Class()) && !rel_obdef->declaration().is(IfcSchema::IfcOpeningElement::Class()) ) {
+ if ( rel_obdef->declaration().is(IfcSchema::IfcElement::Class()) && !rel_obdef->declaration().is(IfcSchema::IfcFeatureElementSubtraction::Class()) ) {
IfcSchema::IfcElement* element = (IfcSchema::IfcElement*)rel_obdef;
auto rels = element->HasOpenings();
rs.insert(rs.end(), rels->begin(), rels->end());
diff --git a/src/ifcgeom_schema_agnostic/GeometrySerializer.h b/src/ifcgeom_schema_agnostic/GeometrySerializer.h
index 58fb7c4d64..63b1507d97 100644
--- a/src/ifcgeom_schema_agnostic/GeometrySerializer.h
+++ b/src/ifcgeom_schema_agnostic/GeometrySerializer.h
@@ -49,8 +49,11 @@ public:
/// Use Y UP .
/// Applicable for OBJ output.
USE_Y_UP = 1ULL << (IfcGeom::IteratorSettings::NUM_SETTINGS + 7ULL),
+ /// Write in ECEF coordinates.
+ /// Applicable to glTF output
+ WRITE_GLTF_ECEF = 1ULL << (IfcGeom::IteratorSettings::NUM_SETTINGS + 8ULL),
/// Number of different setting flags.
- NUM_SETTINGS = 7
+ NUM_SETTINGS = 8
};
SerializerSettings()
diff --git a/src/ifcgeom_schema_agnostic/Kernel.cpp b/src/ifcgeom_schema_agnostic/Kernel.cpp
index de13df00cd..f93a6bf240 100644
--- a/src/ifcgeom_schema_agnostic/Kernel.cpp
+++ b/src/ifcgeom_schema_agnostic/Kernel.cpp
@@ -185,6 +185,11 @@ namespace {
GET_RELATINGOBJECT_IFC4_VARIANT(Ifc4x3_add1);
CREATE_GET_DECOMPOSING_ENTITY(Ifc4x3_add1);
#endif
+
+#ifdef HAS_SCHEMA_4x3_add2
+ GET_RELATINGOBJECT_IFC4_VARIANT(Ifc4x3_add2);
+ CREATE_GET_DECOMPOSING_ENTITY(Ifc4x3_add2);
+#endif
}
// Declares the schema-based IfcProduct check:
diff --git a/src/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile
index 05442dacbb..bce66f7f34 100644
--- a/src/ifcopenshell-python/Makefile
+++ b/src/ifcopenshell-python/Makefile
@@ -68,6 +68,12 @@ endif
test:
pytest -p no:pytest-blender test
+# safe version of tests without mathutils dependency
+# for tests to work for github workflow with python <3.10 #3895
+.PHONY: test-safe
+test-safe:
+ pytest -p no:pytest-blender test --ignore=test/util/test_shape_builder.py
+
.PHONY: build-ids-docs
build-ids-docs:
mkdir -p test/build
@@ -103,7 +109,7 @@ endif
mkdir -p dist/ifcopenshell
cp -r ifcopenshell/* dist/ifcopenshell/
- cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-9cc1f5f-$(PLATFORM)64.zip
+ cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-6c9e130-$(PLATFORM)64.zip
cd dist/working && unzip ifcopenshell-python*
cp -r dist/working/ifcopenshell/ifcopenshell_wrapper.py dist/ifcopenshell/
ifeq ($(PLATFORM), win)
diff --git a/src/ifcopenshell-python/docs/ifcconvert/installation.rst b/src/ifcopenshell-python/docs/ifcconvert/installation.rst
index da8fecf14d..a0863ce5f4 100644
--- a/src/ifcopenshell-python/docs/ifcconvert/installation.rst
+++ b/src/ifcopenshell-python/docs/ifcconvert/installation.rst
@@ -20,11 +20,11 @@ Pre-built packages
| build-linux64_ | build-win32_ | build-win64_ | build-macos64_ | build-macosm164_ |
+----------------+----------------+----------------+----------------+------------------+
-.. _build-linux64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-9cc1f5f-linux64.zip
-.. _build-win32: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-9cc1f5f-win32.zip
-.. _build-win64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-9cc1f5f-win64.zip
-.. _build-macos64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-9cc1f5f-macos64.zip
-.. _build-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-9cc1f5f-macosm164.zip
+.. _build-linux64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-6c9e130-linux64.zip
+.. _build-win32: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-6c9e130-win32.zip
+.. _build-win64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-6c9e130-win64.zip
+.. _build-macos64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-6c9e130-macos64.zip
+.. _build-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-6c9e130-macosm164.zip
2. Unzip the downloaded file and run IfcConvert using the command line.
diff --git a/src/ifcopenshell-python/docs/ifccsv.rst b/src/ifcopenshell-python/docs/ifccsv.rst
index 154a0fcae5..adb358db20 100644
--- a/src/ifcopenshell-python/docs/ifccsv.rst
+++ b/src/ifcopenshell-python/docs/ifccsv.rst
@@ -66,8 +66,8 @@ utility:
::
$ python -m ifccsv -h
- usage: ifccsv.py [-h] -i IFC [-s SPREADSHEET] [-f FORMAT] [-d DELIMITER] [-n NULL] [-e EMPTY] [--bool_true BOOL_TRUE] [--bool_false BOOL_FALSE] [-q QUERY] [-a ATTRIBUTES [ATTRIBUTES ...]] [--headers HEADERS [HEADERS ...]]
- [--sort SORT [SORT ...]] [--order ORDER [ORDER ...]] [--export] [--import]
+ usage: ifccsv.py [-h] -i IFC [-s SPREADSHEET] [-f FORMAT] [-d DELIMITER] [-n NULL] [-e EMPTY] [--bool_true BOOL_TRUE] [--bool_false BOOL_FALSE] [--concat CONCAT] [-q QUERY] [-a ATTRIBUTES [ATTRIBUTES ...]]
+ [--headers HEADERS [HEADERS ...]] [--sort SORT [SORT ...]] [--order ORDER [ORDER ...]] [--export] [--import]
Exports IFC data to and from CSV
@@ -87,6 +87,7 @@ utility:
How to represent true values. Defaults to YES.
--bool_false BOOL_FALSE
How to represent false values. Defaults to NO.
+ --concat CONCAT How to concatenate lists. Defaults to ', '.
-q QUERY, --query QUERY
Specify a IFC query selector, such as "IfcWall"
-a ATTRIBUTES [ATTRIBUTES ...], --attributes ATTRIBUTES [ATTRIBUTES ...]
diff --git a/src/ifcopenshell-python/docs/ifcfm.rst b/src/ifcopenshell-python/docs/ifcfm.rst
index 2decea229a..f096ed69e9 100644
--- a/src/ifcopenshell-python/docs/ifcfm.rst
+++ b/src/ifcopenshell-python/docs/ifcfm.rst
@@ -44,6 +44,11 @@ with this data structure that IfcFM supports:
finishes. It is published by the U.S. Army Corps of Engineers, National
Building Information Model (NBIMS-US) standard, version 2, chapter 2.4, and
in British Standard BS 1192-4:2014.
+- **COBie 2.4 Legacy**: During the original development of **COBie 2.4**, a
+ mapping to IFC was developed as part of the now unmaintained `COBie-plugins
+ `__ and loosely defined in
+ Annex A with a number of ambiguities and oddities to accommodate the poor
+ state of BIM vendors at the time. This preserves the original implementation.
- **COBie 3.0**: an update to **COBie 2.4** published by the National Building
Information Model (NBIMS-US) standard. Unlike **COBie 2.4**, it is not a
British Standard nor developed by the U.S. Army Corps of Engineers.
diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst
index 6de1a70c48..8fd8579c69 100644
--- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst
+++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst
@@ -63,12 +63,16 @@ related information in ``shape.geometry``:
location = matrix[:,3][0:3]
# X Y Z of vertices in flattened list e.g. [v1x, v1y, v1z, v2x, v2y, v2z, ...]
+ # These vertices are local relative to the shape's transformation matrix.
verts = shape.geometry.verts
# Indices of vertices per edge e.g. [e1v1, e1v2, e2v1, e2v2, ...]
+ # If the geometry is mesh-like, edges contain the original edges.
+ # These may be quads or ngons and not necessarily triangles.
edges = shape.geometry.edges
# Indices of vertices per triangle face e.g. [f1v1, f1v2, f1v3, f2v1, f2v2, f2v3, ...]
+ # Note that faces are always triangles.
faces = shape.geometry.faces
# Since the lists are flattened, you may prefer to group them like so depending on your geometry kernel
@@ -102,6 +106,9 @@ related information in ``shape.geometry``:
# Indices of material applied per triangle face e.g. [f1m, f2m, ...]
material_ids = shape.geometry.material_ids
+ # IDs representation item per triangle face e.g. [f1i, f2i, ...]
+ item_ids = shape.geometry.item_ids
+
Alternatively, you may choose to retrieve an OpenCASCADE BRep:
.. code-block:: python
diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_tree.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_tree.rst
index 93561d073f..485113d735 100644
--- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_tree.rst
+++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_tree.rst
@@ -5,6 +5,8 @@ IfcOpenShell includes a utility to build a unbalanced binary tree of geometry
and their bounding boxes. After a tree is built, you can efficiently select
geometry by specifying a point, radius, or bounding box.
+.. image:: images/geometry-tree.png
+
The most efficient way to build tree is by using the iterator, as shown in the
example below:
diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/images/geometry-tree.png b/src/ifcopenshell-python/docs/ifcopenshell-python/images/geometry-tree.png
new file mode 100644
index 0000000000..a61c3c171f
Binary files /dev/null and b/src/ifcopenshell-python/docs/ifcopenshell-python/images/geometry-tree.png differ
diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
index 8dc7811f1d..d2bdcfc913 100644
--- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
+++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
@@ -20,7 +20,9 @@ Pre-built packages
------------------
Pre-built packages are prepared sporadically depending on whether there are
-changes in the IfcOpenShell C++ core.
+changes in the IfcOpenShell C++ core. This will give you the latest available
+C++ bindings, but may potentially contain outdated pure Python modules, such as
+the API.
1. Choose which version to download based on your operating system, Python
version, and computer architecture.
@@ -41,34 +43,34 @@ changes in the IfcOpenShell C++ core.
| Python 3.11 | py311-linux64_ | py311-win32_ | py311-win64_ | N/A | py311-macosm164_ |
+-------------+----------------+----------------+----------------+----------------+------------------+
-.. _py36-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-9cc1f5f-linux64.zip
-.. _py37-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-9cc1f5f-linux64.zip
-.. _py38-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-9cc1f5f-linux64.zip
-.. _py39-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-9cc1f5f-linux64.zip
-.. _py310-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-9cc1f5f-linux64.zip
-.. _py311-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-9cc1f5f-linux64.zip
-.. _py36-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-9cc1f5f-win32.zip
-.. _py37-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-9cc1f5f-win32.zip
-.. _py38-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-9cc1f5f-win32.zip
-.. _py39-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-9cc1f5f-win32.zip
-.. _py310-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-9cc1f5f-win32.zip
-.. _py311-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-9cc1f5f-win32.zip
-.. _py36-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-9cc1f5f-win64.zip
-.. _py37-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-9cc1f5f-win64.zip
-.. _py38-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-9cc1f5f-win64.zip
-.. _py39-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-9cc1f5f-win64.zip
-.. _py310-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-9cc1f5f-win64.zip
-.. _py311-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-9cc1f5f-win64.zip
-.. _py36-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-9cc1f5f-macos64.zip
-.. _py37-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-9cc1f5f-macos64.zip
-.. _py38-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-9cc1f5f-macos64.zip
-.. _py39-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-9cc1f5f-macos64.zip
-.. _py310-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-9cc1f5f-macos64.zip
-.. _py37-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-9cc1f5f-macosm164.zip
-.. _py38-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-9cc1f5f-macosm164.zip
-.. _py39-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-9cc1f5f-macosm164.zip
-.. _py310-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-9cc1f5f-macosm164.zip
-.. _py311-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-9cc1f5f-macosm164.zip
+.. _py36-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-6c9e130-linux64.zip
+.. _py37-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-6c9e130-linux64.zip
+.. _py38-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-6c9e130-linux64.zip
+.. _py39-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-6c9e130-linux64.zip
+.. _py310-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-6c9e130-linux64.zip
+.. _py311-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-6c9e130-linux64.zip
+.. _py36-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-6c9e130-win32.zip
+.. _py37-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-6c9e130-win32.zip
+.. _py38-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-6c9e130-win32.zip
+.. _py39-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-6c9e130-win32.zip
+.. _py310-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-6c9e130-win32.zip
+.. _py311-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-6c9e130-win32.zip
+.. _py36-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-6c9e130-win64.zip
+.. _py37-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-6c9e130-win64.zip
+.. _py38-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-6c9e130-win64.zip
+.. _py39-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-6c9e130-win64.zip
+.. _py310-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-6c9e130-win64.zip
+.. _py311-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-6c9e130-win64.zip
+.. _py36-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-6c9e130-macos64.zip
+.. _py37-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-6c9e130-macos64.zip
+.. _py38-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-6c9e130-macos64.zip
+.. _py39-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-6c9e130-macos64.zip
+.. _py310-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-6c9e130-macos64.zip
+.. _py37-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-6c9e130-macosm164.zip
+.. _py38-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-6c9e130-macosm164.zip
+.. _py39-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-6c9e130-macosm164.zip
+.. _py310-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-6c9e130-macosm164.zip
+.. _py311-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-6c9e130-macosm164.zip
2. Unzip the downloaded file and copy the ``ifcopenshell`` directory into your
Python path. If you're not sure where your Python path is, run the following
@@ -94,9 +96,10 @@ changes in the IfcOpenShell C++ core.
PyPI
----
-PyPI releases are automatically performed once a month.
+PyPI releases are automatically performed once a month and contain the latest
+Python code that point in time.
-Releases on PyPI may potentially ship slightly outdated precompiled binaires of
+Releases on PyPI may potentially ship slightly outdated precompiled binaries of
the C++ core. This is because the binaries typically go through a period of
manual testing prior in case of high-risk changes.
@@ -277,3 +280,12 @@ Compiling from source
Advanced developers may want to compile IfcOpenShell. Refer to the
:doc:`IfcOpenShell installation guide <../ifcopenshell/installation>` for
instructions.
+
+Legacy versions
+---------------
+
+It is not recommended to use older versions of IfcOpenShell, but for historic
+reasons you may find them here:
+
+- `Builds for IfcOpenShell v0.6.0 `_
+- `Builds for IfcOpenShell v0.5.0 `_
diff --git a/src/ifcopenshell-python/docs/ifcsverchok/installation.rst b/src/ifcopenshell-python/docs/ifcsverchok/installation.rst
index c1db44bdf3..775ab2bcb0 100644
--- a/src/ifcopenshell-python/docs/ifcsverchok/installation.rst
+++ b/src/ifcopenshell-python/docs/ifcsverchok/installation.rst
@@ -11,15 +11,15 @@ Packaged installation
---------------------
IfcSverchok is packaged like a regular Blender add-on, so installation is the
-same as any other Blender add-on. You can download the package for installation
-at the `Get BlenderBIM `__ website.
+same as any other Blender add-on. `Download IfcSverchok here
+`__.
Like all Blender add-ons, they can be installed using ``Edit > Preferences >
Addons > Install > Choose Downloaded ZIP > Enable Add-on Checkbox``. You can
enable add-ons permanently by using ``Save User Settings`` from the Addons menu.
Before installing, you will also need to `install the BlenderBIM Add-on
-<../blenderbim/installation>`__ and `install Sverchok
+`__ and `install Sverchok
`__.
If you downloaded Blender as a ``.zip`` file without running an installer, you
diff --git a/src/ifcopenshell-python/docs/introduction.rst b/src/ifcopenshell-python/docs/introduction.rst
index 77c00a4a94..b4661218ed 100644
--- a/src/ifcopenshell-python/docs/introduction.rst
+++ b/src/ifcopenshell-python/docs/introduction.rst
@@ -33,9 +33,9 @@ What makes IfcOpenShell special?
IfcOpenShell has a huge amount of unique features and capabilities not found in any other technology.
- IfcOpenShell is the oldest and most mature open source IFC library available. It's developed since 2011 by a community of hundreds of developers and trusted to deliver many AEC technologies that power our industry. IfcOpenShell is also taught in numerous universities and cited in hundreds of academic publications.
-- Lots of platforms and package management options are available: Windows, Mac, Mac ARM (M1, M2), Linux, Web Assembly (WASM), Docker, AWS Lambda, Google Colab, and more.
+- Lots of platforms and package management options are available: Windows, Mac Intel, Mac Silicon (M1, M2), Linux, Web Assembly (WASM), Docker, AWS Lambda, Google Colab, and more.
- Develop in C++, Python, or JavaScript via Pyodide.
-- All tools can be used either as a developer library, through a command line interface, or using a rich graphical interface. Whether you're deploy headless server tools for your own pipeline, writing your own apps, or an end-user, there's something for you.
+- All tools can be used either as a developer library, through a command line interface, or using a rich graphical interface. Whether you're deploying headless server tools for your own pipeline, writing your own apps, or an end-user, there's something for you.
- Supports IFC2X3, IFC4, and IFC4.3. Custom schemas (such as experimental or draft schemas) may be loaded at run-time instead of having to recompile.
- Built-in IFC validation is possible from basic syntax validation to more detailed "Where Rule" checks. This is the same validation that powers the official buildingSMART validation engine.
- Read and write IFC-SPF, IFCJSON, IFCXML, IFCHDF5, MySQL, and SQLite.
@@ -57,7 +57,7 @@ IfcOpenShell is a modular ecosystem of tools that work together, where each tool
"**IfcOpenShell**", "The core library for C++ developers. The library includes the ability to parse schemas, tessellate and process implicit geometry."
"**IfcOpenShell-Python**", "Python bindings to the core IfcOpenShell C++ system, as well as high level analysis and authoring functions."
"**IfcConvert**", "A command-line application for converting IFC geometry into file formats such as OBJ, DAE, GLB, STP, IGS, XML, SVG, H5, and IFC itself."
- "**BlenderBIM Add-on**", "A graphical add-on that lets you analyse, author, and modify IFC with Blender."
+ "**BlenderBIM Add-on**", "A graphical add-on that lets you analyse, author, and modify IFC with Blender. Graphically create BIM models from scratch!"
"**BCF**", "BIM Collaboration Format (BCF) is a standard to manage and exchange coordination topics between disciplines collaborating on a project by changing XML files or querying an API."
"**BIMServer-Plugin**", "A plugin to the open source BIMServer CDE to allow you to use IfcOpenShell to parse, view, and audit models."
"**BIMTester**", "A utility that allows you to write Gherkin-based tests for models."
diff --git a/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py b/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py
index fd4471c9d8..867089137f 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py
@@ -40,8 +40,9 @@ class Usecase:
:type relating_control: ifcopenshell.entity_instance.entity_instance
:param related_object: The IfcObjectDefinition that is being controlled
:type related_object: ifcopenshell.entity_instance.entity_instance
- :return: The newly created IfcRelAssignsToControl
- :rtype: ifcopenshell.entity_instance.entity_instance
+ :return: The newly created IfcRelAssignsToControl. If relationship already
+ existed before and wasn't changed then returns None.
+ :rtype: ifcopenshell.entity_instance.entity_instance, None
Example:
@@ -76,7 +77,7 @@ class Usecase:
if self.settings["related_object"].HasAssignments:
for assignment in self.settings["related_object"].HasAssignments:
if (
- assignment.is_a("IfclRelAssignsToControl")
+ assignment.is_a("IfcRelAssignsToControl")
and assignment.RelatingControl == self.settings["relating_control"]
):
return
@@ -86,6 +87,8 @@ class Usecase:
controls = self.settings["relating_control"].Controls[0]
if controls:
+ if self.settings["related_object"] in controls.RelatedObjects:
+ return
related_objects = set(controls.RelatedObjects)
related_objects.add(self.settings["related_object"])
controls.RelatedObjects = list(related_objects)
diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py
index 7569f58bbc..66a5bf3baf 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py
@@ -17,6 +17,7 @@
# along with IfcOpenShell. If not, see .
import ifcopenshell.util.unit
+import numpy as np
class Usecase:
@@ -44,35 +45,34 @@ class Usecase:
elif self.settings["type"] == "Mesh":
if self.settings["blender_obj"]:
result = self.create_blender_mesh()
- representation_type = "Clipping"
items = []
for item in self.settings["representation"].Items:
- # For now, we don't use IfcBooleanClippingResult.
- # This is unofficial but we assume that clipping results are part
- # of automated clips, whereas IfcBooleanResults are manual bools.
- # This is really terrible, but until we find a better solution...
- items.append(self.file.createIfcBooleanResult(self.settings["operator"], item, result))
- self.settings["representation"].RepresentationType = "CSG"
+ if (
+ self.settings["operator"] == "DIFFERENCE"
+ and result.is_a("IfcHalfSpaceSolid")
+ and (
+ item.is_a("IfcSweptAreaSolid")
+ or item.is_a("IfcSweptDiskSolid")
+ or item.is_a("IfcBooleanClippingResult")
+ )
+ ):
+ items.append(self.file.createIfcBooleanClippingResult(self.settings["operator"], item, result))
+ representation_type = "Clipping"
+ else:
+ items.append(self.file.createIfcBooleanResult(self.settings["operator"], item, result))
+ representation_type = "CSG"
+ self.settings["representation"].RepresentationType = representation_type
self.settings["representation"].Items = items
+ return items
def create_half_space_solid(self):
- clipping = self.settings["matrix"]
- return self.file.createIfcHalfSpaceSolid(
- self.file.createIfcPlane(
- self.file.createIfcAxis2Placement3D(
- self.file.createIfcCartesianPoint(
- (
- self.convert_si_to_unit(clipping[0][3]),
- self.convert_si_to_unit(clipping[1][3]),
- self.convert_si_to_unit(clipping[2][3]),
- )
- ),
- self.file.createIfcDirection((clipping[0][2], clipping[1][2], clipping[2][2])),
- self.file.createIfcDirection((clipping[0][0], clipping[1][0], clipping[2][0])),
- )
- ),
- False,
- )
+ clipping = np.array(self.settings["matrix"])[:3]
+ local_z = self.file.createIfcDirection(clipping[:, 2].tolist())
+ local_x = self.file.createIfcDirection(clipping[:, 0].tolist())
+ point = self.file.createIfcCartesianPoint(self.convert_si_to_unit(clipping[:, 3]).tolist())
+ placement = self.file.createIfcAxis2Placement3D(point, local_z, local_x)
+ plane = self.file.createIfcPlane(placement)
+ return self.file.createIfcHalfSpaceSolid(plane, AgreementFlag=False)
def create_blender_mesh(self):
self.ifc_vertices = []
diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py
index fe028bc657..35cd187904 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py
@@ -31,6 +31,7 @@ class Usecase:
# Planes are defined as a matrix. The XY plane is the clipping boundary and +Z is removed.
# [{"type": "IfcBooleanClippingResult", "operand_type": "IfcHalfSpaceSolid", "matrix": [...]}, {...}]
"clippings": [], # A list of planes that define clipping half space solids
+ "placement_zx_axes": (None, None),
}
for key, value in settings.items():
self.settings[key] = value
@@ -46,13 +47,14 @@ class Usecase:
def create_item(self):
point = self.get_point()
+ placement = self.file.createIfcAxis2Placement3D(
+ point,
+ self.file.createIfcDirection(self.settings["placement_zx_axes"][0] or (0.0, 0.0, 1.0)),
+ self.file.createIfcDirection(self.settings["placement_zx_axes"][1] or (1.0, 0.0, 0.0)),
+ )
extrusion = self.file.createIfcExtrudedAreaSolid(
self.settings["profile"],
- self.file.createIfcAxis2Placement3D(
- point,
- self.file.createIfcDirection((0.0, 0.0, 1.0)),
- self.file.createIfcDirection((1.0, 0.0, 0.0)),
- ),
+ placement,
self.file.createIfcDirection((0.0, 0.0, 1.0)),
self.convert_si_to_unit(self.settings["depth"]),
)
@@ -140,7 +142,7 @@ class Usecase:
settings = ifcopenshell.geom.settings()
settings.set(settings.INCLUDE_CURVES, True)
shape = ifcopenshell.geom.create_shape(settings, self.settings["profile"])
- x = [verts[i] for i in range(0, len(shape.verts), 3)]
+ x = [shape.verts[i] for i in range(0, len(shape.verts), 3)]
return self.convert_si_to_unit(max(x) - min(x))
return 0.0
@@ -169,6 +171,6 @@ class Usecase:
settings = ifcopenshell.geom.settings()
settings.set(settings.INCLUDE_CURVES, True)
shape = ifcopenshell.geom.create_shape(settings, self.settings["profile"])
- y = [verts[i + 1] for i in range(0, len(shape.verts), 3)]
+ y = [shape.verts[i + 1] for i in range(0, len(shape.verts), 3)]
return self.convert_si_to_unit(max(y) - min(y))
return 0.0
diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py
index 1dfe55312e..58a453e774 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py
@@ -158,9 +158,9 @@ class Usecase:
def execute(self):
self.update_pset_name()
self.load_pset_template()
- self.update_existing_properties()
- new_properties = self.add_new_properties()
- self.extend_pset_with_new_properties(new_properties)
+ existing_props = self.update_existing_properties()
+ new_props = self.add_new_properties()
+ self.assign_new_properties(existing_props + new_props)
def update_pset_name(self):
if self.settings["name"]:
@@ -198,18 +198,26 @@ class Usecase:
# IfcPropertySingleValue. Or maybe the user should
# just delete the property first? - vulevukusej
def update_existing_properties(self):
+ existing_props = []
for prop in self.get_properties():
if not self._should_update_prop(prop):
+ existing_props.append(prop)
continue
+ if self.file.get_total_inverses(prop) > 1:
+ continue # Treat as a new property to avoid affecting other psets.
+
if prop.is_a("IfcPropertyEnumeratedValue"):
- self.update_existing_prop_enum(prop)
-
+ prop = self.update_existing_prop_enum(prop)
+ if prop:
+ existing_props.append(prop)
elif prop.is_a("IfcPropertySingleValue"):
- self.update_existing_prop_single_value(prop)
-
+ prop = self.update_existing_prop_single_value(prop)
+ if prop:
+ existing_props.append(prop)
else:
raise NotImplementedError(f"Updating '{prop.is_a()}' properties is not supported yet")
+ return existing_props
def update_existing_prop_enum(self, prop):
"""
@@ -228,10 +236,7 @@ class Usecase:
sel_vals.append(ifc_val)
prop.EnumerationValues = tuple(sel_vals) or None
- elif (
- isinstance(value, ifcopenshell.entity_instance)
- and value.is_a("IfcPropertyEnumeratedValue")
- ):
+ elif isinstance(value, ifcopenshell.entity_instance) and value.is_a("IfcPropertyEnumeratedValue"):
if not value.EnumerationReference.EnumerationValues:
if self._try_purge(prop):
return
@@ -245,6 +250,7 @@ class Usecase:
if unit:
prop.Unit = unit
del self.settings["properties"][prop.Name]
+ return prop
def update_existing_prop_single_value(self, prop):
"""
@@ -267,6 +273,7 @@ class Usecase:
if unit:
prop.Unit = unit
del self.settings["properties"][prop.Name]
+ return prop
def add_new_properties(self):
properties = []
@@ -284,9 +291,7 @@ class Usecase:
kwargs = {"Name": name, "NominalValue": value}
if unit:
kwargs["Unit"] = unit
- properties.append(
- self.file.create_entity("IfcPropertySingleValue", **kwargs)
- )
+ properties.append(self.file.create_entity("IfcPropertySingleValue", **kwargs))
else:
raise ValueError(f"{value.is_a()} cannot be assigned to the property set '{name}'")
@@ -307,11 +312,8 @@ class Usecase:
self.file.create_entity(
"IfcPropertyListValue",
Name=name,
- ListValues=[
- self.file.create_entity(ifc_class, v)
- for v in value
- ],
- Unit=unit
+ ListValues=[self.file.create_entity(ifc_class, v) for v in value],
+ Unit=unit,
)
)
break
@@ -321,7 +323,7 @@ class Usecase:
"IFCPROPERTYENUMERATION",
Name=name,
EnumerationValues=pset_template.Enumerators.EnumerationValues,
- **({"Unit": unit} if unit else {})
+ **({"Unit": unit} if unit else {}),
)
prop_enum_value = self.file.create_entity(
"IFCPROPERTYENUMERATEDVALUE",
@@ -347,14 +349,10 @@ class Usecase:
if unit:
args["Unit"] = unit
- properties.append(
- self.file.create_entity("IfcPropertySingleValue", **args)
- )
+ properties.append(self.file.create_entity("IfcPropertySingleValue", **args))
return properties
- def extend_pset_with_new_properties(self, new_properties):
- props = list(self.get_properties())
- props.extend(new_properties)
+ def assign_new_properties(self, props):
if hasattr(self.settings["pset"], "HasProperties"):
self.settings["pset"].HasProperties = props
elif hasattr(self.settings["pset"], "Properties"):
diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/remove_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/remove_pset.py
index 44aa512ab3..c17079dffc 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/pset/remove_pset.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/pset/remove_pset.py
@@ -69,7 +69,7 @@ class Usecase:
continue
if prop.is_a("IfcPropertyEnumeratedValue"):
enumeration = prop.EnumerationReference
- if self.file.get_total_inverses(enumeration) == 1:
+ if enumeration and self.file.get_total_inverses(enumeration) == 1:
self.file.remove(enumeration)
self.file.remove(prop)
self.file.remove(self.settings["pset"])
diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py
index 9b8f78bf70..7ffbdc38fa 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py
@@ -130,7 +130,7 @@ class Usecase:
elif inverse.is_a("IfcRelVoidsElement") and inverse.RelatingBuildingElement == from_element:
opening = inverse.RelatedOpeningElement
# We don't copy filled openings, since there is no guarantee the filling is also copied
- if not opening.HasFillings:
+ if not opening.is_a("IfcOpeningElement") or not opening.HasFillings:
new_opening = ifcopenshell.api.run("root.copy_class", self.file, product=opening)
new_opening.VoidsElements[0].RelatingBuildingElement = to_element
if new_opening.ObjectPlacement and new_opening.ObjectPlacement.is_a("IfcLocalPlacement"):
diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py
index ae2843479d..aef53b625f 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py
@@ -17,6 +17,7 @@
# along with IfcOpenShell. If not, see .
import ifcopenshell
+import ifcopenshell.util.type
import ifcopenshell.util.schema
import ifcopenshell.util.element
@@ -79,12 +80,13 @@ class Usecase:
element.PredefinedType = "USERDEFINED"
element.ObjectType = self.settings["predefined_type"]
if element.is_a("IfcTypeProduct"):
- for typed_element in ifcopenshell.util.element.get_types(element) or []:
+ for occurrence in ifcopenshell.util.element.get_types(element) or []:
+ ifc_class = ifcopenshell.util.type.get_applicable_entities(self.settings["ifc_class"])[0]
ifcopenshell.api.run(
"root.reassign_class",
self.file,
- product=typed_element,
- ifc_class=self.settings["ifc_class"].strip("Type"),
+ product=occurrence,
+ ifc_class=ifc_class,
predefined_type= self.settings["predefined_type"]
)
return element
diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py
index 0ec81a87d7..257dc1aba3 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py
@@ -167,4 +167,9 @@ class Usecase:
self.file.remove(inverse)
elif len(inverse.RelatedObjects) == 1:
self.file.remove(inverse)
+ elif inverse.is_a("IfcRelFlowControlElements"):
+ if inverse.RelatingFlowElement == self.settings["product"]:
+ self.file.remove(inverse)
+ elif inverse.RelatedControlElements == (self.settings["product"],):
+ self.file.remove(inverse)
self.file.remove(self.settings["product"])
diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_product.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_product.py
index 5e4393457f..d8003227d1 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_product.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_product.py
@@ -61,7 +61,7 @@ class Usecase:
wall = ifcopenshell.api.run("root.create_entity", model, ifc_class="IfcWall")
# Let's construct that wall!
- ifcopenshell.api.run("sequence.assign_product", relating_product=wall, related_object=task)
+ ifcopenshell.api.run("sequence.assign_product", model, relating_product=wall, related_object=task)
"""
self.file = file
self.settings = {
diff --git a/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py b/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py
index 4a8997a847..d0f0187cbf 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py
@@ -44,7 +44,7 @@ class Usecase:
:param relating_structure: The IfcSpatialStructureElement element, such
as IfcBuilding, IfcBuildingStorey, or IfcSpace that the element
exists in.
- :return: The IfcRelContainedInSpatialStructure relationship instance
+ :return: The IfcRelReferencedInSpatialStructure relationship instance
:rtype: ifcopenshell.entity_instance.entity_instance
Example:
diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/remove_styled_representation.py b/src/ifcopenshell-python/ifcopenshell/api/style/remove_styled_representation.py
new file mode 100644
index 0000000000..4381f91a4b
--- /dev/null
+++ b/src/ifcopenshell-python/ifcopenshell/api/style/remove_styled_representation.py
@@ -0,0 +1,54 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2023 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+
+class Usecase:
+ def __init__(self, file, representation=None):
+ """Removes a styled representation
+
+ Styled representations are typically associated with materials. This
+ removes the representation but not the underlying styles.
+
+ :param representation: The IfcStyledRepresentation to remove.
+ :type representation: ifcopenshell.entity_instance.entity_instance
+ :return: None
+ :rtype: None
+
+ Example:
+
+ .. code:: python
+
+ # Remove a styled representation
+ ifcopenshell.api.run("style.remove_styled_representation", model, representation=representation)
+ """
+ self.file = file
+ self.settings = {"representation": representation}
+
+ def execute(self):
+ for inverse in self.file.get_inverse(self.settings["representation"]):
+ if inverse.is_a("IfcMaterialDefinitionRepresentation") and len(inverse.Representations) == 1:
+ self.file.remove(inverse)
+
+ for item in self.settings["representation"].Items:
+ if item.is_a("IfcStyledItem") and self.file.get_total_inverses(item) == 1:
+ for style in item.Styles:
+ if style.is_a("IfcPresentationStyleAssignment"):
+ self.file.remove(style)
+ self.file.remove(item)
+
+ self.file.remove(self.settings["representation"])
diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/unassign_material_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/unassign_material_style.py
new file mode 100644
index 0000000000..f88030ad9b
--- /dev/null
+++ b/src/ifcopenshell-python/ifcopenshell/api/style/unassign_material_style.py
@@ -0,0 +1,70 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2023 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+
+class Usecase:
+ def __init__(self, file, material=None, style=None, context=None):
+ """Unassigns a style to a material
+
+ This does the inverse of assign_material_style.
+
+ :param material: The IfcMaterial which you want to unassign the style from.
+ :type material: ifcopenshell.entity_instance.entity_instance
+ :param style: The IfcPresentationStyle (typically IfcSurfaceStyle) that
+ you want to unassign from material. This will then be applied to all
+ objects that have that material.
+ :type style: ifcopenshell.entity_instance.entity_instance
+ :param context: The IfcGeometricRepresentationSubContext at which this
+ style should be unassigned. Typically this is the Model BODY context.
+ :type context: ifcopenshell.entity_instance.entity_instance
+ :return: None
+ :rtype: None
+
+ Example:
+
+ .. code:: python
+
+ ifcopenshell.api.run("style.unassign_material_style", model, material=concrete, style=style, context=body)
+ """
+ self.file = file
+ self.settings = {
+ "material": material,
+ "style": style,
+ "context": context,
+ }
+
+ def execute(self):
+ to_delete = set()
+ for definition in self.settings["material"].HasRepresentation:
+ for representation in definition.Representations:
+ if not representation.is_a("IfcStyledRepresentation"):
+ continue
+ if representation.ContextOfItems != self.settings["context"]:
+ continue
+ for item in representation.Items:
+ if not item.is_a("IfcStyledItem"):
+ continue
+ styles = [s for s in item.Styles if s != self.settings["style"]]
+ if not styles:
+ self.file.remove(item)
+ elif len(styles) != len(item.Styles):
+ item.Styles = styles
+ if not representation.Items:
+ self.file.remove(representation)
+ if not definition.Representations:
+ self.file.remove(definition)
diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py b/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py
new file mode 100644
index 0000000000..4517a42421
--- /dev/null
+++ b/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py
@@ -0,0 +1,85 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2021 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import ifcopenshell
+import ifcopenshell.api
+
+
+class Usecase:
+ def __init__(self, file, relating_flow_element=None, related_flow_control=None):
+ """Assigns to the flow element control element that either sense or control
+ some aspect of the flow element.
+
+ Note that control can be assigned only to the one flow element.
+
+ :param related_flow_control: IfcDistributionControlElement
+ which may be used to impart control on the flow element
+ :type related_flow_control: ifcopenshell.entity_instance.entity_instance
+ :param relating_flow_element: The IfcDistributionFlowElement that is being controlled / sensed
+ :type relating_flow_element: ifcopenshell.entity_instance.entity_instance
+ :return: Matching or newly created IfcRelFlowControlElements. If control
+ is already assigned to some other element method will return None.
+ :rtype: ifcopenshell.entity_instance.entity_instance, None
+
+ Example:
+
+ .. code:: python
+
+ flow_element = model.createIfcFlowSegment()
+ flow_control = model.createIfcController()
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control", model,
+ related_flow_control=flow_control, relating_flow_element=flow_element
+ )
+ """
+ self.file = file
+ self.settings = {
+ "relating_flow_element": relating_flow_element,
+ "related_flow_control": related_flow_control,
+ }
+
+ def execute(self):
+ if self.settings["related_flow_control"].AssignedToFlowElement:
+ # only 1 control per 1 flow element is possible
+ assignment = self.settings["related_flow_control"].AssignedToFlowElement[0]
+ if assignment.RelatingFlowElement == self.settings["relating_flow_element"]:
+ return assignment
+ # return None if this control is already assigned to another flow element
+ return
+
+ if self.settings["relating_flow_element"].HasControlElements:
+ assignment = self.settings["relating_flow_element"].HasControlElements[0]
+ if self.settings["related_flow_control"] in assignment.RelatedControlElements:
+ return assignment
+
+ related_flow_controls = set(assignment.RelatedControlElements)
+ related_flow_controls.add(self.settings["related_flow_control"])
+ assignment.RelatedControlElements = list(related_flow_controls)
+ ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": assignment})
+ return assignment
+
+ assignment = self.file.create_entity(
+ "IfcRelFlowControlElements",
+ **{
+ "GlobalId": ifcopenshell.guid.new(),
+ "OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
+ "RelatedControlElements": [self.settings["related_flow_control"]],
+ "RelatingFlowElement": self.settings["relating_flow_element"],
+ },
+ )
+ return assignment
diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/unassign_flow_control.py b/src/ifcopenshell-python/ifcopenshell/api/system/unassign_flow_control.py
new file mode 100644
index 0000000000..63e3c58c6a
--- /dev/null
+++ b/src/ifcopenshell-python/ifcopenshell/api/system/unassign_flow_control.py
@@ -0,0 +1,72 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2021 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import ifcopenshell
+import ifcopenshell.api
+
+
+class Usecase:
+ def __init__(self, file, relating_flow_element=None, related_flow_control=None):
+ """Unassigns flow control element from the flow element.
+
+ :param related_flow_control: IfcDistributionControlElement controling the
+ flow element
+ :type related_flow_control: ifcopenshell.entity_instance.entity_instance
+ :param relating_flow_element: The IfcDistributionFlowElement that is being controlled
+ :type relating_flow_element: ifcopenshell.entity_instance.entity_instance
+ :return: If the control still is related to other objects, the
+ IfcRelFlowControlElements is returned, otherwise None.
+ :rtype: ifcopenshell.entity_instance.entity_instance, None
+
+ Example:
+
+ .. code:: python
+
+ # assign control to the flow element
+ flow_element = self.file.createIfcFlowSegment()
+ flow_control = self.file.createIfcController()
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control", self.file,
+ relating_control=flow_control, related_object=flow_element
+ )
+
+ # und unassign it
+ ifcopenshell.api.run("system.unassign_flow_control", self.file,
+ relating_control=flow_control, related_object=flow_element
+ )
+ """
+
+ self.file = file
+ self.settings = {
+ "relating_flow_element": relating_flow_element,
+ "related_flow_control": related_flow_control,
+ }
+
+ def execute(self):
+ if not self.settings["related_flow_control"].AssignedToFlowElement:
+ return
+ assignment = self.settings["related_flow_control"].AssignedToFlowElement[0]
+ if assignment.RelatingFlowElement != self.settings["relating_flow_element"]:
+ return
+ if len(assignment.RelatedControlElements) == 1:
+ return self.file.remove(assignment)
+ related_flow_controls = list(assignment.RelatedControlElements)
+ related_flow_controls.remove(self.settings["related_flow_control"])
+ assignment.RelatedControlElements = related_flow_controls
+ ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": assignment})
+ return assignment
diff --git a/src/ifcopenshell-python/ifcopenshell/api/void/remove_opening.py b/src/ifcopenshell-python/ifcopenshell/api/void/remove_opening.py
index 566416c8fd..9be088dc52 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/void/remove_opening.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/void/remove_opening.py
@@ -50,6 +50,7 @@ class Usecase:
def execute(self):
for rel in self.settings["opening"].VoidsElements:
self.file.remove(rel)
- for rel in self.settings["opening"].HasFillings:
- self.file.remove(rel)
+ if self.settings["opening"].is_a("IfcOpeningElement"):
+ for rel in self.settings["opening"].HasFillings:
+ self.file.remove(rel)
ifcopenshell.api.run("root.remove_product", self.file, product=self.settings["opening"])
diff --git a/src/ifcopenshell-python/ifcopenshell/entity_instance.py b/src/ifcopenshell-python/ifcopenshell/entity_instance.py
index 62f1a03dab..f624effa1e 100644
--- a/src/ifcopenshell-python/ifcopenshell/entity_instance.py
+++ b/src/ifcopenshell-python/ifcopenshell/entity_instance.py
@@ -27,6 +27,9 @@ import numbers
import itertools
import operator
import functools
+import subprocess
+import sys
+import time
from . import ifcopenshell_wrapper
from . import settings
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py b/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py
index d7d20f2122..b91597e042 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py
@@ -81,7 +81,7 @@ def run(f, logger):
orig = ifcopenshell.settings.unpack_non_aggregate_inverses
ifcopenshell.settings.unpack_non_aggregate_inverses = True
- fn = os.path.join(os.path.dirname(__file__), "rules", f"{f.schema}.py")
+ fn = os.path.join(os.path.dirname(__file__), "rules", f"{f.schema_identifier}.py")
try:
source = open(fn, "r").read()
except FileNotFoundError as e:
@@ -90,7 +90,7 @@ def run(f, logger):
import subprocess
current_dir_files = {fn.lower(): fn for fn in os.listdir('.')}
- schema_name = str(f.schema).split(' ')[-1].lower()
+ schema_name = str(f.schema_identifier).split(' ')[-1].lower()
schema_path = current_dir_files.get(schema_name + '.exp')
fn = schema_path[:-4] + '.py'
if not os.path.exists(fn):
@@ -100,7 +100,7 @@ def run(f, logger):
a = ast.parse(source)
assertion.rewrite.rewrite_asserts(mod=a, source=source)
- cd = compile(a, f"{f.schema}.py", "exec")
+ cd = compile(a, f"{f.schema_identifier}.py", "exec")
scope = {}
exec(cd, scope)
S = ifcopenshell.ifcopenshell_wrapper.schema_by_name(f.schema_identifier)
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py
index 20d8d3cc8a..3d11ee521f 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py
@@ -3579,7 +3579,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCompoundPlaneAngleMeasure_WR1:
SCOPE = 'type'
@@ -3642,7 +3642,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -3651,7 +3651,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -3660,7 +3660,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -3768,7 +3768,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -3777,7 +3777,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -3786,7 +3786,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class Ifc2DCompositeCurve_WR1:
SCOPE = 'entity'
@@ -4137,7 +4137,7 @@ class IfcBlobTexture_WR11:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBoilerType_WR1:
SCOPE = 'entity'
@@ -4736,7 +4736,7 @@ class IfcDimensionCalloutRelationship_WR11:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['primary', 'secondary']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['primary', 'secondary']) is not False
class IfcDimensionCalloutRelationship_WR12:
SCOPE = 'entity'
@@ -4819,7 +4819,7 @@ class IfcDimensionPair_WR11:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['chained', 'parallel']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['chained', 'parallel']) is not False
class IfcDimensionPair_WR12:
SCOPE = 'entity'
@@ -4934,7 +4934,7 @@ class IfcDraughtingPreDefinedColour_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_WR31:
SCOPE = 'entity'
@@ -4943,7 +4943,7 @@ class IfcDraughtingPreDefinedCurveFont_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDraughtingPreDefinedTextFont_WR31:
SCOPE = 'entity'
@@ -4952,7 +4952,7 @@ class IfcDraughtingPreDefinedTextFont_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['iso3098-1fonta', 'iso3098-1fontb']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['iso3098-1fonta', 'iso3098-1fontb']) is not False
class IfcDuctFittingType_WR2:
SCOPE = 'entity'
@@ -5782,7 +5782,7 @@ class IfcPreDefinedDimensionSymbol_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['arclength', 'conicaltaper', 'counterbore', 'countersink', 'depth', 'diameter', 'plusminus', 'radius', 'slope', 'sphericaldiameter', 'sphericalradius', 'square']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['arclength', 'conicaltaper', 'counterbore', 'countersink', 'depth', 'diameter', 'plusminus', 'radius', 'slope', 'sphericaldiameter', 'sphericalradius', 'square']) is not False
class IfcPreDefinedPointMarkerSymbol_WR31:
SCOPE = 'entity'
@@ -5791,7 +5791,7 @@ class IfcPreDefinedPointMarkerSymbol_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['asterisk', 'circle', 'dot', 'plus', 'square', 'triangle', 'x']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['asterisk', 'circle', 'dot', 'plus', 'square', 'triangle', 'x']) is not False
class IfcPreDefinedTerminatorSymbol_WR31:
SCOPE = 'entity'
@@ -5800,7 +5800,7 @@ class IfcPreDefinedTerminatorSymbol_WR31:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['blankedarrow', 'blankedbox', 'blankeddot', 'dimensionorigin', 'filledarrow', 'filledbox', 'filleddot', 'integralsymbol', 'openarrow', 'slash', 'unfilledarrow']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['blankedarrow', 'blankedbox', 'blankeddot', 'dimensionorigin', 'filledarrow', 'filledbox', 'filleddot', 'integralsymbol', 'openarrow', 'slash', 'unfilledarrow']) is not False
class IfcProcedure_WR1:
SCOPE = 'entity'
@@ -6786,7 +6786,7 @@ class IfcStructuredDimensionCallout_WR31:
@staticmethod
def __call__(self):
contents = getattr(self, 'Contents', INDETERMINATE)
- assert (sizeof([ato for ato in [con for con in getattr(self, 'contents', INDETERMINATE) if 'ifc2x3.ifcannotationtextoccurrence' in typeof(con)] if not getattr(ato, 'Name', INDETERMINATE) in ['dimensionvalue', 'tolerancevalue', 'unittext', 'prefixtext', 'suffixtext']]) == 0) is not False
+ assert (sizeof([ato for ato in [con for con in getattr(self, 'contents', INDETERMINATE) if 'ifc2x3.ifcannotationtextoccurrence' in typeof(con)] if not getattr(getattr(ato, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['dimensionvalue', 'tolerancevalue', 'unittext', 'prefixtext', 'suffixtext']]) == 0) is not False
class IfcStyledItem_WR11:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py
index 7a52a036d4..c93ed6fc21 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py
@@ -4313,7 +4313,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -4394,7 +4394,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -4403,7 +4403,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -4412,7 +4412,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -4511,7 +4511,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -4520,7 +4520,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -4529,7 +4529,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -5178,7 +5178,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -6580,7 +6580,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -6589,7 +6589,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py
index 3f55d11b1a..9e7b4ff535 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py
@@ -4404,7 +4404,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -4485,7 +4485,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -4494,7 +4494,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -4503,7 +4503,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -4602,7 +4602,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -4611,7 +4611,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -4620,7 +4620,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -5269,7 +5269,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -6671,7 +6671,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -6680,7 +6680,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py
index b676c21cfb..20dccc22ed 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py
@@ -4555,7 +4555,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -4636,7 +4636,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -4645,7 +4645,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -4654,7 +4654,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -4753,7 +4753,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -4762,7 +4762,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -4771,7 +4771,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -5450,7 +5450,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -6892,7 +6892,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -6901,7 +6901,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py
index 46af263cad..b8075fcda6 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py
@@ -5180,7 +5180,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5261,7 +5261,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5270,7 +5270,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5279,7 +5279,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5378,7 +5378,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5387,7 +5387,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5396,7 +5396,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6123,7 +6123,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBoiler_CorrectPredefinedType:
SCOPE = 'entity'
@@ -7712,7 +7712,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7721,7 +7721,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py
index 6efc55b614..789b936646 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py
@@ -5130,7 +5130,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5211,7 +5211,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5220,7 +5220,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5229,7 +5229,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5328,7 +5328,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5337,7 +5337,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5346,7 +5346,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6073,7 +6073,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBoiler_CorrectPredefinedType:
SCOPE = 'entity'
@@ -7661,7 +7661,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7670,7 +7670,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py
new file mode 100644
index 0000000000..f40b66c9e5
--- /dev/null
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py
@@ -0,0 +1,14045 @@
+import ifcopenshell
+
+def exists(v):
+ if callable(v):
+ try:
+ return v() is not None
+ except IndexError as e:
+ return False
+ else:
+ return v is not None
+
+def nvl(v, default):
+ return v if v is not None else default
+
+def is_entity(inst):
+ if isinstance(inst, ifcopenshell.entity_instance):
+ schema_name = inst.is_a(True).split('.')[0].lower()
+ decl = ifcopenshell.ifcopenshell_wrapper.schema_by_name(schema_name).declaration_by_name(inst.is_a())
+ return isinstance(decl, ifcopenshell.ifcopenshell_wrapper.entity)
+ return False
+
+def express_len(v):
+ if isinstance(v, ifcopenshell.entity_instance) and (not is_entity(v)):
+ v = v[0]
+ elif v is None or v is INDETERMINATE:
+ return INDETERMINATE
+ return len(v)
+old_range = range
+
+def range(*args):
+ if INDETERMINATE in args:
+ return
+ yield from old_range(*args)
+sizeof = express_len
+hiindex = express_len
+blength = express_len
+loindex = lambda x: 1
+from math import *
+unknown = 'UNKNOWN'
+
+def usedin(inst, ref_name):
+ if inst is None:
+ return []
+ (_, __, attr) = ref_name.split('.')
+
+ def filter():
+ for (ref, attr_idx) in inst.wrapped_data.file.get_inverse(inst, allow_duplicate=True, with_attribute_indices=True):
+ if ref.wrapped_data.get_attribute_names()[attr_idx].lower() == attr:
+ yield ref
+ return list(filter())
+
+class express_set(set):
+
+ def __mul__(self, other):
+ return express_set(set(other) & self)
+ __rmul__ = __mul__
+
+ def __add__(self, other):
+
+ def make_list(v):
+ if isinstance(v, (list, tuple, set, express_set)):
+ return list(v)
+ else:
+ return [v]
+ return express_set(list(self) + make_list(other))
+ __radd__ = __add__
+
+ def __repr__(self):
+ return repr(set(self))
+
+ def __getitem__(self, k):
+ return express_getitem(list(self), k, INDETERMINATE)
+
+def express_getitem(aggr, idx, default):
+ if aggr is None:
+ return default
+ if isinstance(aggr, ifcopenshell.entity_instance) and (not is_entity(aggr)):
+ aggr = aggr[0]
+ try:
+ return aggr[idx]
+ except IndexError as e:
+ return None
+EXPRESS_ONE_BASED_INDEXING = 1
+
+def typeof(inst):
+ if not inst:
+ return express_set([])
+ schema_name = inst.is_a(True).split('.')[0].lower()
+
+ def inner():
+ decl = ifcopenshell.ifcopenshell_wrapper.schema_by_name(schema_name).declaration_by_name(inst.is_a())
+ while decl:
+ yield '.'.join((schema_name, decl.name().lower()))
+ if isinstance(decl, ifcopenshell.ifcopenshell_wrapper.entity):
+ decl = decl.supertype()
+ else:
+ decl = decl.declared_type()
+ while isinstance(decl, ifcopenshell.ifcopenshell_wrapper.named_type):
+ decl = decl.declared_type()
+ if not isinstance(decl, ifcopenshell.ifcopenshell_wrapper.type_declaration):
+ break
+ return express_set(inner())
+
+class indeterminate_type:
+
+ def __bool__(self):
+ return False
+
+ def bop(self, *other):
+ return self
+ __lt__ = bop
+ __le__ = bop
+ __eq__ = bop
+ __ne__ = bop
+ __gt__ = bop
+ __ge__ = bop
+ __add__ = bop
+ __radd__ = bop
+ __sub__ = bop
+ __rsub__ = bop
+ __mul__ = bop
+ __rmul__ = bop
+ __truediv__ = bop
+ __floordiv__ = bop
+ __rtruediv__ = bop
+ __rfloordiv__ = bop
+ __mod__ = bop
+ __rmod__ = bop
+ __pow__ = bop
+ __rpow__ = bop
+ __neg__ = bop
+ __pos__ = bop
+ __getitem__ = bop
+ __getattr__ = bop
+INDETERMINATE = indeterminate_type()
+
+class enum_namespace:
+
+ def __getattr__(self, k):
+ return getattr(k, 'upper', INDETERMINATE)()
+IfcActionRequestTypeEnum = enum_namespace()
+email = getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE)
+fax = getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE)
+phone = getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE)
+post = getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE)
+verbal = getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE)
+userdefined = getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcActionSourceTypeEnum = enum_namespace()
+brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE)
+buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE)
+completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE)
+creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE)
+current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE)
+dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE)
+earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE)
+erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE)
+fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE)
+ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE)
+impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE)
+impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE)
+lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE)
+live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE)
+prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE)
+propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE)
+rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE)
+settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE)
+shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE)
+snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE)
+system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE)
+temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE)
+transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE)
+wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE)
+wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE)
+userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcActionTypeEnum = enum_namespace()
+extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE)
+permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE)
+variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE)
+userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcActuatorTypeEnum = enum_namespace()
+electricactuator = getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE)
+handoperatedactuator = getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE)
+hydraulicactuator = getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE)
+pneumaticactuator = getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE)
+thermostaticactuator = getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE)
+userdefined = getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAddressTypeEnum = enum_namespace()
+distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE)
+home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE)
+office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE)
+site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE)
+userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE)
+IfcAirTerminalBoxTypeEnum = enum_namespace()
+constantflow = getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE)
+variableflowpressuredependant = getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE)
+variableflowpressureindependant = getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE)
+userdefined = getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAirTerminalTypeEnum = enum_namespace()
+diffuser = getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE)
+grille = getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE)
+louvre = getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE)
+register = getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE)
+userdefined = getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAirToAirHeatRecoveryTypeEnum = enum_namespace()
+fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE)
+fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE)
+fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE)
+heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE)
+rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE)
+runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE)
+thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE)
+thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE)
+twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE)
+userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAlarmTypeEnum = enum_namespace()
+bell = getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE)
+breakglassbutton = getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE)
+light = getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE)
+manualpullbox = getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE)
+railwaycrocodile = getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE)
+railwaydetonator = getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE)
+siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE)
+whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE)
+userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAlignmentCantSegmentTypeEnum = enum_namespace()
+blosscurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE)
+constantcant = getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE)
+cosinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE)
+helmertcurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE)
+lineartransition = getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE)
+sinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE)
+viennesebend = getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE)
+IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace()
+blosscurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE)
+circulararc = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE)
+clothoid = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE)
+cosinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE)
+cubic = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE)
+helmertcurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE)
+line = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE)
+sinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE)
+viennesebend = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE)
+IfcAlignmentTypeEnum = enum_namespace()
+userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAlignmentVerticalSegmentTypeEnum = enum_namespace()
+circulararc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE)
+clothoid = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE)
+constantgradient = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE)
+parabolicarc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE)
+IfcAnalysisModelTypeEnum = enum_namespace()
+in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE)
+loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE)
+out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE)
+userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAnalysisTheoryTypeEnum = enum_namespace()
+first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE)
+full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE)
+second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE)
+third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE)
+userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAnnotationTypeEnum = enum_namespace()
+contourline = getattr(IfcAnnotationTypeEnum, 'CONTOURLINE', INDETERMINATE)
+dimension = getattr(IfcAnnotationTypeEnum, 'DIMENSION', INDETERMINATE)
+isobar = getattr(IfcAnnotationTypeEnum, 'ISOBAR', INDETERMINATE)
+isolux = getattr(IfcAnnotationTypeEnum, 'ISOLUX', INDETERMINATE)
+isotherm = getattr(IfcAnnotationTypeEnum, 'ISOTHERM', INDETERMINATE)
+leader = getattr(IfcAnnotationTypeEnum, 'LEADER', INDETERMINATE)
+survey = getattr(IfcAnnotationTypeEnum, 'SURVEY', INDETERMINATE)
+symbol = getattr(IfcAnnotationTypeEnum, 'SYMBOL', INDETERMINATE)
+text = getattr(IfcAnnotationTypeEnum, 'TEXT', INDETERMINATE)
+userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcArithmeticOperatorEnum = enum_namespace()
+add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE)
+divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE)
+modulo = getattr(IfcArithmeticOperatorEnum, 'MODULO', INDETERMINATE)
+multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE)
+subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE)
+IfcAssemblyPlaceEnum = enum_namespace()
+factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE)
+site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE)
+notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE)
+IfcAudioVisualApplianceTypeEnum = enum_namespace()
+amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE)
+camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE)
+communicationterminal = getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE)
+display = getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE)
+microphone = getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE)
+player = getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE)
+projector = getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE)
+receiver = getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE)
+recordingequipment = getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE)
+speaker = getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE)
+switcher = getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE)
+telephone = getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE)
+tuner = getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE)
+userdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBSplineCurveForm = enum_namespace()
+circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE)
+elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE)
+hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE)
+parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE)
+polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE)
+unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE)
+IfcBSplineSurfaceForm = enum_namespace()
+conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE)
+cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE)
+generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE)
+plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE)
+quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE)
+ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE)
+spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE)
+surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE)
+surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE)
+toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE)
+unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE)
+IfcBeamTypeEnum = enum_namespace()
+beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE)
+cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE)
+diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE)
+edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE)
+girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE)
+hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE)
+hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE)
+joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE)
+lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE)
+piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE)
+spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE)
+t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE)
+userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBearingTypeEnum = enum_namespace()
+cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE)
+disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE)
+elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE)
+guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE)
+pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE)
+rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE)
+roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE)
+spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE)
+userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBenchmarkEnum = enum_namespace()
+equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE)
+greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE)
+greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE)
+includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE)
+includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE)
+lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE)
+lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE)
+notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE)
+notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE)
+notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE)
+IfcBoilerTypeEnum = enum_namespace()
+steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE)
+water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE)
+userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBooleanOperator = enum_namespace()
+difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE)
+intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE)
+union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE)
+IfcBridgePartTypeEnum = enum_namespace()
+abutment = getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE)
+deck = getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE)
+deck_segment = getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE)
+foundation = getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE)
+pier = getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE)
+pier_segment = getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE)
+pylon = getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE)
+substructure = getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE)
+superstructure = getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE)
+surfacestructure = getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE)
+userdefined = getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBridgeTypeEnum = enum_namespace()
+arched = getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE)
+cable_stayed = getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE)
+cantilever = getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE)
+culvert = getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE)
+framework = getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE)
+girder = getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE)
+suspension = getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE)
+truss = getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE)
+userdefined = getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBuildingElementPartTypeEnum = enum_namespace()
+apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE)
+armourunit = getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE)
+insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE)
+precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE)
+safetycage = getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE)
+userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBuildingElementProxyTypeEnum = enum_namespace()
+complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE)
+element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE)
+partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE)
+provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE)
+provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE)
+userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBuildingSystemTypeEnum = enum_namespace()
+fenestration = getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE)
+foundation = getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE)
+loadbearing = getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE)
+outershell = getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE)
+shading = getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE)
+transport = getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE)
+userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBuiltSystemTypeEnum = enum_namespace()
+erosionprevention = getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE)
+fenestration = getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE)
+foundation = getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE)
+loadbearing = getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE)
+mooring = getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE)
+outershell = getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE)
+prestressing = getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE)
+railwayline = getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE)
+railwaytrack = getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE)
+reinforcing = getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE)
+shading = getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE)
+trackcircuit = getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE)
+transport = getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE)
+userdefined = getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcBurnerTypeEnum = enum_namespace()
+userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCableCarrierFittingTypeEnum = enum_namespace()
+bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE)
+connector = getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE)
+cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE)
+junction = getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE)
+reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE)
+tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE)
+transition = getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE)
+userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCableCarrierSegmentTypeEnum = enum_namespace()
+cablebracket = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE)
+cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE)
+cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE)
+cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE)
+catenarywire = getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE)
+conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE)
+dropper = getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE)
+userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCableFittingTypeEnum = enum_namespace()
+connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE)
+entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE)
+exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE)
+fanout = getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE)
+junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE)
+transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE)
+userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCableSegmentTypeEnum = enum_namespace()
+busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE)
+cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE)
+conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE)
+contactwiresegment = getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE)
+coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE)
+fibersegment = getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE)
+fibertube = getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE)
+opticalcablesegment = getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE)
+stitchwire = getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE)
+wirepairsegment = getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE)
+userdefined = getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCaissonFoundationTypeEnum = enum_namespace()
+caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE)
+well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE)
+userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcChangeActionEnum = enum_namespace()
+added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE)
+deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE)
+modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE)
+nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)
+notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcChillerTypeEnum = enum_namespace()
+aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE)
+heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE)
+watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE)
+userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcChimneyTypeEnum = enum_namespace()
+userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCoilTypeEnum = enum_namespace()
+dxcoolingcoil = getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE)
+electricheatingcoil = getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE)
+gasheatingcoil = getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE)
+hydroniccoil = getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE)
+steamheatingcoil = getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE)
+watercoolingcoil = getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE)
+waterheatingcoil = getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE)
+userdefined = getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcColumnTypeEnum = enum_namespace()
+column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE)
+pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE)
+pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE)
+pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE)
+standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE)
+userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCommunicationsApplianceTypeEnum = enum_namespace()
+antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE)
+automaton = getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE)
+computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE)
+fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE)
+gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE)
+intelligentperipheral = getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE)
+ipnetworkequipment = getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE)
+linesideelectronicunit = getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE)
+modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE)
+networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE)
+networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE)
+networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE)
+opticallineterminal = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE)
+opticalnetworkunit = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE)
+printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE)
+radioblockcenter = getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE)
+repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE)
+router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE)
+scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE)
+telecommand = getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE)
+telephonyexchange = getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE)
+transitioncomponent = getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE)
+transponder = getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE)
+transportequipment = getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE)
+userdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcComplexPropertyTemplateTypeEnum = enum_namespace()
+p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE)
+q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE)
+IfcCompressorTypeEnum = enum_namespace()
+booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE)
+dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE)
+hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE)
+opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE)
+reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE)
+rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE)
+rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE)
+rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE)
+scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE)
+semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE)
+singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE)
+singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE)
+trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE)
+twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE)
+weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE)
+userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCondenserTypeEnum = enum_namespace()
+aircooled = getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE)
+evaporativecooled = getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE)
+watercooled = getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE)
+watercooledbrazedplate = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE)
+watercooledshellcoil = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE)
+watercooledshelltube = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE)
+watercooledtubeintube = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE)
+userdefined = getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConnectionTypeEnum = enum_namespace()
+atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE)
+atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE)
+atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE)
+notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConstraintEnum = enum_namespace()
+advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE)
+hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE)
+soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE)
+userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConstructionEquipmentResourceTypeEnum = enum_namespace()
+demolishing = getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE)
+earthmoving = getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE)
+erecting = getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE)
+heating = getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE)
+lighting = getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE)
+paving = getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE)
+pumping = getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE)
+transporting = getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE)
+userdefined = getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConstructionMaterialResourceTypeEnum = enum_namespace()
+aggregates = getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE)
+concrete = getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE)
+drywall = getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE)
+fuel = getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE)
+gypsum = getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE)
+masonry = getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE)
+metal = getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE)
+plastic = getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE)
+wood = getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE)
+userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConstructionProductResourceTypeEnum = enum_namespace()
+assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE)
+formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE)
+userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcControllerTypeEnum = enum_namespace()
+floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE)
+multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE)
+programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE)
+proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE)
+twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE)
+userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcConveyorSegmentTypeEnum = enum_namespace()
+beltconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE)
+bucketconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE)
+chuteconveyor = getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE)
+screwconveyor = getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE)
+userdefined = getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCooledBeamTypeEnum = enum_namespace()
+active = getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE)
+passive = getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE)
+userdefined = getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCoolingTowerTypeEnum = enum_namespace()
+mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE)
+mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE)
+naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE)
+userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCostItemTypeEnum = enum_namespace()
+userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCostScheduleTypeEnum = enum_namespace()
+budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE)
+costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE)
+estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE)
+pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE)
+scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE)
+tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE)
+unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE)
+userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCourseTypeEnum = enum_namespace()
+armour = getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE)
+ballastbed = getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE)
+core = getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE)
+filter = getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE)
+pavement = getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE)
+protection = getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE)
+userdefined = getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCoveringTypeEnum = enum_namespace()
+ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE)
+cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE)
+coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE)
+flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE)
+insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE)
+membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE)
+molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE)
+roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE)
+skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE)
+sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE)
+topping = getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE)
+wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE)
+userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCrewResourceTypeEnum = enum_namespace()
+office = getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE)
+site = getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE)
+userdefined = getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCurtainWallTypeEnum = enum_namespace()
+userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcCurveInterpolationEnum = enum_namespace()
+linear = getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE)
+log_linear = getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE)
+log_log = getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE)
+notdefined = getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDamperTypeEnum = enum_namespace()
+backdraftdamper = getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE)
+balancingdamper = getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE)
+blastdamper = getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE)
+controldamper = getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE)
+firedamper = getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE)
+firesmokedamper = getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE)
+fumehoodexhaust = getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE)
+gravitydamper = getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE)
+gravityreliefdamper = getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE)
+reliefdamper = getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE)
+smokedamper = getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE)
+userdefined = getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDataOriginEnum = enum_namespace()
+measured = getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE)
+predicted = getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE)
+simulated = getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE)
+userdefined = getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDerivedUnitEnum = enum_namespace()
+accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE)
+angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE)
+areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE)
+compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE)
+curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE)
+dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE)
+heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE)
+heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE)
+integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE)
+ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE)
+isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE)
+kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE)
+linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE)
+linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE)
+linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE)
+linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE)
+luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE)
+massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE)
+massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE)
+massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE)
+modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE)
+modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE)
+modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE)
+modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE)
+moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE)
+molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE)
+momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE)
+phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE)
+planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE)
+rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE)
+rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE)
+rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE)
+sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE)
+sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE)
+shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE)
+soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE)
+soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE)
+soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE)
+soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE)
+specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE)
+temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE)
+temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE)
+thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE)
+thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE)
+thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE)
+thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE)
+thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE)
+torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE)
+vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE)
+volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE)
+warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE)
+warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE)
+userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)
+IfcDirectionSenseEnum = enum_namespace()
+negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE)
+positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE)
+IfcDiscreteAccessoryTypeEnum = enum_namespace()
+anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE)
+birdprotection = getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE)
+bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE)
+cablearranger = getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE)
+elastic_cushion = getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE)
+expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE)
+filler = getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE)
+flashing = getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE)
+insulator = getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE)
+lock = getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE)
+panel_strengthening = getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE)
+pointmachinemountingdevice = getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE)
+point_machine_locking_device = getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE)
+railbrace = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE)
+railpad = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE)
+rail_lubrication = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE)
+rail_mechanical_equipment = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE)
+shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE)
+slidingchair = getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE)
+soundabsorption = getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE)
+tensioningequipment = getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE)
+userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDistributionBoardTypeEnum = enum_namespace()
+consumerunit = getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE)
+dispatchingboard = getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE)
+distributionboard = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE)
+distributionframe = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE)
+motorcontrolcentre = getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE)
+switchboard = getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE)
+userdefined = getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDistributionChamberElementTypeEnum = enum_namespace()
+formedduct = getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE)
+inspectionchamber = getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE)
+inspectionpit = getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE)
+manhole = getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE)
+meterchamber = getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE)
+sump = getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE)
+trench = getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE)
+valvechamber = getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE)
+userdefined = getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDistributionPortTypeEnum = enum_namespace()
+cable = getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE)
+cablecarrier = getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE)
+duct = getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE)
+pipe = getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE)
+wireless = getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE)
+userdefined = getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDistributionSystemEnum = enum_namespace()
+airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE)
+audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE)
+catenary_system = getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE)
+chemical = getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE)
+chilledwater = getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE)
+communication = getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE)
+compressedair = getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE)
+condenserwater = getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE)
+control = getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE)
+conveying = getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE)
+data = getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE)
+disposal = getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE)
+domesticcoldwater = getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE)
+domestichotwater = getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE)
+drainage = getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE)
+earthing = getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE)
+electrical = getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE)
+electroacoustic = getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE)
+exhaust = getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE)
+fireprotection = getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE)
+fixedtransmissionnetwork = getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE)
+fuel = getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE)
+gas = getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE)
+hazardous = getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE)
+heating = getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE)
+lighting = getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE)
+lightningprotection = getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE)
+mobilenetwork = getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE)
+monitoringsystem = getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE)
+municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE)
+oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE)
+operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE)
+operationaltelephonysystem = getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE)
+overhead_contactline_system = getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE)
+powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE)
+rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE)
+refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE)
+return_circuit = getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE)
+security = getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE)
+sewage = getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE)
+signal = getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE)
+stormwater = getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE)
+telephone = getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE)
+tv = getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE)
+vacuum = getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE)
+vent = getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE)
+ventilation = getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE)
+wastewater = getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE)
+watersupply = getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE)
+userdefined = getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDocumentConfidentialityEnum = enum_namespace()
+confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE)
+personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE)
+public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE)
+restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE)
+userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDocumentStatusEnum = enum_namespace()
+draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE)
+final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE)
+finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE)
+revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE)
+notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDoorPanelOperationEnum = enum_namespace()
+double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE)
+fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE)
+folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE)
+revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE)
+rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE)
+sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE)
+swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE)
+userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDoorPanelPositionEnum = enum_namespace()
+left = getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE)
+middle = getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE)
+right = getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE)
+notdefined = getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDoorTypeEnum = enum_namespace()
+boom_barrier = getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE)
+door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE)
+gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE)
+trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE)
+turnstile = getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE)
+userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDoorTypeOperationEnum = enum_namespace()
+double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE)
+double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE)
+double_door_lifting_vertical = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE)
+double_door_single_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE)
+double_door_single_swing_opposite_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE)
+double_door_single_swing_opposite_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE)
+double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE)
+double_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE)
+double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE)
+folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE)
+folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE)
+lifting_horizontal = getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE)
+lifting_vertical_left = getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE)
+lifting_vertical_right = getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE)
+revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE)
+revolving_vertical = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE)
+rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE)
+single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE)
+single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE)
+sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE)
+sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE)
+swing_fixed_left = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE)
+swing_fixed_right = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE)
+userdefined = getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDuctFittingTypeEnum = enum_namespace()
+bend = getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE)
+connector = getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE)
+entry = getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE)
+exit = getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE)
+junction = getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE)
+obstruction = getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE)
+transition = getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE)
+userdefined = getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDuctSegmentTypeEnum = enum_namespace()
+flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE)
+rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE)
+userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcDuctSilencerTypeEnum = enum_namespace()
+flatoval = getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE)
+rectangular = getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE)
+round = getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE)
+userdefined = getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEarthworksCutTypeEnum = enum_namespace()
+base_excavation = getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE)
+cut = getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE)
+dredging = getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE)
+excavation = getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE)
+overexcavation = getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE)
+pavementmilling = getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE)
+stepexcavation = getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE)
+topsoilremoval = getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE)
+trench = getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE)
+userdefined = getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEarthworksFillTypeEnum = enum_namespace()
+backfill = getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE)
+counterweight = getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE)
+embankment = getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE)
+slopefill = getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE)
+subgrade = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE)
+subgradebed = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE)
+transitionsection = getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE)
+userdefined = getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricApplianceTypeEnum = enum_namespace()
+dishwasher = getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE)
+electriccooker = getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE)
+freestandingelectricheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE)
+freestandingfan = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE)
+freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE)
+freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE)
+freezer = getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE)
+fridge_freezer = getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE)
+handdryer = getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE)
+kitchenmachine = getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE)
+microwave = getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE)
+photocopier = getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE)
+refrigerator = getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE)
+tumbledryer = getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE)
+vendingmachine = getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE)
+washingmachine = getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE)
+userdefined = getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricDistributionBoardTypeEnum = enum_namespace()
+consumerunit = getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE)
+distributionboard = getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE)
+motorcontrolcentre = getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE)
+switchboard = getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE)
+userdefined = getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricFlowStorageDeviceTypeEnum = enum_namespace()
+battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE)
+capacitor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE)
+capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE)
+compensator = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE)
+harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE)
+inductor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE)
+inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE)
+recharger = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE)
+ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE)
+userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace()
+electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE)
+userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricGeneratorTypeEnum = enum_namespace()
+chp = getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE)
+enginegenerator = getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE)
+standalone = getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE)
+userdefined = getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricMotorTypeEnum = enum_namespace()
+dc = getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE)
+induction = getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE)
+polyphase = getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE)
+reluctancesynchronous = getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE)
+synchronous = getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE)
+userdefined = getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElectricTimeControlTypeEnum = enum_namespace()
+relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE)
+timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE)
+timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE)
+userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElementAssemblyTypeEnum = enum_namespace()
+abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE)
+accessory_assembly = getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE)
+arch = getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE)
+beam_grid = getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE)
+braced_frame = getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE)
+cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE)
+deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE)
+dilatationpanel = getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE)
+entranceworks = getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE)
+girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE)
+grid = getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE)
+mast = getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE)
+pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE)
+pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE)
+rail_mechanical_equipment_assembly = getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE)
+reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE)
+rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE)
+shelter = getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE)
+signalassembly = getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE)
+slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE)
+sumpbuster = getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE)
+supportingassembly = getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE)
+suspensionassembly = getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE)
+trackpanel = getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE)
+traction_switching_assembly = getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE)
+traffic_calming_device = getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE)
+truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE)
+turnoutpanel = getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE)
+userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcElementCompositionEnum = enum_namespace()
+complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE)
+element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE)
+partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE)
+IfcEngineTypeEnum = enum_namespace()
+externalcombustion = getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE)
+internalcombustion = getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE)
+userdefined = getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEvaporativeCoolerTypeEnum = enum_namespace()
+directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE)
+directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE)
+directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE)
+directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE)
+directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE)
+indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE)
+indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE)
+indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE)
+indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE)
+userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEvaporatorTypeEnum = enum_namespace()
+directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE)
+directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE)
+directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE)
+directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE)
+floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE)
+shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE)
+userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEventTriggerTypeEnum = enum_namespace()
+eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE)
+eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE)
+eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE)
+eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE)
+userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcEventTypeEnum = enum_namespace()
+endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE)
+intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE)
+startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE)
+userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcExternalSpatialElementTypeEnum = enum_namespace()
+external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE)
+external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE)
+external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE)
+external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE)
+userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFacilityPartCommonTypeEnum = enum_namespace()
+aboveground = getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE)
+belowground = getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE)
+junction = getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE)
+levelcrossing = getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE)
+segment = getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE)
+substructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE)
+superstructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE)
+terminal = getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE)
+userdefined = getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFacilityUsageEnum = enum_namespace()
+lateral = getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE)
+longitudinal = getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE)
+region = getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE)
+vertical = getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE)
+userdefined = getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFanTypeEnum = enum_namespace()
+centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE)
+centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE)
+centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE)
+centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE)
+propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE)
+tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE)
+vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE)
+userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFastenerTypeEnum = enum_namespace()
+glue = getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE)
+mortar = getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE)
+weld = getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE)
+userdefined = getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFilterTypeEnum = enum_namespace()
+airparticlefilter = getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE)
+compressedairfilter = getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE)
+odorfilter = getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE)
+oilfilter = getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE)
+strainer = getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE)
+waterfilter = getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE)
+userdefined = getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFireSuppressionTerminalTypeEnum = enum_namespace()
+breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE)
+firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE)
+firemonitor = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE)
+hosereel = getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE)
+sprinkler = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE)
+sprinklerdeflector = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE)
+userdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFlowDirectionEnum = enum_namespace()
+sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE)
+source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE)
+sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE)
+notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFlowInstrumentTypeEnum = enum_namespace()
+ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE)
+combined = getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE)
+frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE)
+phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE)
+powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE)
+pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE)
+thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE)
+voltmeter = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE)
+voltmeter_peak = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE)
+voltmeter_rms = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE)
+userdefined = getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFlowMeterTypeEnum = enum_namespace()
+energymeter = getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE)
+gasmeter = getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE)
+oilmeter = getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE)
+watermeter = getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE)
+userdefined = getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFootingTypeEnum = enum_namespace()
+caisson_foundation = getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE)
+footing_beam = getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE)
+pad_footing = getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE)
+pile_cap = getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE)
+strip_footing = getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE)
+userdefined = getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcFurnitureTypeEnum = enum_namespace()
+bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE)
+chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE)
+desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE)
+filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE)
+shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE)
+sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE)
+table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE)
+technicalcabinet = getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE)
+userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcGeographicElementTypeEnum = enum_namespace()
+soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE)
+terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE)
+vegetation = getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE)
+userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcGeometricProjectionEnum = enum_namespace()
+elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE)
+graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE)
+model_view = getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE)
+plan_view = getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE)
+reflected_plan_view = getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE)
+section_view = getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE)
+sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE)
+userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcGeotechnicalStratumTypeEnum = enum_namespace()
+solid = getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE)
+void = getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE)
+water = getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE)
+userdefined = getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcGlobalOrLocalEnum = enum_namespace()
+global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE)
+local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE)
+IfcGridTypeEnum = enum_namespace()
+irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE)
+radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE)
+rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE)
+triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE)
+userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcHeatExchangerTypeEnum = enum_namespace()
+plate = getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE)
+shellandtube = getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE)
+turnoutheating = getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE)
+userdefined = getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcHumidifierTypeEnum = enum_namespace()
+adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE)
+adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE)
+adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE)
+adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE)
+adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE)
+adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE)
+adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE)
+assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE)
+assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE)
+assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE)
+assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE)
+assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE)
+steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE)
+userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcImpactProtectionDeviceTypeEnum = enum_namespace()
+bumper = getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE)
+crashcushion = getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE)
+dampingsystem = getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE)
+fender = getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE)
+userdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcInterceptorTypeEnum = enum_namespace()
+cyclonic = getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE)
+grease = getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE)
+oil = getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE)
+petrol = getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE)
+userdefined = getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcInternalOrExternalEnum = enum_namespace()
+external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE)
+external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE)
+external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE)
+external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE)
+internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE)
+notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE)
+IfcInventoryTypeEnum = enum_namespace()
+assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE)
+furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE)
+spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE)
+userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcJunctionBoxTypeEnum = enum_namespace()
+data = getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE)
+power = getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE)
+userdefined = getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcKerbTypeEnum = enum_namespace()
+userdefined = getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcKnotType = enum_namespace()
+piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE)
+quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE)
+uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE)
+unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE)
+IfcLaborResourceTypeEnum = enum_namespace()
+administration = getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE)
+carpentry = getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE)
+cleaning = getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE)
+concrete = getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE)
+drywall = getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE)
+electric = getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE)
+finishing = getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE)
+flooring = getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE)
+general = getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE)
+hvac = getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE)
+landscaping = getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE)
+masonry = getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE)
+painting = getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE)
+paving = getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE)
+plumbing = getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE)
+roofing = getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE)
+sitegrading = getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE)
+steelwork = getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE)
+surveying = getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE)
+userdefined = getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLampTypeEnum = enum_namespace()
+compactfluorescent = getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE)
+fluorescent = getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE)
+halogen = getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE)
+highpressuremercury = getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE)
+highpressuresodium = getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE)
+led = getattr(IfcLampTypeEnum, 'LED', INDETERMINATE)
+metalhalide = getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE)
+oled = getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE)
+tungstenfilament = getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE)
+userdefined = getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLayerSetDirectionEnum = enum_namespace()
+axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE)
+axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE)
+axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE)
+IfcLightDistributionCurveEnum = enum_namespace()
+type_a = getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE)
+type_b = getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE)
+type_c = getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE)
+notdefined = getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLightEmissionSourceEnum = enum_namespace()
+compactfluorescent = getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE)
+fluorescent = getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE)
+highpressuremercury = getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE)
+highpressuresodium = getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE)
+lightemittingdiode = getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE)
+lowpressuresodium = getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE)
+lowvoltagehalogen = getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE)
+mainvoltagehalogen = getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE)
+metalhalide = getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE)
+tungstenfilament = getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE)
+notdefined = getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLightFixtureTypeEnum = enum_namespace()
+directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE)
+pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE)
+securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE)
+userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLiquidTerminalTypeEnum = enum_namespace()
+hosereel = getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE)
+loadingarm = getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE)
+userdefined = getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLoadGroupTypeEnum = enum_namespace()
+load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)
+load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE)
+load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE)
+userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcLogicalOperatorEnum = enum_namespace()
+logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE)
+logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE)
+logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE)
+logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE)
+logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE)
+IfcMarineFacilityTypeEnum = enum_namespace()
+barrierbeach = getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE)
+breakwater = getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE)
+canal = getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE)
+drydock = getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE)
+floatingdock = getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE)
+hydrolift = getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE)
+jetty = getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE)
+launchrecovery = getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE)
+marinedefence = getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE)
+navigationalchannel = getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE)
+port = getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE)
+quay = getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE)
+revetment = getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE)
+shiplift = getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE)
+shiplock = getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE)
+shipyard = getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE)
+slipway = getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE)
+waterway = getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE)
+waterwayshiplift = getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE)
+userdefined = getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMarinePartTypeEnum = enum_namespace()
+abovewaterline = getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE)
+anchorage = getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE)
+approachchannel = getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE)
+belowwaterline = getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE)
+berthingstructure = getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE)
+chamber = getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE)
+cill_level = getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE)
+copelevel = getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE)
+core = getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE)
+crest = getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE)
+gatehead = getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE)
+gudingstructure = getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE)
+highwaterline = getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE)
+landfield = getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE)
+leewardside = getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE)
+lowwaterline = getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE)
+manufacturing = getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE)
+navigationalarea = getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE)
+protection = getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE)
+shiptransfer = getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE)
+storagearea = getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE)
+vehicleservicing = getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE)
+waterfield = getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE)
+weatherside = getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE)
+userdefined = getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMechanicalFastenerTypeEnum = enum_namespace()
+anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE)
+bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE)
+chain = getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE)
+coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE)
+dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE)
+nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE)
+nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE)
+railfastening = getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE)
+railjoint = getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE)
+rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE)
+rope = getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE)
+screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE)
+shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE)
+staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE)
+studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE)
+userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMedicalDeviceTypeEnum = enum_namespace()
+airstation = getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE)
+feedairunit = getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE)
+oxygengenerator = getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE)
+oxygenplant = getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE)
+vacuumstation = getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE)
+userdefined = getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMemberTypeEnum = enum_namespace()
+arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE)
+brace = getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE)
+chord = getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE)
+collar = getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE)
+member = getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE)
+mullion = getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE)
+plate = getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE)
+post = getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE)
+purlin = getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE)
+rafter = getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE)
+stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE)
+stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE)
+stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE)
+structuralcable = getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE)
+strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE)
+stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE)
+suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE)
+suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE)
+tiebar = getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE)
+userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace()
+accesspoint = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE)
+basebandunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE)
+basetransceiverstation = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE)
+e_utran_node_b = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE)
+gateway_gprs_support_node = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE)
+masterunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE)
+mobileswitchingcenter = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE)
+mscserver = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE)
+packetcontrolunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE)
+remoteradiounit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE)
+remoteunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE)
+service_gprs_support_node = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE)
+subscriberserver = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE)
+userdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMooringDeviceTypeEnum = enum_namespace()
+bollard = getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE)
+linetensioner = getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE)
+magneticdevice = getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE)
+mooringhooks = getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE)
+vacuumdevice = getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE)
+userdefined = getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcMotorConnectionTypeEnum = enum_namespace()
+beltdrive = getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE)
+coupling = getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE)
+directdrive = getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE)
+userdefined = getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcNavigationElementTypeEnum = enum_namespace()
+beacon = getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE)
+buoy = getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE)
+userdefined = getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcObjectiveEnum = enum_namespace()
+codecompliance = getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE)
+codewaiver = getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE)
+designintent = getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE)
+external = getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE)
+healthandsafety = getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE)
+mergeconflict = getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE)
+modelview = getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE)
+parameter = getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE)
+requirement = getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE)
+specification = getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE)
+triggercondition = getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE)
+userdefined = getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE)
+IfcOccupantTypeEnum = enum_namespace()
+assignee = getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE)
+assignor = getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE)
+lessee = getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE)
+lessor = getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE)
+lettingagent = getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE)
+owner = getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE)
+tenant = getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE)
+userdefined = getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcOpeningElementTypeEnum = enum_namespace()
+opening = getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE)
+recess = getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE)
+userdefined = getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcOutletTypeEnum = enum_namespace()
+audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE)
+communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE)
+dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE)
+poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE)
+telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE)
+userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPavementTypeEnum = enum_namespace()
+flexible = getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE)
+rigid = getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE)
+userdefined = getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPerformanceHistoryTypeEnum = enum_namespace()
+userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPermeableCoveringOperationEnum = enum_namespace()
+grill = getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE)
+louver = getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE)
+screen = getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE)
+userdefined = getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPermitTypeEnum = enum_namespace()
+access = getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE)
+building = getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE)
+work = getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE)
+userdefined = getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPhysicalOrVirtualEnum = enum_namespace()
+physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE)
+virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE)
+notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPileConstructionEnum = enum_namespace()
+cast_in_place = getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE)
+composite = getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE)
+precast_concrete = getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE)
+prefab_steel = getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE)
+userdefined = getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPileTypeEnum = enum_namespace()
+bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE)
+cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE)
+driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE)
+friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE)
+jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE)
+support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE)
+userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPipeFittingTypeEnum = enum_namespace()
+bend = getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE)
+connector = getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE)
+entry = getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE)
+exit = getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE)
+junction = getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE)
+obstruction = getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE)
+transition = getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE)
+userdefined = getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPipeSegmentTypeEnum = enum_namespace()
+culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE)
+flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE)
+gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE)
+rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE)
+spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE)
+userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPlateTypeEnum = enum_namespace()
+base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE)
+cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE)
+curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE)
+flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE)
+gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE)
+sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE)
+splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE)
+stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE)
+web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE)
+userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPreferredSurfaceCurveRepresentation = enum_namespace()
+curve3d = getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE)
+pcurve_s1 = getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE)
+pcurve_s2 = getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE)
+IfcProcedureTypeEnum = enum_namespace()
+advice_caution = getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE)
+advice_note = getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE)
+advice_warning = getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE)
+calibration = getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE)
+diagnostic = getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE)
+shutdown = getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE)
+startup = getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE)
+userdefined = getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcProfileTypeEnum = enum_namespace()
+area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE)
+curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)
+IfcProjectOrderTypeEnum = enum_namespace()
+changeorder = getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE)
+maintenanceworkorder = getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE)
+moveorder = getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE)
+purchaseorder = getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE)
+workorder = getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE)
+userdefined = getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcProjectedOrTrueLengthEnum = enum_namespace()
+projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE)
+true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE)
+IfcProjectionElementTypeEnum = enum_namespace()
+blister = getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE)
+deviator = getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE)
+userdefined = getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPropertySetTemplateTypeEnum = enum_namespace()
+pset_materialdriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE)
+pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE)
+pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE)
+pset_profiledriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE)
+pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE)
+pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE)
+qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE)
+qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE)
+qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE)
+notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace()
+electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE)
+electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE)
+residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE)
+thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE)
+userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcProtectiveDeviceTypeEnum = enum_namespace()
+anti_arcing_device = getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE)
+circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE)
+earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE)
+earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE)
+fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE)
+residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE)
+residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE)
+sparkgap = getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE)
+varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE)
+voltagelimiter = getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE)
+userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcPumpTypeEnum = enum_namespace()
+circulator = getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE)
+endsuction = getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE)
+splitcase = getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE)
+submersiblepump = getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE)
+sumppump = getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE)
+verticalinline = getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE)
+verticalturbine = getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE)
+userdefined = getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRailTypeEnum = enum_namespace()
+blade = getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE)
+checkrail = getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE)
+guardrail = getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE)
+rackrail = getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE)
+rail = getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE)
+stockrail = getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE)
+userdefined = getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRailingTypeEnum = enum_namespace()
+balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE)
+fence = getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE)
+guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE)
+handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE)
+userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRailwayPartTypeEnum = enum_namespace()
+abovetrack = getattr(IfcRailwayPartTypeEnum, 'ABOVETRACK', INDETERMINATE)
+dilationtrack = getattr(IfcRailwayPartTypeEnum, 'DILATIONTRACK', INDETERMINATE)
+lineside = getattr(IfcRailwayPartTypeEnum, 'LINESIDE', INDETERMINATE)
+linesidepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDEPART', INDETERMINATE)
+plaintrack = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACK', INDETERMINATE)
+substructure = getattr(IfcRailwayPartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE)
+track = getattr(IfcRailwayPartTypeEnum, 'TRACK', INDETERMINATE)
+trackpart = getattr(IfcRailwayPartTypeEnum, 'TRACKPART', INDETERMINATE)
+turnouttrack = getattr(IfcRailwayPartTypeEnum, 'TURNOUTTRACK', INDETERMINATE)
+userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRailwayTypeEnum = enum_namespace()
+userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRampFlightTypeEnum = enum_namespace()
+spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE)
+straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE)
+userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRampTypeEnum = enum_namespace()
+half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE)
+quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE)
+spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE)
+straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE)
+two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE)
+two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE)
+userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRecurrenceTypeEnum = enum_namespace()
+by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE)
+by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE)
+daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE)
+monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE)
+monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE)
+weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE)
+yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE)
+yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE)
+IfcReferentTypeEnum = enum_namespace()
+boundary = getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE)
+intersection = getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE)
+kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE)
+landmark = getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE)
+milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE)
+position = getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE)
+referencemarker = getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE)
+station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE)
+superelevationevent = getattr(IfcReferentTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE)
+widthevent = getattr(IfcReferentTypeEnum, 'WIDTHEVENT', INDETERMINATE)
+userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcReflectanceMethodEnum = enum_namespace()
+blinn = getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE)
+flat = getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE)
+glass = getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE)
+matt = getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE)
+metal = getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE)
+mirror = getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE)
+phong = getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE)
+physical = getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE)
+plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE)
+strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE)
+notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE)
+IfcReinforcedSoilTypeEnum = enum_namespace()
+dynamicallycompacted = getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE)
+grouted = getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE)
+replaced = getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE)
+rollercompacted = getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE)
+surchargepreloaded = getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE)
+verticallydrained = getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE)
+userdefined = getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcReinforcingBarRoleEnum = enum_namespace()
+anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE)
+edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE)
+ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE)
+main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE)
+punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE)
+ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE)
+shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE)
+stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE)
+userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE)
+IfcReinforcingBarSurfaceEnum = enum_namespace()
+plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE)
+textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE)
+IfcReinforcingBarTypeEnum = enum_namespace()
+anchoring = getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE)
+edge = getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE)
+ligature = getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE)
+main = getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE)
+punching = getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE)
+ring = getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE)
+shear = getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE)
+spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE)
+stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE)
+userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcReinforcingMeshTypeEnum = enum_namespace()
+userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRoadPartTypeEnum = enum_namespace()
+bicyclecrossing = getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE)
+bus_stop = getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE)
+carriageway = getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE)
+centralisland = getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE)
+centralreserve = getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE)
+hardshoulder = getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE)
+intersection = getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE)
+layby = getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE)
+parkingbay = getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE)
+passingbay = getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE)
+pedestrian_crossing = getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE)
+railwaycrossing = getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE)
+refugeisland = getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE)
+roadsegment = getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE)
+roadside = getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE)
+roadsidepart = getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE)
+roadwayplateau = getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE)
+roundabout = getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE)
+shoulder = getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE)
+sidewalk = getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE)
+softshoulder = getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE)
+tollplaza = getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE)
+trafficisland = getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE)
+trafficlane = getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE)
+userdefined = getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRoadTypeEnum = enum_namespace()
+userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcRoleEnum = enum_namespace()
+architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE)
+buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE)
+buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE)
+civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE)
+client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE)
+commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE)
+constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE)
+consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE)
+contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE)
+costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE)
+electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE)
+engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE)
+facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE)
+fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE)
+manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE)
+mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE)
+owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE)
+projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE)
+reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE)
+structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE)
+subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE)
+supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE)
+userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE)
+IfcRoofTypeEnum = enum_namespace()
+barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE)
+butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE)
+dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE)
+flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE)
+freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE)
+gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE)
+gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE)
+hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE)
+hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE)
+mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE)
+pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE)
+rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE)
+shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE)
+userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSIPrefix = enum_namespace()
+atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE)
+centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE)
+deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE)
+deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE)
+exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE)
+femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE)
+giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE)
+hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE)
+kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE)
+mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE)
+micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE)
+milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE)
+nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE)
+peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE)
+pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE)
+tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE)
+IfcSIUnitName = enum_namespace()
+ampere = getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE)
+becquerel = getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE)
+candela = getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE)
+coulomb = getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE)
+cubic_metre = getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE)
+degree_celsius = getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE)
+farad = getattr(IfcSIUnitName, 'FARAD', INDETERMINATE)
+gram = getattr(IfcSIUnitName, 'GRAM', INDETERMINATE)
+gray = getattr(IfcSIUnitName, 'GRAY', INDETERMINATE)
+henry = getattr(IfcSIUnitName, 'HENRY', INDETERMINATE)
+hertz = getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE)
+joule = getattr(IfcSIUnitName, 'JOULE', INDETERMINATE)
+kelvin = getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE)
+lumen = getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE)
+lux = getattr(IfcSIUnitName, 'LUX', INDETERMINATE)
+metre = getattr(IfcSIUnitName, 'METRE', INDETERMINATE)
+mole = getattr(IfcSIUnitName, 'MOLE', INDETERMINATE)
+newton = getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE)
+ohm = getattr(IfcSIUnitName, 'OHM', INDETERMINATE)
+pascal = getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE)
+radian = getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE)
+second = getattr(IfcSIUnitName, 'SECOND', INDETERMINATE)
+siemens = getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE)
+sievert = getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE)
+square_metre = getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE)
+steradian = getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE)
+tesla = getattr(IfcSIUnitName, 'TESLA', INDETERMINATE)
+volt = getattr(IfcSIUnitName, 'VOLT', INDETERMINATE)
+watt = getattr(IfcSIUnitName, 'WATT', INDETERMINATE)
+weber = getattr(IfcSIUnitName, 'WEBER', INDETERMINATE)
+IfcSanitaryTerminalTypeEnum = enum_namespace()
+bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE)
+bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE)
+cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE)
+sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE)
+shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE)
+sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE)
+toiletpan = getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE)
+urinal = getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE)
+washhandbasin = getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE)
+wcseat = getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE)
+userdefined = getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSectionTypeEnum = enum_namespace()
+tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE)
+uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE)
+IfcSensorTypeEnum = enum_namespace()
+co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE)
+conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE)
+contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE)
+cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE)
+earthquakesensor = getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE)
+firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE)
+flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE)
+foreignobjectdetectionsensor = getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE)
+frostsensor = getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE)
+gassensor = getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE)
+heatsensor = getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE)
+humiditysensor = getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE)
+identifiersensor = getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE)
+ionconcentrationsensor = getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE)
+levelsensor = getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE)
+lightsensor = getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE)
+moisturesensor = getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE)
+movementsensor = getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE)
+obstaclesensor = getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE)
+phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE)
+pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE)
+radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE)
+radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE)
+rainsensor = getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE)
+smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE)
+snowdepthsensor = getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE)
+soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE)
+temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE)
+trainsensor = getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE)
+turnoutclosuresensor = getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE)
+wheelsensor = getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE)
+windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE)
+userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSequenceEnum = enum_namespace()
+finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE)
+finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE)
+start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE)
+start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE)
+userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE)
+IfcShadingDeviceTypeEnum = enum_namespace()
+awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE)
+jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE)
+shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE)
+userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSignTypeEnum = enum_namespace()
+marker = getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE)
+mirror = getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE)
+pictoral = getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE)
+userdefined = getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSignalTypeEnum = enum_namespace()
+audio = getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE)
+mixed = getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE)
+visual = getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE)
+userdefined = getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSimplePropertyTemplateTypeEnum = enum_namespace()
+p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE)
+p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE)
+p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE)
+p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE)
+p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE)
+p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE)
+q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE)
+q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE)
+q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE)
+q_number = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE)
+q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE)
+q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE)
+q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE)
+IfcSlabTypeEnum = enum_namespace()
+approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE)
+baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE)
+floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE)
+landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE)
+paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE)
+roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE)
+sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE)
+trackslab = getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE)
+wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE)
+userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSolarDeviceTypeEnum = enum_namespace()
+solarcollector = getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE)
+solarpanel = getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE)
+userdefined = getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSpaceHeaterTypeEnum = enum_namespace()
+convector = getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE)
+radiator = getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE)
+userdefined = getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSpaceTypeEnum = enum_namespace()
+berth = getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE)
+external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE)
+gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE)
+internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE)
+parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE)
+space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE)
+userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSpatialZoneTypeEnum = enum_namespace()
+construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE)
+firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE)
+interference = getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE)
+lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE)
+occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE)
+reservation = getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE)
+security = getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE)
+thermal = getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE)
+transport = getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE)
+ventilation = getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE)
+userdefined = getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStackTerminalTypeEnum = enum_namespace()
+birdcage = getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE)
+cowl = getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE)
+rainwaterhopper = getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE)
+userdefined = getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStairFlightTypeEnum = enum_namespace()
+curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE)
+freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE)
+spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE)
+straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE)
+winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE)
+userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStairTypeEnum = enum_namespace()
+curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE)
+double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE)
+half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE)
+half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE)
+ladder = getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE)
+quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE)
+quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE)
+spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE)
+straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE)
+three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE)
+three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE)
+two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE)
+two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE)
+two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE)
+two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE)
+userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStateEnum = enum_namespace()
+locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE)
+readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE)
+readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE)
+readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE)
+readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE)
+IfcStructuralCurveActivityTypeEnum = enum_namespace()
+const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)
+discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE)
+equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)
+linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE)
+parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)
+polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE)
+sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE)
+userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStructuralCurveMemberTypeEnum = enum_namespace()
+cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE)
+compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE)
+pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE)
+rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE)
+tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE)
+userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStructuralSurfaceActivityTypeEnum = enum_namespace()
+bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE)
+const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)
+discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE)
+isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE)
+userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcStructuralSurfaceMemberTypeEnum = enum_namespace()
+bending_element = getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE)
+membrane_element = getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE)
+shell = getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE)
+userdefined = getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSubContractResourceTypeEnum = enum_namespace()
+purchase = getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE)
+work = getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE)
+userdefined = getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSurfaceFeatureTypeEnum = enum_namespace()
+defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE)
+hatchmarking = getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE)
+linemarking = getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE)
+mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE)
+nonskidsurfacing = getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE)
+pavementsurfacemarking = getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE)
+rumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE)
+symbolmarking = getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE)
+tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE)
+transverserumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE)
+treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE)
+userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSurfaceSide = enum_namespace()
+both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE)
+negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE)
+positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE)
+IfcSwitchingDeviceTypeEnum = enum_namespace()
+contactor = getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE)
+dimmerswitch = getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE)
+emergencystop = getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE)
+keypad = getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE)
+momentaryswitch = getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE)
+relay = getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE)
+selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE)
+starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE)
+start_and_stop_equipment = getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE)
+switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE)
+toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE)
+userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcSystemFurnitureElementTypeEnum = enum_namespace()
+panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE)
+subrack = getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE)
+worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE)
+userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTankTypeEnum = enum_namespace()
+basin = getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE)
+breakpressure = getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE)
+expansion = getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE)
+feedandexpansion = getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE)
+oilretentiontray = getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE)
+pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE)
+storage = getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE)
+vessel = getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE)
+userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTaskDurationEnum = enum_namespace()
+elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE)
+worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE)
+notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTaskTypeEnum = enum_namespace()
+adjustment = getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE)
+attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE)
+calibration = getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE)
+construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE)
+demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE)
+dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE)
+disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE)
+emergency = getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE)
+inspection = getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE)
+installation = getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE)
+logistic = getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE)
+maintenance = getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE)
+move = getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE)
+operation = getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE)
+removal = getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE)
+renovation = getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE)
+safety = getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE)
+shutdown = getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE)
+startup = getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE)
+testing = getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE)
+troubleshooting = getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE)
+userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTendonAnchorTypeEnum = enum_namespace()
+coupler = getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE)
+fixed_end = getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE)
+tensioning_end = getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE)
+userdefined = getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTendonConduitTypeEnum = enum_namespace()
+coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE)
+diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE)
+duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE)
+grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE)
+trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE)
+userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTendonTypeEnum = enum_namespace()
+bar = getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE)
+coated = getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE)
+strand = getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE)
+wire = getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE)
+userdefined = getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTextPath = enum_namespace()
+down = getattr(IfcTextPath, 'DOWN', INDETERMINATE)
+left = getattr(IfcTextPath, 'LEFT', INDETERMINATE)
+right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE)
+up = getattr(IfcTextPath, 'UP', INDETERMINATE)
+IfcTimeSeriesDataTypeEnum = enum_namespace()
+continuous = getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE)
+discrete = getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE)
+discretebinary = getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE)
+piecewisebinary = getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE)
+piecewiseconstant = getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE)
+piecewisecontinuous = getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE)
+notdefined = getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTrackElementTypeEnum = enum_namespace()
+blockingdevice = getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE)
+derailer = getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE)
+frog = getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE)
+half_set_of_blades = getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE)
+sleeper = getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE)
+speedregulator = getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE)
+trackendofalignment = getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE)
+vehiclestop = getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE)
+userdefined = getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTransformerTypeEnum = enum_namespace()
+chopper = getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE)
+combined = getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE)
+current = getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE)
+frequency = getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE)
+inverter = getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE)
+rectifier = getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE)
+voltage = getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE)
+userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTransitionCode = enum_namespace()
+continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE)
+contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE)
+contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE)
+discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE)
+IfcTransportElementTypeEnum = enum_namespace()
+craneway = getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE)
+elevator = getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE)
+escalator = getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE)
+haulinggear = getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE)
+liftinggear = getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE)
+movingwalkway = getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE)
+userdefined = getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcTrimmingPreference = enum_namespace()
+cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE)
+parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE)
+unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE)
+IfcTubeBundleTypeEnum = enum_namespace()
+finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE)
+userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcUnitEnum = enum_namespace()
+absorbeddoseunit = getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE)
+amountofsubstanceunit = getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE)
+areaunit = getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)
+doseequivalentunit = getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE)
+electriccapacitanceunit = getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE)
+electricchargeunit = getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE)
+electricconductanceunit = getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE)
+electriccurrentunit = getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE)
+electricresistanceunit = getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE)
+electricvoltageunit = getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE)
+energyunit = getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE)
+forceunit = getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE)
+frequencyunit = getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE)
+illuminanceunit = getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE)
+inductanceunit = getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE)
+lengthunit = getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)
+luminousfluxunit = getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE)
+luminousintensityunit = getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE)
+magneticfluxdensityunit = getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE)
+magneticfluxunit = getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE)
+massunit = getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)
+planeangleunit = getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE)
+powerunit = getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE)
+pressureunit = getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE)
+radioactivityunit = getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE)
+solidangleunit = getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE)
+thermodynamictemperatureunit = getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE)
+timeunit = getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)
+volumeunit = getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)
+userdefined = getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)
+IfcUnitaryControlElementTypeEnum = enum_namespace()
+alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE)
+basestationcontroller = getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE)
+combined = getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE)
+controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE)
+gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE)
+humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE)
+indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE)
+mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE)
+thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE)
+weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE)
+userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcUnitaryEquipmentTypeEnum = enum_namespace()
+airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE)
+airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE)
+dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE)
+rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE)
+splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE)
+userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcValveTypeEnum = enum_namespace()
+airrelease = getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE)
+antivacuum = getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE)
+changeover = getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE)
+check = getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE)
+commissioning = getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE)
+diverting = getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE)
+doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE)
+doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE)
+drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE)
+faucet = getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE)
+flushing = getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE)
+gascock = getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE)
+gastap = getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE)
+isolating = getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE)
+mixing = getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE)
+pressurereducing = getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE)
+pressurerelief = getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE)
+regulating = getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE)
+safetycutoff = getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE)
+steamtrap = getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE)
+stopcock = getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE)
+userdefined = getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcVehicleTypeEnum = enum_namespace()
+cargo = getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE)
+rollingstock = getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE)
+vehicle = getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE)
+vehicleair = getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE)
+vehiclemarine = getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE)
+vehicletracked = getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE)
+vehiclewheeled = getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE)
+userdefined = getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcVehicleTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcVibrationDamperTypeEnum = enum_namespace()
+axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE)
+bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE)
+friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE)
+rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE)
+shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE)
+viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE)
+userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcVibrationIsolatorTypeEnum = enum_namespace()
+base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE)
+compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE)
+spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE)
+userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcVirtualElementTypeEnum = enum_namespace()
+boundary = getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE)
+clearance = getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE)
+provisionforvoid = getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE)
+userdefined = getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcVirtualElementTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcVoidingFeatureTypeEnum = enum_namespace()
+chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE)
+cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE)
+edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE)
+hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE)
+miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE)
+notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE)
+userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWallTypeEnum = enum_namespace()
+elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE)
+movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE)
+parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE)
+partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE)
+plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE)
+polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE)
+retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE)
+shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE)
+solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE)
+standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE)
+wavewall = getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE)
+userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWasteTerminalTypeEnum = enum_namespace()
+floortrap = getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE)
+floorwaste = getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE)
+gullysump = getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE)
+gullytrap = getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE)
+roofdrain = getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE)
+wastedisposalunit = getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE)
+wastetrap = getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE)
+userdefined = getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWindowPanelOperationEnum = enum_namespace()
+bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE)
+fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE)
+otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE)
+pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE)
+pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE)
+removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE)
+sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE)
+sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE)
+slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE)
+slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE)
+tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE)
+tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE)
+tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE)
+notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWindowPanelPositionEnum = enum_namespace()
+bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE)
+left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE)
+middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE)
+right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE)
+top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE)
+notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWindowTypeEnum = enum_namespace()
+lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE)
+skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE)
+window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE)
+userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWindowTypePartitioningEnum = enum_namespace()
+double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE)
+double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE)
+single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE)
+triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE)
+triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE)
+triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE)
+triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE)
+triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE)
+triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE)
+userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWorkCalendarTypeEnum = enum_namespace()
+firstshift = getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE)
+secondshift = getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE)
+thirdshift = getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE)
+userdefined = getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWorkPlanTypeEnum = enum_namespace()
+actual = getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE)
+baseline = getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE)
+planned = getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE)
+userdefined = getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE)
+IfcWorkScheduleTypeEnum = enum_namespace()
+actual = getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE)
+baseline = getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE)
+planned = getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE)
+userdefined = getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE)
+notdefined = getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE)
+
+def IfcActionRequest(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcActor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcActor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcActorRole(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcActorRole', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcActuator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcActuator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcActuatorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcActuatorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAddress(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAddress', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAdvancedBrep(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAdvancedBrep', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAdvancedBrepWithVoids(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAdvancedBrepWithVoids', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAdvancedFace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAdvancedFace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirTerminalBox(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirTerminalBox', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirTerminalBoxType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirTerminalBoxType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirToAirHeatRecovery(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirToAirHeatRecovery', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAirToAirHeatRecoveryType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAirToAirHeatRecoveryType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlarm(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlarm', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlarmType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlarmType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentCant(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentCant', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentCantSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentCantSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentHorizontal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentHorizontal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentHorizontalSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentHorizontalSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentParameterSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentParameterSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentVertical(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentVertical', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAlignmentVerticalSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAlignmentVerticalSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAnnotation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAnnotation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAnnotationFillArea(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAnnotationFillArea', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcApplication(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcApplication', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAppliedValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAppliedValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcApproval(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcApproval', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcApprovalRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcApprovalRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcArbitraryClosedProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcArbitraryClosedProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcArbitraryOpenProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcArbitraryOpenProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcArbitraryProfileDefWithVoids(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcArbitraryProfileDefWithVoids', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAsset(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAsset', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAsymmetricIShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAsymmetricIShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAudioVisualAppliance(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAudioVisualAppliance', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAudioVisualApplianceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAudioVisualApplianceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAxis1Placement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAxis1Placement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAxis2Placement2D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAxis2Placement2D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAxis2Placement3D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAxis2Placement3D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcAxis2PlacementLinear(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcAxis2PlacementLinear', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBSplineCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBSplineCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBSplineCurveWithKnots(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBSplineCurveWithKnots', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBSplineSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBSplineSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBSplineSurfaceWithKnots(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBSplineSurfaceWithKnots', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBeam(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBeam', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBeamType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBeamType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBearing(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBearing', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBearingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBearingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBlobTexture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBlobTexture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBlock(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBlock', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoiler(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoiler', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoilerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoilerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBooleanClippingResult(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBooleanClippingResult', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBooleanResult(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBooleanResult', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBorehole(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBorehole', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryEdgeCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryEdgeCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryFaceCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryFaceCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryNodeCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryNodeCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundaryNodeConditionWarping(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundaryNodeConditionWarping', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundedCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundedCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundedSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundedSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoundingBox(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoundingBox', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBoxedHalfSpace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBoxedHalfSpace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBridge(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBridge', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBridgePart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBridgePart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuilding(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuilding', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingElementPart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingElementPart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingElementPartType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingElementPartType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingElementProxy(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingElementProxy', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingElementProxyType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingElementProxyType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingStorey(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingStorey', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuildingSystem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuildingSystem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuiltElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuiltElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuiltElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuiltElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBuiltSystem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBuiltSystem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBurner(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBurner', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcBurnerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcBurnerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableCarrierFitting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableCarrierFitting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableCarrierFittingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableCarrierFittingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableCarrierSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableCarrierSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableCarrierSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableCarrierSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableFitting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableFitting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableFittingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableFittingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCableSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCableSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCaissonFoundation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCaissonFoundation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCaissonFoundationType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCaissonFoundationType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianPoint(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianPoint', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianPointList(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianPointList', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianPointList2D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianPointList2D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianPointList3D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianPointList3D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianTransformationOperator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianTransformationOperator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianTransformationOperator2D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianTransformationOperator2D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianTransformationOperator2DnonUniform(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianTransformationOperator2DnonUniform', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianTransformationOperator3D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianTransformationOperator3D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCartesianTransformationOperator3DnonUniform(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCartesianTransformationOperator3DnonUniform', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCenterLineProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCenterLineProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcChiller(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcChiller', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcChillerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcChillerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcChimney(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcChimney', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcChimneyType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcChimneyType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCircle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCircle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCircleHollowProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCircleHollowProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCircleProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCircleProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCivilElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCivilElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCivilElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCivilElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcClassification(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcClassification', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcClassificationReference(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcClassificationReference', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcClosedShell(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcClosedShell', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcClothoid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcClothoid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoil(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoil', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoilType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoilType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcColourRgb(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcColourRgb', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcColourRgbList(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcColourRgbList', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcColourSpecification(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcColourSpecification', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcColumn(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcColumn', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcColumnType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcColumnType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCommunicationsAppliance(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCommunicationsAppliance', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCommunicationsApplianceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCommunicationsApplianceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcComplexProperty(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcComplexProperty', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcComplexPropertyTemplate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcComplexPropertyTemplate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompositeCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompositeCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompositeCurveOnSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompositeCurveOnSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompositeCurveSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompositeCurveSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompositeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompositeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompressor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompressor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCompressorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCompressorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCondenser(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCondenser', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCondenserType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCondenserType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConic(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConic', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectedFaceSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectedFaceSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionCurveGeometry(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionCurveGeometry', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionGeometry(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionGeometry', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionPointEccentricity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionPointEccentricity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionPointGeometry(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionPointGeometry', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionSurfaceGeometry(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionSurfaceGeometry', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConnectionVolumeGeometry(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConnectionVolumeGeometry', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstraint(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstraint', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionEquipmentResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionEquipmentResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionEquipmentResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionEquipmentResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionMaterialResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionMaterialResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionMaterialResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionMaterialResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionProductResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionProductResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionProductResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionProductResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConstructionResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConstructionResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcContext(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcContext', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcContextDependentUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcContextDependentUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcControl(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcControl', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcController(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcController', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcControllerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcControllerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConversionBasedUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConversionBasedUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConversionBasedUnitWithOffset(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConversionBasedUnitWithOffset', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConveyorSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConveyorSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcConveyorSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcConveyorSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCooledBeam(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCooledBeam', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCooledBeamType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCooledBeamType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoolingTower(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoolingTower', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoolingTowerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoolingTowerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoordinateOperation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoordinateOperation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoordinateReferenceSystem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoordinateReferenceSystem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCosineSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCosineSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCostItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCostItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCostSchedule(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCostSchedule', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCostValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCostValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCourse(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCourse', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCourseType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCourseType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCovering(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCovering', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCoveringType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCoveringType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCrewResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCrewResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCrewResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCrewResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCsgPrimitive3D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCsgPrimitive3D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCsgSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCsgSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurrencyRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurrencyRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurtainWall(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurtainWall', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurtainWallType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurtainWallType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveBoundedPlane(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveBoundedPlane', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveBoundedSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveBoundedSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveStyleFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveStyleFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveStyleFontAndScaling(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveStyleFontAndScaling', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCurveStyleFontPattern(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCurveStyleFontPattern', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcCylindricalSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcCylindricalSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDamper(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDamper', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDamperType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDamperType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDeepFoundation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDeepFoundation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDeepFoundationType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDeepFoundationType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDerivedProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDerivedProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDerivedUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDerivedUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDerivedUnitElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDerivedUnitElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDimensionalExponents(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDimensionalExponents', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDirection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDirection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDirectrixCurveSweptAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDirectrixCurveSweptAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDirectrixDerivedReferenceSweptAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDirectrixDerivedReferenceSweptAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDiscreteAccessory(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDiscreteAccessory', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDiscreteAccessoryType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDiscreteAccessoryType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionBoard(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionBoard', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionBoardType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionBoardType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionChamberElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionChamberElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionChamberElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionChamberElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionCircuit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionCircuit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionControlElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionControlElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionControlElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionControlElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionFlowElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionFlowElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionFlowElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionFlowElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionPort(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionPort', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDistributionSystem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDistributionSystem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDocumentInformation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDocumentInformation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDocumentInformationRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDocumentInformationRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDocumentReference(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDocumentReference', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDoor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDoor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDoorLiningProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDoorLiningProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDoorPanelProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDoorPanelProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDoorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDoorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDraughtingPreDefinedColour(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDraughtingPreDefinedColour', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDraughtingPreDefinedCurveFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDraughtingPreDefinedCurveFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctFitting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctFitting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctFittingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctFittingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctSilencer(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctSilencer', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcDuctSilencerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcDuctSilencerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEarthworksCut(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEarthworksCut', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEarthworksElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEarthworksElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEarthworksFill(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEarthworksFill', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEdge(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEdge', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEdgeCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEdgeCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEdgeLoop(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEdgeLoop', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricAppliance(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricAppliance', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricApplianceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricApplianceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricDistributionBoard(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricDistributionBoard', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricDistributionBoardType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricDistributionBoardType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricFlowStorageDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricFlowStorageDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricFlowStorageDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricFlowStorageDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricFlowTreatmentDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricFlowTreatmentDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricFlowTreatmentDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricFlowTreatmentDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricGenerator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricGenerator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricGeneratorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricGeneratorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricMotor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricMotor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricMotorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricMotorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricTimeControl(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricTimeControl', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElectricTimeControlType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElectricTimeControlType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementAssembly(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementAssembly', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementAssemblyType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementAssemblyType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementComponent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementComponent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementComponentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementComponentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementQuantity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementQuantity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcElementarySurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcElementarySurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEllipse(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEllipse', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEllipseProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEllipseProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEnergyConversionDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEnergyConversionDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEnergyConversionDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEnergyConversionDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEngine(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEngine', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEngineType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEngineType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEvaporativeCooler(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEvaporativeCooler', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEvaporativeCoolerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEvaporativeCoolerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEvaporator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEvaporator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEvaporatorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEvaporatorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEvent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEvent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEventTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEventTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcEventType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcEventType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExtendedProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExtendedProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternalInformation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternalInformation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternalReference(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternalReference', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternalReferenceRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternalReferenceRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternalSpatialElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternalSpatialElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternalSpatialStructureElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternalSpatialStructureElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternallyDefinedHatchStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternallyDefinedHatchStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternallyDefinedSurfaceStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternallyDefinedSurfaceStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExternallyDefinedTextFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExternallyDefinedTextFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExtrudedAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExtrudedAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcExtrudedAreaSolidTapered(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcExtrudedAreaSolidTapered', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFaceBasedSurfaceModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFaceBasedSurfaceModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFaceBound(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFaceBound', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFaceOuterBound(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFaceOuterBound', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFaceSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFaceSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFacetedBrep(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFacetedBrep', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFacetedBrepWithVoids(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFacetedBrepWithVoids', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFacility(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFacility', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFacilityPart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFacilityPart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFacilityPartCommon(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFacilityPartCommon', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFailureConnectionCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFailureConnectionCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFan(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFan', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFanType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFanType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFastener(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFastener', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFastenerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFastenerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFeatureElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFeatureElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFeatureElementAddition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFeatureElementAddition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFeatureElementSubtraction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFeatureElementSubtraction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFillAreaStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFillAreaStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFillAreaStyleHatching(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFillAreaStyleHatching', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFillAreaStyleTiles(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFillAreaStyleTiles', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFilter(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFilter', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFilterType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFilterType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFireSuppressionTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFireSuppressionTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFireSuppressionTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFireSuppressionTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFixedReferenceSweptAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFixedReferenceSweptAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowController(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowController', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowControllerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowControllerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowFitting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowFitting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowFittingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowFittingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowInstrument(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowInstrument', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowInstrumentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowInstrumentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowMeter(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowMeter', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowMeterType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowMeterType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowMovingDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowMovingDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowMovingDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowMovingDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowStorageDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowStorageDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowStorageDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowStorageDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowTreatmentDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowTreatmentDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFlowTreatmentDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFlowTreatmentDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFooting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFooting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFootingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFootingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFurnishingElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFurnishingElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFurnishingElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFurnishingElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFurniture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFurniture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcFurnitureType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcFurnitureType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeographicCRS(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeographicCRS', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeographicElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeographicElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeographicElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeographicElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeometricCurveSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeometricCurveSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeometricRepresentationContext(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeometricRepresentationContext', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeometricRepresentationItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeometricRepresentationItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeometricRepresentationSubContext(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeometricRepresentationSubContext', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeometricSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeometricSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeomodel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeomodel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeoslice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeoslice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeotechnicalAssembly(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeotechnicalAssembly', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeotechnicalElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeotechnicalElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGeotechnicalStratum(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGeotechnicalStratum', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGradientCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGradientCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGrid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGrid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGridAxis(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGridAxis', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGridPlacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGridPlacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcGroup(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcGroup', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcHalfSpaceSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcHalfSpaceSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcHeatExchanger(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcHeatExchanger', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcHeatExchangerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcHeatExchangerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcHumidifier(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcHumidifier', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcHumidifierType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcHumidifierType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcImageTexture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcImageTexture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcImpactProtectionDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcImpactProtectionDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcImpactProtectionDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcImpactProtectionDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedColourMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedColourMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedPolyCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedPolyCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedPolygonalFace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedPolygonalFace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedPolygonalFaceWithVoids(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedPolygonalFaceWithVoids', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedPolygonalTextureMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedPolygonalTextureMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedTextureMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedTextureMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIndexedTriangleTextureMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIndexedTriangleTextureMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcInterceptor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcInterceptor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcInterceptorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcInterceptorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIntersectionCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIntersectionCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcInventory(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcInventory', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIrregularTimeSeries(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIrregularTimeSeries', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcIrregularTimeSeriesValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcIrregularTimeSeriesValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcJunctionBox(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcJunctionBox', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcJunctionBoxType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcJunctionBoxType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcKerb(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcKerb', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcKerbType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcKerbType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLaborResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLaborResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLaborResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLaborResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLagTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLagTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLamp(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLamp', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLampType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLampType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLibraryInformation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLibraryInformation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLibraryReference(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLibraryReference', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightDistributionData(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightDistributionData', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightFixture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightFixture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightFixtureType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightFixtureType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightIntensityDistribution(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightIntensityDistribution', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSourceAmbient(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSourceAmbient', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSourceDirectional(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSourceDirectional', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSourceGoniometric(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSourceGoniometric', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSourcePositional(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSourcePositional', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLightSourceSpot(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLightSourceSpot', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLine(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLine', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLinearElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLinearElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLinearPlacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLinearPlacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLinearPositioningElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLinearPositioningElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLiquidTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLiquidTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLiquidTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLiquidTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLocalPlacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLocalPlacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcLoop(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcLoop', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcManifoldSolidBrep(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcManifoldSolidBrep', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMapConversion(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMapConversion', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMapConversionScaled(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMapConversionScaled', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMappedItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMappedItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMarineFacility(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMarineFacility', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMarinePart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMarinePart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterial(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterial', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialClassificationRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialClassificationRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialConstituent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialConstituent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialConstituentSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialConstituentSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialDefinitionRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialDefinitionRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialLayer(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialLayer', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialLayerSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialLayerSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialLayerSetUsage(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialLayerSetUsage', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialLayerWithOffsets(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialLayerWithOffsets', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialList(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialList', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProfile(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProfile', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProfileSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProfileSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProfileSetUsage(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProfileSetUsage', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProfileSetUsageTapering(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProfileSetUsageTapering', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProfileWithOffsets(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProfileWithOffsets', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMaterialUsageDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMaterialUsageDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMeasureWithUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMeasureWithUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMechanicalFastener(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMechanicalFastener', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMechanicalFastenerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMechanicalFastenerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMedicalDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMedicalDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMedicalDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMedicalDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMember(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMember', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMemberType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMemberType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMetric(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMetric', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMirroredProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMirroredProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMobileTelecommunicationsAppliance(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMobileTelecommunicationsAppliance', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMobileTelecommunicationsApplianceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMobileTelecommunicationsApplianceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMonetaryUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMonetaryUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMooringDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMooringDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMooringDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMooringDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMotorConnection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMotorConnection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcMotorConnectionType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcMotorConnectionType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcNamedUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcNamedUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcNavigationElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcNavigationElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcNavigationElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcNavigationElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcObject(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcObject', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcObjectDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcObjectDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcObjectPlacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcObjectPlacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcObjective(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcObjective', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOccupant(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOccupant', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOffsetCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOffsetCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOffsetCurve2D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOffsetCurve2D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOffsetCurve3D(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOffsetCurve3D', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOffsetCurveByDistances(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOffsetCurveByDistances', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOpenCrossProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOpenCrossProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOpenShell(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOpenShell', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOpeningElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOpeningElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOrganization(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOrganization', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOrganizationRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOrganizationRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOrientedEdge(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOrientedEdge', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOuterBoundaryCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOuterBoundaryCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOutlet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOutlet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOutletType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOutletType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcOwnerHistory(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcOwnerHistory', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcParameterizedProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcParameterizedProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPath(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPath', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPavement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPavement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPavementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPavementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPcurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPcurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPerformanceHistory(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPerformanceHistory', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPermeableCoveringProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPermeableCoveringProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPermit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPermit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPerson(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPerson', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPersonAndOrganization(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPersonAndOrganization', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPhysicalComplexQuantity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPhysicalComplexQuantity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPhysicalQuantity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPhysicalQuantity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPhysicalSimpleQuantity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPhysicalSimpleQuantity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPile(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPile', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPileType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPileType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPipeFitting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPipeFitting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPipeFittingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPipeFittingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPipeSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPipeSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPipeSegmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPipeSegmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPixelTexture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPixelTexture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlanarBox(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlanarBox', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlanarExtent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlanarExtent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlane(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlane', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPlateType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPlateType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPoint(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPoint', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPointByDistanceExpression(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPointByDistanceExpression', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPointOnCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPointOnCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPointOnSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPointOnSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPolyLoop(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPolyLoop', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPolygonalBoundedHalfSpace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPolygonalBoundedHalfSpace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPolygonalFaceSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPolygonalFaceSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPolyline(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPolyline', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPolynomialCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPolynomialCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPort(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPort', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPositioningElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPositioningElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPostalAddress(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPostalAddress', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedColour(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedColour', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedCurveFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedCurveFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedPropertySet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedPropertySet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPreDefinedTextFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPreDefinedTextFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPresentationItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPresentationItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPresentationLayerAssignment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPresentationLayerAssignment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPresentationLayerWithStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPresentationLayerWithStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPresentationStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPresentationStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProcedure(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProcedure', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProcedureType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProcedureType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProcess(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProcess', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProduct(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProduct', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProductDefinitionShape(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProductDefinitionShape', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProductRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProductRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProfileProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProfileProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProject(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProject', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProjectLibrary(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProjectLibrary', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProjectOrder(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProjectOrder', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProjectedCRS(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProjectedCRS', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProjectionElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProjectionElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProperty(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProperty', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyAbstraction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyAbstraction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyBoundedValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyBoundedValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyDependencyRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyDependencyRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyEnumeratedValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyEnumeratedValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyEnumeration(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyEnumeration', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyListValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyListValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyReferenceValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyReferenceValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertySet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertySet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertySetDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertySetDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertySetTemplate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertySetTemplate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertySingleValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertySingleValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyTableValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyTableValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyTemplate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyTemplate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPropertyTemplateDefinition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPropertyTemplateDefinition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProtectiveDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProtectiveDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProtectiveDeviceTrippingUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProtectiveDeviceTrippingUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProtectiveDeviceTrippingUnitType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProtectiveDeviceTrippingUnitType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcProtectiveDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcProtectiveDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPump(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPump', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcPumpType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcPumpType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityArea(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityArea', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityCount(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityCount', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityLength(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityLength', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityNumber(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityNumber', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantitySet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantitySet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityVolume(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityVolume', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcQuantityWeight(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcQuantityWeight', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRail(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRail', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRailType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRailType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRailing(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRailing', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRailingType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRailingType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRailway(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRailway', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRailwayPart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRailwayPart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRamp(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRamp', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRampFlight(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRampFlight', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRampFlightType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRampFlightType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRampType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRampType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRationalBSplineCurveWithKnots(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRationalBSplineCurveWithKnots', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRationalBSplineSurfaceWithKnots(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRationalBSplineSurfaceWithKnots', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRectangleHollowProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRectangleHollowProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRectangleProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRectangleProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRectangularPyramid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRectangularPyramid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRectangularTrimmedSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRectangularTrimmedSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRecurrencePattern(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRecurrencePattern', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReference(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReference', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReferent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReferent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRegularTimeSeries(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRegularTimeSeries', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcedSoil(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcedSoil', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcementBarProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcementBarProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcementDefinitionProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcementDefinitionProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingBar(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingBar', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingBarType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingBarType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingMesh(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingMesh', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReinforcingMeshType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReinforcingMeshType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAdheresToElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAdheresToElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAggregates(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAggregates', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssigns(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssigns', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToActor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToActor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToControl(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToControl', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToGroup(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToGroup', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToGroupByFactor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToGroupByFactor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToProcess(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToProcess', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToProduct(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToProduct', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssignsToResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssignsToResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociates(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociates', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesApproval(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesApproval', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesClassification(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesClassification', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesConstraint(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesConstraint', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesDocument(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesDocument', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesLibrary(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesLibrary', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesMaterial(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesMaterial', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelAssociatesProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelAssociatesProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnects(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnects', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsPathElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsPathElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsPortToElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsPortToElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsPorts(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsPorts', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsStructuralActivity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsStructuralActivity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsStructuralMember(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsStructuralMember', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsWithEccentricity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsWithEccentricity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelConnectsWithRealizingElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelConnectsWithRealizingElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelContainedInSpatialStructure(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelContainedInSpatialStructure', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelCoversBldgElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelCoversBldgElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelCoversSpaces(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelCoversSpaces', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDeclares(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDeclares', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDecomposes(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDecomposes', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDefines(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDefines', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDefinesByObject(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDefinesByObject', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDefinesByProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDefinesByProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDefinesByTemplate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDefinesByTemplate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelDefinesByType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelDefinesByType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelFillsElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelFillsElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelFlowControlElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelFlowControlElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelInterferesElements(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelInterferesElements', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelNests(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelNests', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelPositions(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelPositions', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelProjectsElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelProjectsElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelReferencedInSpatialStructure(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelReferencedInSpatialStructure', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelSequence(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelSequence', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelServicesBuildings(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelServicesBuildings', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelSpaceBoundary(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelSpaceBoundary', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelSpaceBoundary1stLevel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelSpaceBoundary1stLevel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelSpaceBoundary2ndLevel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelSpaceBoundary2ndLevel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelVoidsElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelVoidsElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcReparametrisedCompositeCurveSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcReparametrisedCompositeCurveSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRepresentationContext(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRepresentationContext', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRepresentationItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRepresentationItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRepresentationMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRepresentationMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcResourceApprovalRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcResourceApprovalRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcResourceConstraintRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcResourceConstraintRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcResourceLevelRelationship(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcResourceLevelRelationship', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcResourceTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcResourceTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRevolvedAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRevolvedAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRevolvedAreaSolidTapered(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRevolvedAreaSolidTapered', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRightCircularCone(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRightCircularCone', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRightCircularCylinder(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRightCircularCylinder', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRigidOperation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRigidOperation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoad(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoad', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoadPart(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoadPart', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoof(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoof', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoofType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoofType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoot(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoot', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcRoundedRectangleProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcRoundedRectangleProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSIUnit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSIUnit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSanitaryTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSanitaryTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSanitaryTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSanitaryTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSchedulingTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSchedulingTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSeamCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSeamCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSecondOrderPolynomialSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSecondOrderPolynomialSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionReinforcementProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionReinforcementProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionedSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionedSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionedSolidHorizontal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionedSolidHorizontal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionedSpine(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionedSpine', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSectionedSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSectionedSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSegment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSegment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSegmentedReferenceCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSegmentedReferenceCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSensor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSensor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSensorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSensorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSeventhOrderPolynomialSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSeventhOrderPolynomialSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShadingDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShadingDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShadingDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShadingDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShapeAspect(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShapeAspect', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShapeModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShapeModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShapeRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShapeRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcShellBasedSurfaceModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcShellBasedSurfaceModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSign(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSign', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSignType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSignType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSignal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSignal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSignalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSignalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSimpleProperty(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSimpleProperty', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSimplePropertyTemplate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSimplePropertyTemplate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSineSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSineSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSite(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSite', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSlab(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSlab', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSlabType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSlabType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSlippageConnectionCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSlippageConnectionCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSolarDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSolarDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSolarDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSolarDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSolidModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSolidModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpace(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpace', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpaceHeater(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpaceHeater', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpaceHeaterType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpaceHeaterType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpaceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpaceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialStructureElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialStructureElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialStructureElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialStructureElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialZone(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialZone', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpatialZoneType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpatialZoneType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSphere(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSphere', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSphericalSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSphericalSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStackTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStackTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStackTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStackTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStair(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStair', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStairFlight(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStairFlight', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStairFlightType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStairFlightType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStairType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStairType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralActivity(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralActivity', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralAnalysisModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralAnalysisModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralConnection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralConnection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralConnectionCondition(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralConnectionCondition', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralCurveAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralCurveAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralCurveConnection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralCurveConnection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralCurveMember(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralCurveMember', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralCurveMemberVarying(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralCurveMemberVarying', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralCurveReaction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralCurveReaction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLinearAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLinearAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoad(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoad', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadCase(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadCase', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadConfiguration(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadConfiguration', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadGroup(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadGroup', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadLinearForce(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadLinearForce', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadOrResult(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadOrResult', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadPlanarForce(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadPlanarForce', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadSingleDisplacement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadSingleDisplacement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadSingleDisplacementDistortion(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadSingleDisplacementDistortion', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadSingleForce(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadSingleForce', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadSingleForceWarping(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadSingleForceWarping', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadStatic(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadStatic', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralLoadTemperature(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralLoadTemperature', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralMember(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralMember', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralPlanarAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralPlanarAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralPointAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralPointAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralPointConnection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralPointConnection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralPointReaction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralPointReaction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralReaction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralReaction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralResultGroup(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralResultGroup', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralSurfaceAction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralSurfaceAction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralSurfaceConnection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralSurfaceConnection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralSurfaceMember(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralSurfaceMember', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralSurfaceMemberVarying(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralSurfaceMemberVarying', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStructuralSurfaceReaction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStructuralSurfaceReaction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStyleModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStyleModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStyledItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStyledItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcStyledRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcStyledRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSubContractResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSubContractResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSubContractResourceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSubContractResourceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSubedge(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSubedge', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceCurveSweptAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceCurveSweptAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceFeature(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceFeature', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceOfLinearExtrusion(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceOfLinearExtrusion', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceOfRevolution(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceOfRevolution', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceReinforcementArea(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceReinforcementArea', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyleLighting(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyleLighting', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyleRefraction(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyleRefraction', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyleRendering(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyleRendering', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyleShading(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyleShading', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceStyleWithTextures(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceStyleWithTextures', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSurfaceTexture(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSurfaceTexture', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSweptAreaSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSweptAreaSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSweptDiskSolid(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSweptDiskSolid', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSweptDiskSolidPolygonal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSweptDiskSolidPolygonal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSweptSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSweptSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSwitchingDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSwitchingDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSwitchingDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSwitchingDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSystem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSystem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSystemFurnitureElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSystemFurnitureElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcSystemFurnitureElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcSystemFurnitureElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTable(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTable', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTableColumn(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTableColumn', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTableRow(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTableRow', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTank(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTank', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTankType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTankType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTask(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTask', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTaskTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTaskTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTaskTimeRecurring(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTaskTimeRecurring', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTaskType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTaskType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTelecomAddress(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTelecomAddress', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendon(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendon', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendonAnchor(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendonAnchor', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendonAnchorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendonAnchorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendonConduit(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendonConduit', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendonConduitType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendonConduitType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTendonType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTendonType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTessellatedFaceSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTessellatedFaceSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTessellatedItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTessellatedItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextLiteral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextLiteral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextLiteralWithExtent(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextLiteralWithExtent', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextStyle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextStyle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextStyleFontModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextStyleFontModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextStyleForDefinedFont(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextStyleForDefinedFont', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextStyleTextModel(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextStyleTextModel', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureCoordinate(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureCoordinate', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureCoordinateGenerator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureCoordinateGenerator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureCoordinateIndices(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureCoordinateIndices', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureCoordinateIndicesWithVoids(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureCoordinateIndicesWithVoids', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureMap(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureMap', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureVertex(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureVertex', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTextureVertexList(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTextureVertexList', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcThirdOrderPolynomialSpiral(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcThirdOrderPolynomialSpiral', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTimePeriod(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTimePeriod', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTimeSeries(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTimeSeries', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTimeSeriesValue(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTimeSeriesValue', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTopologicalRepresentationItem(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTopologicalRepresentationItem', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTopologyRepresentation(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTopologyRepresentation', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcToroidalSurface(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcToroidalSurface', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTrackElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTrackElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTrackElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTrackElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransformer(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransformer', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransformerType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransformerType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransportElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransportElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransportElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransportElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransportationDevice(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransportationDevice', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTransportationDeviceType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTransportationDeviceType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTrapeziumProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTrapeziumProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTriangulatedFaceSet(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTriangulatedFaceSet', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTriangulatedIrregularNetwork(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTriangulatedIrregularNetwork', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTrimmedCurve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTrimmedCurve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTubeBundle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTubeBundle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTubeBundleType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTubeBundleType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTypeObject(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTypeObject', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTypeProcess(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTypeProcess', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTypeProduct(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTypeProduct', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcTypeResource(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcTypeResource', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUnitAssignment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUnitAssignment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUnitaryControlElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUnitaryControlElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUnitaryControlElementType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUnitaryControlElementType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUnitaryEquipment(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUnitaryEquipment', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcUnitaryEquipmentType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcUnitaryEquipmentType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcValve(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcValve', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcValveType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcValveType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVector(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVector', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVehicle(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVehicle', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVehicleType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVehicleType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVertex(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVertex', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVertexLoop(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVertexLoop', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVertexPoint(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVertexPoint', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVibrationDamper(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVibrationDamper', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVibrationDamperType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVibrationDamperType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVibrationIsolator(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVibrationIsolator', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVibrationIsolatorType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVibrationIsolatorType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVirtualElement(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVirtualElement', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVirtualGridIntersection(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVirtualGridIntersection', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcVoidingFeature(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcVoidingFeature', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWall(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWall', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWallStandardCase(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWallStandardCase', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWallType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWallType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWasteTerminal(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWasteTerminal', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWasteTerminalType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWasteTerminalType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWellKnownText(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWellKnownText', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWindow(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWindow', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWindowLiningProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWindowLiningProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWindowPanelProperties(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWindowPanelProperties', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWindowType(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWindowType', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWorkCalendar(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWorkCalendar', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWorkControl(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWorkControl', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWorkPlan(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWorkPlan', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWorkSchedule(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWorkSchedule', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcWorkTime(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcWorkTime', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcZShapeProfileDef(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcZShapeProfileDef', 'IFC4X3_ADD2', *args, **kwargs)
+
+def IfcZone(*args, **kwargs):
+ return ifcopenshell.create_entity('IfcZone', 'IFC4X3_ADD2', *args, **kwargs)
+
+class IfcBoxAlignment_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcBoxAlignment'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+
+class IfcCardinalPointReference_GreaterThanZero:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcCardinalPointReference'
+ RULE_NAME = 'GreaterThanZero'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0) is not False
+
+class IfcCompoundPlaneAngleMeasure_MinutesInRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcCompoundPlaneAngleMeasure'
+ RULE_NAME = 'MinutesInRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (abs(express_getitem(self, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) < 60) is not False
+
+class IfcCompoundPlaneAngleMeasure_SecondsInRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcCompoundPlaneAngleMeasure'
+ RULE_NAME = 'SecondsInRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (abs(express_getitem(self, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) < 60) is not False
+
+class IfcCompoundPlaneAngleMeasure_MicrosecondsInRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcCompoundPlaneAngleMeasure'
+ RULE_NAME = 'MicrosecondsInRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(self) == 3 or abs(express_getitem(self, 4 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) < 1000000) is not False
+
+class IfcCompoundPlaneAngleMeasure_ConsistentSign:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcCompoundPlaneAngleMeasure'
+ RULE_NAME = 'ConsistentSign'
+
+ @staticmethod
+ def __call__(self):
+ assert (express_getitem(self, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0 and express_getitem(self, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0 and (express_getitem(self, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0) and (sizeof(self) == 3 or express_getitem(self, 4 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0) or (express_getitem(self, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0 and express_getitem(self, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0 and (express_getitem(self, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0) and (sizeof(self) == 3 or express_getitem(self, 4 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0))) is not False
+
+class IfcDayInMonthNumber_ValidRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcDayInMonthNumber'
+ RULE_NAME = 'ValidRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (1 <= self <= 31) is not False
+
+class IfcDayInWeekNumber_ValidRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcDayInWeekNumber'
+ RULE_NAME = 'ValidRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (1 <= self <= 7) is not False
+
+class IfcDimensionCount_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcDimensionCount'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (0 < self <= 3) is not False
+
+class IfcFontStyle_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcFontStyle'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
+
+class IfcFontVariant_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcFontVariant'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
+
+class IfcFontWeight_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcFontWeight'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+
+class IfcHeatingValueMeasure_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcHeatingValueMeasure'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0.0) is not False
+
+class IfcMonthInYearNumber_ValidRange:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcMonthInYearNumber'
+ RULE_NAME = 'ValidRange'
+
+ @staticmethod
+ def __call__(self):
+ assert (1 <= self <= 12) is not False
+
+class IfcNonNegativeLengthMeasure_NotNegative:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcNonNegativeLengthMeasure'
+ RULE_NAME = 'NotNegative'
+
+ @staticmethod
+ def __call__(self):
+ assert (self >= 0.0) is not False
+
+class IfcNormalisedRatioMeasure_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcNormalisedRatioMeasure'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (0.0 <= self <= 1.0) is not False
+
+class IfcPHMeasure_WR21:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcPHMeasure'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (0.0 <= self <= 14.0) is not False
+
+class IfcPositiveInteger_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcPositiveInteger'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0) is not False
+
+class IfcPositiveLengthMeasure_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcPositiveLengthMeasure'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0.0) is not False
+
+class IfcPositivePlaneAngleMeasure_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcPositivePlaneAngleMeasure'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0.0) is not False
+
+class IfcPositiveRatioMeasure_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcPositiveRatioMeasure'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (self > 0.0) is not False
+
+class IfcSpecularRoughness_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcSpecularRoughness'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (0.0 <= self <= 1.0) is not False
+
+class IfcTextAlignment_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcTextAlignment'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
+
+class IfcTextDecoration_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcTextDecoration'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+
+class IfcTextTransformation_WR1:
+ SCOPE = 'type'
+ TYPE_NAME = 'IfcTextTransformation'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+
+class IfcActorRole_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcActorRole'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ role = getattr(self, 'Role', INDETERMINATE)
+ assert (role != getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False
+
+class IfcActuator_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcActuator'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcActuator_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcActuator'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcActuatorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcActuatorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcAddress_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAddress'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ purpose = getattr(self, 'Purpose', INDETERMINATE)
+ assert (not exists(purpose) or (purpose != getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False
+
+class IfcAdvancedBrep_HasAdvancedFaces:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAdvancedBrep'
+ RULE_NAME = 'HasAdvancedFaces'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add2.ifcadvancedface' in typeof(afs)]) == 0) is not False
+
+class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAdvancedBrepWithVoids'
+ RULE_NAME = 'VoidsHaveAdvancedFaces'
+
+ @staticmethod
+ def __call__(self):
+ voids = getattr(self, 'Voids', INDETERMINATE)
+ assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False
+
+class IfcAdvancedFace_ApplicableEdgeCurves:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAdvancedFace'
+ RULE_NAME = 'ApplicableEdgeCurves'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add2.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_add2.ifcline', 'ifc4x3_add2.ifcconic', 'ifc4x3_add2.ifcpolyline', 'ifc4x3_add2.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False
+
+class IfcAdvancedFace_ApplicableSurface:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAdvancedFace'
+ RULE_NAME = 'ApplicableSurface'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(['ifc4x3_add2.ifcelementarysurface', 'ifc4x3_add2.ifcsweptsurface', 'ifc4x3_add2.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False
+
+class IfcAdvancedFace_RequiresEdgeCurve:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAdvancedFace'
+ RULE_NAME = 'RequiresEdgeCurve'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add2.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_add2.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False
+
+class IfcAirTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcAirTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcAirTerminalBox_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminalBox'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcAirTerminalBox_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminalBox'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcAirTerminalBoxType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminalBoxType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcAirTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcAirToAirHeatRecovery_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirToAirHeatRecovery'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcAirToAirHeatRecovery_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirToAirHeatRecovery'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcAirToAirHeatRecoveryType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAirToAirHeatRecoveryType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcAlarm_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAlarm'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcAlarm_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAlarm'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcAlarmType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAlarmType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcApproval_HasIdentifierOrName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcApproval'
+ RULE_NAME = 'HasIdentifierOrName'
+
+ @staticmethod
+ def __call__(self):
+ identifier = getattr(self, 'Identifier', INDETERMINATE)
+ name = getattr(self, 'Name', INDETERMINATE)
+ assert (exists(identifier) or exists(name)) is not False
+
+class IfcArbitraryClosedProfileDef_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryClosedProfileDef'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ outercurve = getattr(self, 'OuterCurve', INDETERMINATE)
+ assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcArbitraryClosedProfileDef_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryClosedProfileDef'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ outercurve = getattr(self, 'OuterCurve', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcline' in typeof(outercurve)) is not False
+
+class IfcArbitraryClosedProfileDef_WR3:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryClosedProfileDef'
+ RULE_NAME = 'WR3'
+
+ @staticmethod
+ def __call__(self):
+ outercurve = getattr(self, 'OuterCurve', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcoffsetcurve2d' in typeof(outercurve)) is not False
+
+class IfcArbitraryOpenProfileDef_WR11:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryOpenProfileDef'
+ RULE_NAME = 'WR11'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False
+
+class IfcArbitraryOpenProfileDef_WR12:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryOpenProfileDef'
+ RULE_NAME = 'WR12'
+
+ @staticmethod
+ def __call__(self):
+ curve = getattr(self, 'Curve', INDETERMINATE)
+ assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcArbitraryProfileDefWithVoids_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryProfileDefWithVoids'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False
+
+class IfcArbitraryProfileDefWithVoids_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryProfileDefWithVoids'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ innercurves = getattr(self, 'InnerCurves', INDETERMINATE)
+ assert (sizeof([temp for temp in innercurves if getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False
+
+class IfcArbitraryProfileDefWithVoids_WR3:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcArbitraryProfileDefWithVoids'
+ RULE_NAME = 'WR3'
+
+ @staticmethod
+ def __call__(self):
+ innercurves = getattr(self, 'InnerCurves', INDETERMINATE)
+ assert (sizeof([temp for temp in innercurves if 'ifc4x3_add2.ifcline' in typeof(temp)]) == 0) is not False
+
+class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAsymmetricIShapeProfileDef'
+ RULE_NAME = 'ValidBottomFilletRadius'
+
+ @staticmethod
+ def __call__(self):
+ bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE)
+ assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False
+
+class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAsymmetricIShapeProfileDef'
+ RULE_NAME = 'ValidFlangeThickness'
+
+ @staticmethod
+ def __call__(self):
+ overalldepth = getattr(self, 'OverallDepth', INDETERMINATE)
+ bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE)
+ topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE)
+ assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False
+
+class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAsymmetricIShapeProfileDef'
+ RULE_NAME = 'ValidTopFilletRadius'
+
+ @staticmethod
+ def __call__(self):
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE)
+ topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE)
+ assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False
+
+class IfcAsymmetricIShapeProfileDef_ValidWebThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAsymmetricIShapeProfileDef'
+ RULE_NAME = 'ValidWebThickness'
+
+ @staticmethod
+ def __call__(self):
+ bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE)
+ assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False
+
+class IfcAudioVisualAppliance_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAudioVisualAppliance'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcAudioVisualAppliance_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAudioVisualAppliance'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcAudioVisualApplianceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAudioVisualApplianceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcAxis1Placement_AxisIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis1Placement'
+ RULE_NAME = 'AxisIs3D'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcAxis1Placement_LocationIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis1Placement'
+ RULE_NAME = 'LocationIs3D'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcAxis1Placement_LocationIsCP:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis1Placement'
+ RULE_NAME = 'LocationIsCP'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False
+
+def calc_IfcAxis1Placement_Z(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]))
+
+class IfcAxis2Placement2D_LocationIs2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement2D'
+ RULE_NAME = 'LocationIs2D'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcAxis2Placement2D_LocationIsCP:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement2D'
+ RULE_NAME = 'LocationIsCP'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False
+
+class IfcAxis2Placement2D_RefDirIs2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement2D'
+ RULE_NAME = 'RefDirIs2D'
+
+ @staticmethod
+ def __call__(self):
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False
+
+def calc_IfcAxis2Placement2D_P(self):
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ return IfcBuild2Axes(refdirection)
+
+class IfcAxis2Placement3D_AxisAndRefDirProvision:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'AxisAndRefDirProvision'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ assert (not exists(axis) ^ exists(refdirection)) is not False
+
+class IfcAxis2Placement3D_AxisIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'AxisIs3D'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcAxis2Placement3D_AxisToRefDirPosition:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'AxisToRefDirPosition'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ assert (not exists(axis) or not exists(refdirection) or getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False
+
+class IfcAxis2Placement3D_LocationIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'LocationIs3D'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcAxis2Placement3D_LocationIsCP:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'LocationIsCP'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False
+
+class IfcAxis2Placement3D_RefDirIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2Placement3D'
+ RULE_NAME = 'RefDirIs3D'
+
+ @staticmethod
+ def __call__(self):
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False
+
+def calc_IfcAxis2Placement3D_P(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ return IfcBuildAxes(axis, refdirection)
+
+class IfcAxis2PlacementLinear_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2PlacementLinear'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False
+
+class IfcAxis2PlacementLinear_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcAxis2PlacementLinear'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ refdirection = getattr(self, 'RefDirection', INDETERMINATE)
+ assert (not exists(axis) or not exists(refdirection) or getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False
+
+class IfcBSplineCurve_SameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineCurve'
+ RULE_NAME = 'SameDim'
+
+ @staticmethod
+ def __call__(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ assert (sizeof([temp for temp in controlpointslist if getattr(temp, 'Dim', INDETERMINATE) != getattr(express_getitem(controlpointslist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False
+
+def calc_IfcBSplineCurve_UpperIndexOnControlPoints(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ return sizeof(controlpointslist) - 1
+
+def calc_IfcBSplineCurve_ControlPoints(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)
+ return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints)
+
+class IfcBSplineCurveWithKnots_ConsistentBSpline:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineCurveWithKnots'
+ RULE_NAME = 'ConsistentBSpline'
+
+ @staticmethod
+ def __call__(self):
+ degree = getattr(self, 'Degree', INDETERMINATE)
+ upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)
+ knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE)
+ knots = getattr(self, 'Knots', INDETERMINATE)
+ upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE)
+ assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False
+
+class IfcBSplineCurveWithKnots_CorrespondingKnotLists:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineCurveWithKnots'
+ RULE_NAME = 'CorrespondingKnotLists'
+
+ @staticmethod
+ def __call__(self):
+ knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE)
+ upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE)
+ assert (sizeof(knotmultiplicities) == upperindexonknots) is not False
+
+def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self):
+ knots = getattr(self, 'Knots', INDETERMINATE)
+ return sizeof(knots)
+
+def calc_IfcBSplineSurface_UUpper(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ return sizeof(controlpointslist) - 1
+
+def calc_IfcBSplineSurface_VUpper(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ return sizeof(express_getitem(controlpointslist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) - 1
+
+def calc_IfcBSplineSurface_ControlPoints(self):
+ controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE)
+ uupper = getattr(self, 'UUpper', INDETERMINATE)
+ vupper = getattr(self, 'VUpper', INDETERMINATE)
+ return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper)
+
+class IfcBSplineSurfaceWithKnots_CorrespondingULists:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineSurfaceWithKnots'
+ RULE_NAME = 'CorrespondingULists'
+
+ @staticmethod
+ def __call__(self):
+ umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE)
+ knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE)
+ assert (sizeof(umultiplicities) == knotuupper) is not False
+
+class IfcBSplineSurfaceWithKnots_CorrespondingVLists:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineSurfaceWithKnots'
+ RULE_NAME = 'CorrespondingVLists'
+
+ @staticmethod
+ def __call__(self):
+ vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE)
+ knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE)
+ assert (sizeof(vmultiplicities) == knotvupper) is not False
+
+class IfcBSplineSurfaceWithKnots_UDirectionConstraints:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineSurfaceWithKnots'
+ RULE_NAME = 'UDirectionConstraints'
+
+ @staticmethod
+ def __call__(self):
+ umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE)
+ uknots = getattr(self, 'UKnots', INDETERMINATE)
+ knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE)
+ assert IfcConstraintsParamBSpline(getattr(self, 'UDegree', INDETERMINATE), knotuupper, getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False
+
+class IfcBSplineSurfaceWithKnots_VDirectionConstraints:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBSplineSurfaceWithKnots'
+ RULE_NAME = 'VDirectionConstraints'
+
+ @staticmethod
+ def __call__(self):
+ vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE)
+ vknots = getattr(self, 'VKnots', INDETERMINATE)
+ knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE)
+ assert IfcConstraintsParamBSpline(getattr(self, 'VDegree', INDETERMINATE), knotvupper, getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False
+
+def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self):
+ vknots = getattr(self, 'VKnots', INDETERMINATE)
+ return sizeof(vknots)
+
+def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self):
+ uknots = getattr(self, 'UKnots', INDETERMINATE)
+ return sizeof(uknots)
+
+class IfcBeam_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBeam'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBeam_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBeam'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBeamType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBeamType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcBearing_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBearing'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBearing_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBearing'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBearingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBearingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcBlobTexture_RasterCodeByteStream:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBlobTexture'
+ RULE_NAME = 'RasterCodeByteStream'
+
+ @staticmethod
+ def __call__(self):
+ rastercode = getattr(self, 'RasterCode', INDETERMINATE)
+ assert (blength(rastercode) % 8 == 0) is not False
+
+class IfcBlobTexture_SupportedRasterFormat:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBlobTexture'
+ RULE_NAME = 'SupportedRasterFormat'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
+
+class IfcBoiler_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBoiler'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBoiler_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBoiler'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBoilerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBoilerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcBooleanClippingResult_FirstOperandType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanClippingResult'
+ RULE_NAME = 'FirstOperandType'
+
+ @staticmethod
+ def __call__(self):
+ firstoperand = getattr(self, 'FirstOperand', INDETERMINATE)
+ assert ('ifc4x3_add2.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_add2.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_add2.ifcbooleanclippingresult' in typeof(firstoperand)) is not False
+
+class IfcBooleanClippingResult_OperatorType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanClippingResult'
+ RULE_NAME = 'OperatorType'
+
+ @staticmethod
+ def __call__(self):
+ operator = getattr(self, 'Operator', INDETERMINATE)
+ assert (operator == difference) is not False
+
+class IfcBooleanClippingResult_SecondOperandType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanClippingResult'
+ RULE_NAME = 'SecondOperandType'
+
+ @staticmethod
+ def __call__(self):
+ secondoperand = getattr(self, 'SecondOperand', INDETERMINATE)
+ assert ('ifc4x3_add2.ifchalfspacesolid' in typeof(secondoperand)) is not False
+
+class IfcBooleanResult_FirstOperandClosed:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanResult'
+ RULE_NAME = 'FirstOperandClosed'
+
+ @staticmethod
+ def __call__(self):
+ firstoperand = getattr(self, 'FirstOperand', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False
+
+class IfcBooleanResult_SameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanResult'
+ RULE_NAME = 'SameDim'
+
+ @staticmethod
+ def __call__(self):
+ firstoperand = getattr(self, 'FirstOperand', INDETERMINATE)
+ secondoperand = getattr(self, 'SecondOperand', INDETERMINATE)
+ assert (getattr(firstoperand, 'Dim', INDETERMINATE) == getattr(secondoperand, 'Dim', INDETERMINATE)) is not False
+
+class IfcBooleanResult_SecondOperandClosed:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBooleanResult'
+ RULE_NAME = 'SecondOperandClosed'
+
+ @staticmethod
+ def __call__(self):
+ secondoperand = getattr(self, 'SecondOperand', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False
+
+def calc_IfcBooleanResult_Dim(self):
+ firstoperand = getattr(self, 'FirstOperand', INDETERMINATE)
+ return getattr(firstoperand, 'Dim', INDETERMINATE)
+
+class IfcBoundaryCurve_IsClosed:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBoundaryCurve'
+ RULE_NAME = 'IsClosed'
+
+ @staticmethod
+ def __call__(self):
+ assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False
+
+def calc_IfcBoundingBox_Dim(self):
+ return 3
+
+class IfcBoxedHalfSpace_UnboundedSurface:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBoxedHalfSpace'
+ RULE_NAME = 'UnboundedSurface'
+
+ @staticmethod
+ def __call__(self):
+ assert (not 'ifc4x3_add2.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False
+
+class IfcBridge_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBridge'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBridgePart_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBridgePart'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBuildingElementPart_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementPart'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBuildingElementPart_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementPart'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBuildingElementPartType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementPartType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcBuildingElementProxy_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementProxy'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBuildingElementProxy_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementProxy'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBuildingElementProxy_HasObjectName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementProxy'
+ RULE_NAME = 'HasObjectName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcBuildingElementProxyType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingElementProxyType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcBuildingSystem_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuildingSystem'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBuiltElement_MaxOneMaterialAssociation:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuiltElement'
+ RULE_NAME = 'MaxOneMaterialAssociation'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_add2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False
+
+class IfcBuiltSystem_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBuiltSystem'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBurner_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBurner'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcBurner_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBurner'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcBurnerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcBurnerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCShapeProfileDef_ValidGirth:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCShapeProfileDef'
+ RULE_NAME = 'ValidGirth'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ girth = getattr(self, 'Girth', INDETERMINATE)
+ assert (girth < depth / 2.0) is not False
+
+class IfcCShapeProfileDef_ValidInternalFilletRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCShapeProfileDef'
+ RULE_NAME = 'ValidInternalFilletRadius'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ width = getattr(self, 'Width', INDETERMINATE)
+ wallthickness = getattr(self, 'WallThickness', INDETERMINATE)
+ internalfilletradius = getattr(self, 'InternalFilletRadius', INDETERMINATE)
+ assert (not exists(internalfilletradius) or (internalfilletradius <= width / 2.0 - wallthickness and internalfilletradius <= depth / 2.0 - wallthickness)) is not False
+
+class IfcCShapeProfileDef_ValidWallThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCShapeProfileDef'
+ RULE_NAME = 'ValidWallThickness'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ width = getattr(self, 'Width', INDETERMINATE)
+ wallthickness = getattr(self, 'WallThickness', INDETERMINATE)
+ assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False
+
+class IfcCableCarrierFitting_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierFitting'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCableCarrierFitting_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierFitting'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCableCarrierFittingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierFittingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCableCarrierSegment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierSegment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCableCarrierSegment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierSegment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCableCarrierSegmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableCarrierSegmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCableFitting_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableFitting'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCableFitting_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableFitting'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCableFittingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableFittingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCableSegment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableSegment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCableSegment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableSegment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCableSegmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCableSegmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCaissonFoundation_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCaissonFoundation'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCaissonFoundation_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCaissonFoundation'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCaissonFoundationType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCaissonFoundationType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCartesianPoint_CP2Dor3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianPoint'
+ RULE_NAME = 'CP2Dor3D'
+
+ @staticmethod
+ def __call__(self):
+ coordinates = getattr(self, 'Coordinates', INDETERMINATE)
+ assert (hiindex(coordinates) >= 2) is not False
+
+def calc_IfcCartesianPointList_Dim(self):
+ return IfcPointListDim(self)
+
+class IfcCartesianTransformationOperator_ScaleGreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator'
+ RULE_NAME = 'ScaleGreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ scl = getattr(self, 'Scl', INDETERMINATE)
+ assert (scl > 0.0) is not False
+
+def calc_IfcCartesianTransformationOperator_Scl(self):
+ scale = getattr(self, 'Scale', INDETERMINATE)
+ return nvl(scale, 1.0)
+
+def calc_IfcCartesianTransformationOperator_Dim(self):
+ localorigin = getattr(self, 'LocalOrigin', INDETERMINATE)
+ return getattr(localorigin, 'Dim', INDETERMINATE)
+
+class IfcCartesianTransformationOperator2D_Axis1Is2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator2D'
+ RULE_NAME = 'Axis1Is2D'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcCartesianTransformationOperator2D_Axis2Is2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator2D'
+ RULE_NAME = 'Axis2Is2D'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcCartesianTransformationOperator2D_DimEqual2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator2D'
+ RULE_NAME = 'DimEqual2'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False
+
+def calc_IfcCartesianTransformationOperator2D_U(self):
+ return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None)
+
+class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator2DnonUniform'
+ RULE_NAME = 'Scale2GreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ scl2 = getattr(self, 'Scl2', INDETERMINATE)
+ assert (scl2 > 0.0) is not False
+
+def calc_IfcCartesianTransformationOperator2DnonUniform_Scl2(self):
+ scale2 = getattr(self, 'Scale2', INDETERMINATE)
+ return nvl(scale2, getattr(self, 'Scl', INDETERMINATE))
+
+class IfcCartesianTransformationOperator3D_Axis1Is3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3D'
+ RULE_NAME = 'Axis1Is3D'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcCartesianTransformationOperator3D_Axis2Is3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3D'
+ RULE_NAME = 'Axis2Is3D'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcCartesianTransformationOperator3D_Axis3Is3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3D'
+ RULE_NAME = 'Axis3Is3D'
+
+ @staticmethod
+ def __call__(self):
+ axis3 = getattr(self, 'Axis3', INDETERMINATE)
+ assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcCartesianTransformationOperator3D_DimIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3D'
+ RULE_NAME = 'DimIs3D'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False
+
+def calc_IfcCartesianTransformationOperator3D_U(self):
+ axis3 = getattr(self, 'Axis3', INDETERMINATE)
+ return IfcBaseAxis(3, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), axis3)
+
+class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3DnonUniform'
+ RULE_NAME = 'Scale2GreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ scl2 = getattr(self, 'Scl2', INDETERMINATE)
+ assert (scl2 > 0.0) is not False
+
+class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCartesianTransformationOperator3DnonUniform'
+ RULE_NAME = 'Scale3GreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ scl3 = getattr(self, 'Scl3', INDETERMINATE)
+ assert (scl3 > 0.0) is not False
+
+def calc_IfcCartesianTransformationOperator3DnonUniform_Scl2(self):
+ scale2 = getattr(self, 'Scale2', INDETERMINATE)
+ return nvl(scale2, getattr(self, 'Scl', INDETERMINATE))
+
+def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self):
+ scale3 = getattr(self, 'Scale3', INDETERMINATE)
+ return nvl(scale3, getattr(self, 'Scl', INDETERMINATE))
+
+class IfcChiller_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChiller'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcChiller_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChiller'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcChillerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChillerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcChimney_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChimney'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcChimney_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChimney'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcChimneyType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcChimneyType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCircleHollowProfileDef_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCircleHollowProfileDef'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ wallthickness = getattr(self, 'WallThickness', INDETERMINATE)
+ assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False
+
+class IfcCoil_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoil'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCoil_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoil'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCoilType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoilType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcColumn_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcColumn'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcColumn_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcColumn'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcColumnType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcColumnType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCommunicationsAppliance_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCommunicationsAppliance'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCommunicationsAppliance_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCommunicationsAppliance'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCommunicationsApplianceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCommunicationsApplianceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcComplexProperty_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcComplexProperty'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ hasproperties = getattr(self, 'HasProperties', INDETERMINATE)
+ assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False
+
+class IfcComplexProperty_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcComplexProperty'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ hasproperties = getattr(self, 'HasProperties', INDETERMINATE)
+ assert IfcUniquePropertyName(hasproperties) is not False
+
+class IfcComplexPropertyTemplate_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcComplexPropertyTemplate'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE)
+ assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False
+
+class IfcComplexPropertyTemplate_UniquePropertyNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcComplexPropertyTemplate'
+ RULE_NAME = 'UniquePropertyNames'
+
+ @staticmethod
+ def __call__(self):
+ haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE)
+ assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False
+
+class IfcCompositeCurve_CurveContinuous:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeCurve'
+ RULE_NAME = 'CurveContinuous'
+
+ @staticmethod
+ def __call__(self):
+ segments = getattr(self, 'Segments', INDETERMINATE)
+ closedcurve = getattr(self, 'ClosedCurve', INDETERMINATE)
+ assert (not closedcurve and sizeof([temp for temp in segments if getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False
+
+class IfcCompositeCurve_SameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeCurve'
+ RULE_NAME = 'SameDim'
+
+ @staticmethod
+ def __call__(self):
+ segments = getattr(self, 'Segments', INDETERMINATE)
+ assert (sizeof([temp for temp in segments if getattr(temp, 'Dim', INDETERMINATE) != getattr(express_getitem(segments, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False
+
+def calc_IfcCompositeCurve_NSegments(self):
+ segments = getattr(self, 'Segments', INDETERMINATE)
+ return sizeof(segments)
+
+def calc_IfcCompositeCurve_ClosedCurve(self):
+ segments = getattr(self, 'Segments', INDETERMINATE)
+ nsegments = getattr(self, 'NSegments', INDETERMINATE)
+ return getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous
+
+class IfcCompositeCurveOnSurface_SameSurface:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeCurveOnSurface'
+ RULE_NAME = 'SameSurface'
+
+ @staticmethod
+ def __call__(self):
+ basissurface = getattr(self, 'BasisSurface', INDETERMINATE)
+ assert (sizeof(basissurface) > 0) is not False
+
+def calc_IfcCompositeCurveOnSurface_BasisSurface(self):
+ return IfcGetBasisSurface(self)
+
+class IfcCompositeCurveSegment_ParentIsBoundedCurve:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeCurveSegment'
+ RULE_NAME = 'ParentIsBoundedCurve'
+
+ @staticmethod
+ def __call__(self):
+ parentcurve = getattr(self, 'ParentCurve', INDETERMINATE)
+ assert ('ifc4x3_add2.ifcboundedcurve' in typeof(parentcurve)) is not False
+
+class IfcCompositeProfileDef_InvariantProfileType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeProfileDef'
+ RULE_NAME = 'InvariantProfileType'
+
+ @staticmethod
+ def __call__(self):
+ profiles = getattr(self, 'Profiles', INDETERMINATE)
+ assert (sizeof([temp for temp in profiles if getattr(temp, 'ProfileType', INDETERMINATE) != getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False
+
+class IfcCompositeProfileDef_NoRecursion:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompositeProfileDef'
+ RULE_NAME = 'NoRecursion'
+
+ @staticmethod
+ def __call__(self):
+ profiles = getattr(self, 'Profiles', INDETERMINATE)
+ assert (sizeof([temp for temp in profiles if 'ifc4x3_add2.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False
+
+class IfcCompressor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompressor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCompressor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompressor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCompressorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCompressorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCondenser_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCondenser'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCondenser_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCondenser'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCondenserType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCondenserType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcConstraint_WR11:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstraint'
+ RULE_NAME = 'WR11'
+
+ @staticmethod
+ def __call__(self):
+ constraintgrade = getattr(self, 'ConstraintGrade', INDETERMINATE)
+ assert (constraintgrade != getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False
+
+class IfcConstructionEquipmentResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionEquipmentResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcConstructionEquipmentResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionEquipmentResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+class IfcConstructionMaterialResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionMaterialResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcConstructionMaterialResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionMaterialResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+class IfcConstructionProductResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionProductResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcConstructionProductResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConstructionProductResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+class IfcController_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcController'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcController_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcController'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcControllerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcControllerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcConveyorSegment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConveyorSegment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcConveyorSegment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConveyorSegment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcConveyorSegmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcConveyorSegmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCooledBeam_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCooledBeam'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCooledBeam_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCooledBeam'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCooledBeamType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCooledBeamType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCoolingTower_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoolingTower'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCoolingTower_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoolingTower'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCoolingTowerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoolingTowerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCoordinateReferenceSystem_NameOrWKT:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoordinateReferenceSystem'
+ RULE_NAME = 'NameOrWKT'
+
+ @staticmethod
+ def __call__(self):
+ name = getattr(self, 'Name', INDETERMINATE)
+ wellknowntext = getattr(self, 'WellKnownText', INDETERMINATE)
+ assert (hiindex(wellknowntext) == 1 or exists(name)) is not False
+
+class IfcCourse_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCourse'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCourse_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCourse'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCourseType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCourseType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCovering_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCovering'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCovering_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCovering'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCoveringType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCoveringType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcCrewResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCrewResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCrewResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCrewResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+def calc_IfcCsgPrimitive3D_Dim(self):
+ return 3
+
+class IfcCurtainWall_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurtainWall'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcCurtainWall_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurtainWall'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcCurtainWallType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurtainWallType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcCurve_Dim(self):
+ return IfcCurveDim(self)
+
+class IfcCurveStyle_IdentifiableCurveStyle:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurveStyle'
+ RULE_NAME = 'IdentifiableCurveStyle'
+
+ @staticmethod
+ def __call__(self):
+ curvefont = getattr(self, 'CurveFont', INDETERMINATE)
+ curvewidth = getattr(self, 'CurveWidth', INDETERMINATE)
+ curvecolour = getattr(self, 'CurveColour', INDETERMINATE)
+ assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False
+
+class IfcCurveStyle_MeasureOfWidth:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurveStyle'
+ RULE_NAME = 'MeasureOfWidth'
+
+ @staticmethod
+ def __call__(self):
+ curvewidth = getattr(self, 'CurveWidth', INDETERMINATE)
+ assert (not exists(curvewidth) or 'ifc4x3_add2.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_add2.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False
+
+class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcCurveStyleFontPattern'
+ RULE_NAME = 'VisibleLengthGreaterEqualZero'
+
+ @staticmethod
+ def __call__(self):
+ visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE)
+ assert (visiblesegmentlength >= 0.0) is not False
+
+class IfcDamper_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDamper'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDamper_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDamper'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDamperType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDamperType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDeepFoundation_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDeepFoundation'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDerivedProfileDef_InvariantProfileType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDerivedProfileDef'
+ RULE_NAME = 'InvariantProfileType'
+
+ @staticmethod
+ def __call__(self):
+ parentprofile = getattr(self, 'ParentProfile', INDETERMINATE)
+ assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False
+
+class IfcDerivedUnit_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDerivedUnit'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ elements = getattr(self, 'Elements', INDETERMINATE)
+ assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False
+
+class IfcDerivedUnit_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDerivedUnit'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ unittype = getattr(self, 'UnitType', INDETERMINATE)
+ assert (unittype != getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False
+
+def calc_IfcDerivedUnit_Dimensions(self):
+ elements = getattr(self, 'Elements', INDETERMINATE)
+ return IfcDeriveDimensionalExponents(elements)
+
+class IfcDirection_MagnitudeGreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDirection'
+ RULE_NAME = 'MagnitudeGreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ directionratios = getattr(self, 'DirectionRatios', INDETERMINATE)
+ assert (sizeof([tmp for tmp in directionratios if tmp != 0.0]) > 0) is not False
+
+def calc_IfcDirection_Dim(self):
+ directionratios = getattr(self, 'DirectionRatios', INDETERMINATE)
+ return hiindex(directionratios)
+
+class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDirectrixCurveSweptAreaSolid'
+ RULE_NAME = 'DirectrixBounded'
+
+ @staticmethod
+ def __call__(self):
+ directrix = getattr(self, 'Directrix', INDETERMINATE)
+ startparam = getattr(self, 'StartParam', INDETERMINATE)
+ endparam = getattr(self, 'EndParam', INDETERMINATE)
+ assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_add2.ifcconic', 'ifc4x3_add2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False
+
+class IfcDiscreteAccessory_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDiscreteAccessory'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDiscreteAccessory_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDiscreteAccessory'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDiscreteAccessoryType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDiscreteAccessoryType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDistributionBoard_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionBoard'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDistributionBoard_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionBoard'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDistributionBoardType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionBoardType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDistributionChamberElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionChamberElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDistributionChamberElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionChamberElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDistributionChamberElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionChamberElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDistributionSystem_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDistributionSystem'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDocumentReference_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDocumentReference'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ name = getattr(self, 'Name', INDETERMINATE)
+ referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE)
+ assert exists(name) ^ exists(referenceddocument) is not False
+
+class IfcDoor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDoor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDoorLiningProperties_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorLiningProperties'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ liningdepth = getattr(self, 'LiningDepth', INDETERMINATE)
+ liningthickness = getattr(self, 'LiningThickness', INDETERMINATE)
+ assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False
+
+class IfcDoorLiningProperties_WR32:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorLiningProperties'
+ RULE_NAME = 'WR32'
+
+ @staticmethod
+ def __call__(self):
+ thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE)
+ thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE)
+ assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False
+
+class IfcDoorLiningProperties_WR33:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorLiningProperties'
+ RULE_NAME = 'WR33'
+
+ @staticmethod
+ def __call__(self):
+ transomthickness = getattr(self, 'TransomThickness', INDETERMINATE)
+ transomoffset = getattr(self, 'TransomOffset', INDETERMINATE)
+ assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False
+
+class IfcDoorLiningProperties_WR34:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorLiningProperties'
+ RULE_NAME = 'WR34'
+
+ @staticmethod
+ def __call__(self):
+ casingthickness = getattr(self, 'CasingThickness', INDETERMINATE)
+ casingdepth = getattr(self, 'CasingDepth', INDETERMINATE)
+ assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False
+
+class IfcDoorLiningProperties_WR35:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorLiningProperties'
+ RULE_NAME = 'WR35'
+
+ @staticmethod
+ def __call__(self):
+ assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcDoorPanelProperties_ApplicableToType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorPanelProperties'
+ RULE_NAME = 'ApplicableToType'
+
+ @staticmethod
+ def __call__(self):
+ assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcDoorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDoorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDraughtingPreDefinedColour'
+ RULE_NAME = 'PreDefinedColourNames'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+
+class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDraughtingPreDefinedCurveFont'
+ RULE_NAME = 'PreDefinedCurveFontNames'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+
+class IfcDuctFitting_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctFitting'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDuctFitting_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctFitting'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDuctFittingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctFittingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDuctSegment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSegment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDuctSegment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSegment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDuctSegmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSegmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcDuctSilencer_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSilencer'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcDuctSilencer_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSilencer'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcDuctSilencerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcDuctSilencerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcEarthworksCut_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEarthworksCut'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEarthworksFill_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEarthworksFill'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEdgeLoop_IsClosed:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEdgeLoop'
+ RULE_NAME = 'IsClosed'
+
+ @staticmethod
+ def __call__(self):
+ edgelist = getattr(self, 'EdgeList', INDETERMINATE)
+ ne = getattr(self, 'Ne', INDETERMINATE)
+ assert (getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False
+
+class IfcEdgeLoop_IsContinuous:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEdgeLoop'
+ RULE_NAME = 'IsContinuous'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcLoopHeadToTail(self) is not False
+
+def calc_IfcEdgeLoop_Ne(self):
+ edgelist = getattr(self, 'EdgeList', INDETERMINATE)
+ return sizeof(edgelist)
+
+class IfcElectricAppliance_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricAppliance'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricAppliance_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricAppliance'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricApplianceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricApplianceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricDistributionBoard_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricDistributionBoard'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricDistributionBoard_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricDistributionBoard'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricDistributionBoardType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricDistributionBoardType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricFlowStorageDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowStorageDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricFlowStorageDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowStorageDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricFlowStorageDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowStorageDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricFlowTreatmentDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowTreatmentDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowTreatmentDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricFlowTreatmentDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricGenerator_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricGenerator'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricGenerator_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricGenerator'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricGeneratorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricGeneratorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricMotor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricMotor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricMotor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricMotor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricMotorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricMotorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElectricTimeControl_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricTimeControl'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElectricTimeControl_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricTimeControl'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElectricTimeControlType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElectricTimeControlType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElementAssembly_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElementAssembly'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcElementAssembly_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElementAssembly'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcElementAssemblyType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElementAssemblyType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcElementQuantity_UniqueQuantityNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcElementQuantity'
+ RULE_NAME = 'UniqueQuantityNames'
+
+ @staticmethod
+ def __call__(self):
+ quantities = getattr(self, 'Quantities', INDETERMINATE)
+ assert IfcUniqueQuantityNames(quantities) is not False
+
+class IfcEngine_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEngine'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEngine_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEngine'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcEngineType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEngineType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcEvaporativeCooler_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporativeCooler'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEvaporativeCooler_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporativeCooler'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcEvaporativeCoolerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporativeCoolerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcEvaporator_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporator'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEvaporator_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporator'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcEvaporatorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvaporatorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcEvent_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvent'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcEvent_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEvent'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ eventtriggertype = getattr(self, 'EventTriggerType', INDETERMINATE)
+ userdefinedeventtriggertype = getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE)
+ assert (not exists(eventtriggertype) or eventtriggertype != getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False
+
+class IfcEventType_CorrectEventTriggerType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEventType'
+ RULE_NAME = 'CorrectEventTriggerType'
+
+ @staticmethod
+ def __call__(self):
+ eventtriggertype = getattr(self, 'EventTriggerType', INDETERMINATE)
+ userdefinedeventtriggertype = getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE)
+ assert (eventtriggertype != getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False
+
+class IfcEventType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcEventType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ProcessType', INDETERMINATE)))) is not False
+
+class IfcExternalReference_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcExternalReference'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ location = getattr(self, 'Location', INDETERMINATE)
+ identification = getattr(self, 'Identification', INDETERMINATE)
+ name = getattr(self, 'Name', INDETERMINATE)
+ assert (exists(identification) or exists(location) or exists(name)) is not False
+
+class IfcExtrudedAreaSolid_ValidExtrusionDirection:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcExtrudedAreaSolid'
+ RULE_NAME = 'ValidExtrusionDirection'
+
+ @staticmethod
+ def __call__(self):
+ assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False
+
+class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcExtrudedAreaSolidTapered'
+ RULE_NAME = 'CorrectProfileAssignment'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False
+
+class IfcFace_HasOuterBound:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFace'
+ RULE_NAME = 'HasOuterBound'
+
+ @staticmethod
+ def __call__(self):
+ bounds = getattr(self, 'Bounds', INDETERMINATE)
+ assert (sizeof([temp for temp in bounds if 'ifc4x3_add2.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False
+
+def calc_IfcFaceBasedSurfaceModel_Dim(self):
+ return 3
+
+class IfcFacilityPartCommon_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFacilityPartCommon'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFan_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFan'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFan_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFan'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFanType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFanType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFastener_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFastener'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFastener_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFastener'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFastenerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFastenerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFeatureElement_NotContained:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFeatureElement'
+ RULE_NAME = 'NotContained'
+
+ @staticmethod
+ def __call__(self):
+ containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE)
+ assert (sizeof(containedinstructure) == 0) is not False
+
+class IfcFeatureElementSubtraction_HasNoSubtraction:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFeatureElementSubtraction'
+ RULE_NAME = 'HasNoSubtraction'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False
+
+class IfcFeatureElementSubtraction_IsNotFilling:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFeatureElementSubtraction'
+ RULE_NAME = 'IsNotFilling'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False
+
+class IfcFillAreaStyle_ConsistentHatchStyleDef:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFillAreaStyle'
+ RULE_NAME = 'ConsistentHatchStyleDef'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False
+
+class IfcFillAreaStyle_MaxOneColour:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFillAreaStyle'
+ RULE_NAME = 'MaxOneColour'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add2.ifccolour' in typeof(style)]) <= 1) is not False
+
+class IfcFillAreaStyle_MaxOneExtHatchStyle:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFillAreaStyle'
+ RULE_NAME = 'MaxOneExtHatchStyle'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False
+
+class IfcFillAreaStyleHatching_PatternStart2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFillAreaStyleHatching'
+ RULE_NAME = 'PatternStart2D'
+
+ @staticmethod
+ def __call__(self):
+ patternstart = getattr(self, 'PatternStart', INDETERMINATE)
+ assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcFillAreaStyleHatching_RefHatchLine2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFillAreaStyleHatching'
+ RULE_NAME = 'RefHatchLine2D'
+
+ @staticmethod
+ def __call__(self):
+ pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE)
+ assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcFilter_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFilter'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFilter_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFilter'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFilterType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFilterType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFireSuppressionTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFireSuppressionTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFireSuppressionTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFireSuppressionTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFireSuppressionTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFireSuppressionTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFlowInstrument_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowInstrument'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFlowInstrument_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowInstrument'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFlowInstrumentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowInstrumentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFlowMeter_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowMeter'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFlowMeter_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowMeter'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFlowMeterType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFlowMeterType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFooting_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFooting'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFooting_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFooting'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFootingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFootingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcFurniture_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFurniture'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcFurniture_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFurniture'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcFurnitureType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcFurnitureType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcGeographicCRS_AngleUnitIsPlaneAngle:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeographicCRS'
+ RULE_NAME = 'AngleUnitIsPlaneAngle'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'AngleUnit', INDETERMINATE)) or getattr(getattr(self, 'AngleUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE)) is not False
+
+class IfcGeographicCRS_HeightUnitIsLength:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeographicCRS'
+ RULE_NAME = 'HeightUnitIsLength'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'HeightUnit', INDETERMINATE)) or getattr(getattr(self, 'HeightUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False
+
+class IfcGeographicElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeographicElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcGeographicElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeographicElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcGeographicElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeographicElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcGeometricCurveSet_NoSurfaces:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricCurveSet'
+ RULE_NAME = 'NoSurfaces'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_add2.ifcsurface' in typeof(temp)]) == 0) is not False
+
+class IfcGeometricRepresentationContext_North2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricRepresentationContext'
+ RULE_NAME = 'North2D'
+
+ @staticmethod
+ def __call__(self):
+ truenorth = getattr(self, 'TrueNorth', INDETERMINATE)
+ assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False
+
+class IfcGeometricRepresentationSubContext_NoCoordOperation:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricRepresentationSubContext'
+ RULE_NAME = 'NoCoordOperation'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False
+
+class IfcGeometricRepresentationSubContext_ParentNoSub:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricRepresentationSubContext'
+ RULE_NAME = 'ParentNoSub'
+
+ @staticmethod
+ def __call__(self):
+ parentcontext = getattr(self, 'ParentContext', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False
+
+class IfcGeometricRepresentationSubContext_UserTargetProvided:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricRepresentationSubContext'
+ RULE_NAME = 'UserTargetProvided'
+
+ @staticmethod
+ def __call__(self):
+ targetview = getattr(self, 'TargetView', INDETERMINATE)
+ userdefinedtargetview = getattr(self, 'UserDefinedTargetView', INDETERMINATE)
+ assert (targetview != getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False
+
+def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self):
+ parentcontext = getattr(self, 'ParentContext', INDETERMINATE)
+ return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE)
+
+def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self):
+ parentcontext = getattr(self, 'ParentContext', INDETERMINATE)
+ return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE)
+
+def calc_IfcGeometricRepresentationSubContext_TrueNorth(self):
+ parentcontext = getattr(self, 'ParentContext', INDETERMINATE)
+ return nvl(getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(getattr(getattr(self, 'WorldCoordinateSystem', INDETERMINATE), 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))
+
+def calc_IfcGeometricRepresentationSubContext_Precision(self):
+ parentcontext = getattr(self, 'ParentContext', INDETERMINATE)
+ return nvl(getattr(parentcontext, 'Precision', INDETERMINATE), 1)
+
+class IfcGeometricSet_ConsistentDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeometricSet'
+ RULE_NAME = 'ConsistentDim'
+
+ @staticmethod
+ def __call__(self):
+ elements = getattr(self, 'Elements', INDETERMINATE)
+ assert (sizeof([temp for temp in elements if getattr(temp, 'Dim', INDETERMINATE) != getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False
+
+def calc_IfcGeometricSet_Dim(self):
+ elements = getattr(self, 'Elements', INDETERMINATE)
+ return getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)
+
+class IfcGeotechnicalStratum_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGeotechnicalStratum'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcGridAxis_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGridAxis'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ axiscurve = getattr(self, 'AxisCurve', INDETERMINATE)
+ assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcGridAxis_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcGridAxis'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ partofw = getattr(self, 'PartOfW', INDETERMINATE)
+ partofv = getattr(self, 'PartOfV', INDETERMINATE)
+ partofu = getattr(self, 'PartOfU', INDETERMINATE)
+ assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False
+
+def calc_IfcHalfSpaceSolid_Dim(self):
+ return 3
+
+class IfcHeatExchanger_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHeatExchanger'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcHeatExchanger_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHeatExchanger'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcHeatExchangerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHeatExchangerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcHumidifier_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHumidifier'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcHumidifier_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHumidifier'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcHumidifierType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcHumidifierType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcIShapeProfileDef_ValidFilletRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIShapeProfileDef'
+ RULE_NAME = 'ValidFilletRadius'
+
+ @staticmethod
+ def __call__(self):
+ overallwidth = getattr(self, 'OverallWidth', INDETERMINATE)
+ overalldepth = getattr(self, 'OverallDepth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE)
+ filletradius = getattr(self, 'FilletRadius', INDETERMINATE)
+ assert (not exists(filletradius) or (filletradius <= (overallwidth - webthickness) / 2.0 and filletradius <= (overalldepth - 2.0 * flangethickness) / 2.0)) is not False
+
+class IfcIShapeProfileDef_ValidFlangeThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIShapeProfileDef'
+ RULE_NAME = 'ValidFlangeThickness'
+
+ @staticmethod
+ def __call__(self):
+ overalldepth = getattr(self, 'OverallDepth', INDETERMINATE)
+ flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE)
+ assert (2.0 * flangethickness < overalldepth) is not False
+
+class IfcIShapeProfileDef_ValidWebThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIShapeProfileDef'
+ RULE_NAME = 'ValidWebThickness'
+
+ @staticmethod
+ def __call__(self):
+ overallwidth = getattr(self, 'OverallWidth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ assert (webthickness < overallwidth) is not False
+
+class IfcImpactProtectionDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcImpactProtectionDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcImpactProtectionDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcImpactProtectionDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcImpactProtectionDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcImpactProtectionDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcIndexedPolyCurve_Consecutive:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIndexedPolyCurve'
+ RULE_NAME = 'Consecutive'
+
+ @staticmethod
+ def __call__(self):
+ segments = getattr(self, 'Segments', INDETERMINATE)
+ assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False
+
+class IfcInterceptor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcInterceptor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcInterceptor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcInterceptor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcInterceptorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcInterceptorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcIntersectionCurve_DistinctSurfaces:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIntersectionCurve'
+ RULE_NAME = 'DistinctSurfaces'
+
+ @staticmethod
+ def __call__(self):
+ assert (IfcAssociatedSurface(express_getitem(getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcIntersectionCurve_TwoPCurves:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcIntersectionCurve'
+ RULE_NAME = 'TwoPCurves'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False
+
+class IfcJunctionBox_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcJunctionBox'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcJunctionBox_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcJunctionBox'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcJunctionBoxType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcJunctionBoxType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcKerb_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcKerb'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcKerb_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcKerb'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifckerbtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcKerbType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcKerbType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcLShapeProfileDef_ValidThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLShapeProfileDef'
+ RULE_NAME = 'ValidThickness'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ width = getattr(self, 'Width', INDETERMINATE)
+ thickness = getattr(self, 'Thickness', INDETERMINATE)
+ assert (thickness < depth and (not exists(width) or thickness < width)) is not False
+
+class IfcLaborResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLaborResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcLaborResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLaborResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+class IfcLamp_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLamp'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcLamp_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLamp'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcLampType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLampType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcLightFixture_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLightFixture'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcLightFixture_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLightFixture'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcLightFixtureType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLightFixtureType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcLine_SameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLine'
+ RULE_NAME = 'SameDim'
+
+ @staticmethod
+ def __call__(self):
+ pnt = getattr(self, 'Pnt', INDETERMINATE)
+ dir = getattr(self, 'Dir', INDETERMINATE)
+ assert (getattr(dir, 'Dim', INDETERMINATE) == getattr(pnt, 'Dim', INDETERMINATE)) is not False
+
+class IfcLiquidTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLiquidTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcLiquidTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLiquidTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcLiquidTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLiquidTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcLocalPlacement_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcLocalPlacement'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE)
+ relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE)
+ assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False
+
+class IfcMapConversion_TargetCRSOnlyProjected:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMapConversion'
+ RULE_NAME = 'TargetCRSOnlyProjected'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifcprojectedcrs' in typeof(getattr(self, 'TargetCRS', INDETERMINATE))) is not False
+
+class IfcMarineFacility_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMarineFacility'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMarinePart_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMarinePart'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMaterialDefinitionRepresentation'
+ RULE_NAME = 'OnlyStyledRepresentations'
+
+ @staticmethod
+ def __call__(self):
+ representations = getattr(self, 'Representations', INDETERMINATE)
+ assert (sizeof([temp for temp in representations if not 'ifc4x3_add2.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False
+
+class IfcMaterialLayer_NormalizedPriority:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMaterialLayer'
+ RULE_NAME = 'NormalizedPriority'
+
+ @staticmethod
+ def __call__(self):
+ priority = getattr(self, 'Priority', INDETERMINATE)
+ assert (not exists(priority) or 0 <= priority <= 100) is not False
+
+def calc_IfcMaterialLayerSet_TotalThickness(self):
+ return IfcMlsTotalThickness(self)
+
+class IfcMaterialProfile_NormalizedPriority:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMaterialProfile'
+ RULE_NAME = 'NormalizedPriority'
+
+ @staticmethod
+ def __call__(self):
+ priority = getattr(self, 'Priority', INDETERMINATE)
+ assert (not exists(priority) or 0 <= priority <= 100) is not False
+
+class IfcMechanicalFastener_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMechanicalFastener'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMechanicalFastener_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMechanicalFastener'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMechanicalFastenerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMechanicalFastenerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcMedicalDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMedicalDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMedicalDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMedicalDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMedicalDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMedicalDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcMember_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMember'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMember_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMember'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMemberType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMemberType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcMirroredProfileDef_Operator(self):
+ return IfcCartesianTransformationOperator2D(Axis1=IfcDirection(DirectionRatios=[-1.0, 0.0]), Axis2=IfcDirection(DirectionRatios=[0.0, 1.0]), LocalOrigin=IfcCartesianPoint(Coordinates=[0.0, 0.0]), Scale=1.0)
+
+class IfcMobileTelecommunicationsAppliance_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMobileTelecommunicationsAppliance'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMobileTelecommunicationsAppliance'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMobileTelecommunicationsApplianceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcMooringDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMooringDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMooringDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMooringDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMooringDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMooringDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcMotorConnection_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMotorConnection'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcMotorConnection_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMotorConnection'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcMotorConnectionType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcMotorConnectionType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcNamedUnit_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcNamedUnit'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False
+
+class IfcNavigationElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcNavigationElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcNavigationElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcNavigationElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcNavigationElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcNavigationElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcObject_UniquePropertySetNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcObject'
+ RULE_NAME = 'UniquePropertySetNames'
+
+ @staticmethod
+ def __call__(self):
+ isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE)
+ assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False
+
+class IfcObjective_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcObjective'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ objectivequalifier = getattr(self, 'ObjectiveQualifier', INDETERMINATE)
+ assert (objectivequalifier != getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False
+
+class IfcOccupant_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOccupant'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not predefinedtype == getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcOffsetCurve2D_DimIs2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOffsetCurve2D'
+ RULE_NAME = 'DimIs2D'
+
+ @staticmethod
+ def __call__(self):
+ basiscurve = getattr(self, 'BasisCurve', INDETERMINATE)
+ assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcOffsetCurve3D_DimIs2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOffsetCurve3D'
+ RULE_NAME = 'DimIs2D'
+
+ @staticmethod
+ def __call__(self):
+ basiscurve = getattr(self, 'BasisCurve', INDETERMINATE)
+ assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcOpenCrossProfileDef_CorrectProfileType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOpenCrossProfileDef'
+ RULE_NAME = 'CorrectProfileType'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False
+
+class IfcOpenCrossProfileDef_CorrespondingSlopeWidths:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOpenCrossProfileDef'
+ RULE_NAME = 'CorrespondingSlopeWidths'
+
+ @staticmethod
+ def __call__(self):
+ widths = getattr(self, 'Widths', INDETERMINATE)
+ slopes = getattr(self, 'Slopes', INDETERMINATE)
+ assert (sizeof(slopes) == sizeof(widths)) is not False
+
+class IfcOpenCrossProfileDef_CorrespondingTags:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOpenCrossProfileDef'
+ RULE_NAME = 'CorrespondingTags'
+
+ @staticmethod
+ def __call__(self):
+ slopes = getattr(self, 'Slopes', INDETERMINATE)
+ tags = getattr(self, 'Tags', INDETERMINATE)
+ assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False
+
+class IfcOpeningElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOpeningElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcOrientedEdge_EdgeElementNotOriented:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOrientedEdge'
+ RULE_NAME = 'EdgeElementNotOriented'
+
+ @staticmethod
+ def __call__(self):
+ edgeelement = getattr(self, 'EdgeElement', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcorientededge' in typeof(edgeelement)) is not False
+
+def calc_IfcOrientedEdge_EdgeStart(self):
+ edgeelement = getattr(self, 'EdgeElement', INDETERMINATE)
+ orientation = getattr(self, 'Orientation', INDETERMINATE)
+ return IfcBooleanChoose(orientation, getattr(edgeelement, 'EdgeStart', INDETERMINATE), getattr(edgeelement, 'EdgeEnd', INDETERMINATE))
+
+def calc_IfcOrientedEdge_EdgeEnd(self):
+ edgeelement = getattr(self, 'EdgeElement', INDETERMINATE)
+ orientation = getattr(self, 'Orientation', INDETERMINATE)
+ return IfcBooleanChoose(orientation, getattr(edgeelement, 'EdgeEnd', INDETERMINATE), getattr(edgeelement, 'EdgeStart', INDETERMINATE))
+
+class IfcOutlet_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOutlet'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcOutlet_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOutlet'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcOutletType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOutletType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcOwnerHistory_CorrectChangeAction:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcOwnerHistory'
+ RULE_NAME = 'CorrectChangeAction'
+
+ @staticmethod
+ def __call__(self):
+ changeaction = getattr(self, 'ChangeAction', INDETERMINATE)
+ lastmodifieddate = getattr(self, 'LastModifiedDate', INDETERMINATE)
+ assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False
+
+class IfcPath_IsContinuous:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPath'
+ RULE_NAME = 'IsContinuous'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcPathHeadToTail(self) is not False
+
+class IfcPavement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPavement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPavement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPavement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPavementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPavementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcPcurve_DimIs2D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPcurve'
+ RULE_NAME = 'DimIs2D'
+
+ @staticmethod
+ def __call__(self):
+ referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE)
+ assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcPerson_IdentifiablePerson:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPerson'
+ RULE_NAME = 'IdentifiablePerson'
+
+ @staticmethod
+ def __call__(self):
+ identification = getattr(self, 'Identification', INDETERMINATE)
+ familyname = getattr(self, 'FamilyName', INDETERMINATE)
+ givenname = getattr(self, 'GivenName', INDETERMINATE)
+ assert (exists(identification) or exists(familyname) or exists(givenname)) is not False
+
+class IfcPerson_ValidSetOfNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPerson'
+ RULE_NAME = 'ValidSetOfNames'
+
+ @staticmethod
+ def __call__(self):
+ familyname = getattr(self, 'FamilyName', INDETERMINATE)
+ givenname = getattr(self, 'GivenName', INDETERMINATE)
+ middlenames = getattr(self, 'MiddleNames', INDETERMINATE)
+ assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False
+
+class IfcPhysicalComplexQuantity_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPhysicalComplexQuantity'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ hasquantities = getattr(self, 'HasQuantities', INDETERMINATE)
+ assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False
+
+class IfcPhysicalComplexQuantity_UniqueQuantityNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPhysicalComplexQuantity'
+ RULE_NAME = 'UniqueQuantityNames'
+
+ @staticmethod
+ def __call__(self):
+ hasquantities = getattr(self, 'HasQuantities', INDETERMINATE)
+ assert IfcUniqueQuantityNames(hasquantities) is not False
+
+class IfcPile_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPile'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPile_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPile'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPileType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPileType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcPipeFitting_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeFitting'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPipeFitting_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeFitting'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPipeFittingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeFittingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcPipeSegment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeSegment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPipeSegment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeSegment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPipeSegmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPipeSegmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcPixelTexture_MinPixelInS:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPixelTexture'
+ RULE_NAME = 'MinPixelInS'
+
+ @staticmethod
+ def __call__(self):
+ width = getattr(self, 'Width', INDETERMINATE)
+ assert (width >= 1) is not False
+
+class IfcPixelTexture_MinPixelInT:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPixelTexture'
+ RULE_NAME = 'MinPixelInT'
+
+ @staticmethod
+ def __call__(self):
+ height = getattr(self, 'Height', INDETERMINATE)
+ assert (height >= 1) is not False
+
+class IfcPixelTexture_NumberOfColours:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPixelTexture'
+ RULE_NAME = 'NumberOfColours'
+
+ @staticmethod
+ def __call__(self):
+ colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE)
+ assert (1 <= colourcomponents <= 4) is not False
+
+class IfcPixelTexture_PixelAsByteAndSameLength:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPixelTexture'
+ RULE_NAME = 'PixelAsByteAndSameLength'
+
+ @staticmethod
+ def __call__(self):
+ pixel = getattr(self, 'Pixel', INDETERMINATE)
+ assert (sizeof([temp for temp in pixel if blength(temp) % 8 == 0 and blength(temp) == blength(express_getitem(pixel, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == sizeof(pixel)) is not False
+
+class IfcPixelTexture_SizeOfPixelList:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPixelTexture'
+ RULE_NAME = 'SizeOfPixelList'
+
+ @staticmethod
+ def __call__(self):
+ width = getattr(self, 'Width', INDETERMINATE)
+ height = getattr(self, 'Height', INDETERMINATE)
+ pixel = getattr(self, 'Pixel', INDETERMINATE)
+ assert (sizeof(pixel) == width * height) is not False
+
+def calc_IfcPlacement_Dim(self):
+ location = getattr(self, 'Location', INDETERMINATE)
+ return getattr(location, 'Dim', INDETERMINATE)
+
+class IfcPlate_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPlate'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPlate_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPlate'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPlateType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPlateType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcPoint_Dim(self):
+ return IfcPointDim(self)
+
+class IfcPolyLoop_AllPointsSameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolyLoop'
+ RULE_NAME = 'AllPointsSameDim'
+
+ @staticmethod
+ def __call__(self):
+ polygon = getattr(self, 'Polygon', INDETERMINATE)
+ assert (sizeof([temp for temp in polygon if getattr(temp, 'Dim', INDETERMINATE) != getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False
+
+class IfcPolygonalBoundedHalfSpace_BoundaryDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolygonalBoundedHalfSpace'
+ RULE_NAME = 'BoundaryDim'
+
+ @staticmethod
+ def __call__(self):
+ polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE)
+ assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False
+
+class IfcPolygonalBoundedHalfSpace_BoundaryType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolygonalBoundedHalfSpace'
+ RULE_NAME = 'BoundaryType'
+
+ @staticmethod
+ def __call__(self):
+ polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE)
+ assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_add2.ifcpolyline', 'ifc4x3_add2.ifccompositecurve', 'ifc4x3_add2.ifcindexedpolycurve']) == 1) is not False
+
+class IfcPolyline_SameDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolyline'
+ RULE_NAME = 'SameDim'
+
+ @staticmethod
+ def __call__(self):
+ points = getattr(self, 'Points', INDETERMINATE)
+ assert (sizeof([temp for temp in points if getattr(temp, 'Dim', INDETERMINATE) != getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False
+
+class IfcPolynomialCurve_CorrectPositionDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolynomialCurve'
+ RULE_NAME = 'CorrectPositionDim'
+
+ @staticmethod
+ def __call__(self):
+ position = getattr(self, 'Position', INDETERMINATE)
+ coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE)
+ assert (getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or getattr(position, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcPolynomialCurve_ValidCoefficients:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPolynomialCurve'
+ RULE_NAME = 'ValidCoefficients'
+
+ @staticmethod
+ def __call__(self):
+ coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE)
+ coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE)
+ coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE)
+ assert (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))) is not False
+
+class IfcPositioningElement_HasPlacement:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPositioningElement'
+ RULE_NAME = 'HasPlacement'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False
+
+class IfcPostalAddress_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPostalAddress'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ internallocation = getattr(self, 'InternalLocation', INDETERMINATE)
+ addresslines = getattr(self, 'AddressLines', INDETERMINATE)
+ postalbox = getattr(self, 'PostalBox', INDETERMINATE)
+ town = getattr(self, 'Town', INDETERMINATE)
+ region = getattr(self, 'Region', INDETERMINATE)
+ postalcode = getattr(self, 'PostalCode', INDETERMINATE)
+ country = getattr(self, 'Country', INDETERMINATE)
+ assert (exists(internallocation) or exists(addresslines) or exists(postalbox) or exists(postalcode) or exists(town) or exists(region) or exists(country)) is not False
+
+class IfcPresentationLayerAssignment_ApplicableItems:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPresentationLayerAssignment'
+ RULE_NAME = 'ApplicableItems'
+
+ @staticmethod
+ def __call__(self):
+ assigneditems = getattr(self, 'AssignedItems', INDETERMINATE)
+ assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_add2.ifcshaperepresentation', 'ifc4x3_add2.ifcgeometricrepresentationitem', 'ifc4x3_add2.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False
+
+class IfcPresentationLayerWithStyle_ApplicableOnlyToItems:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPresentationLayerWithStyle'
+ RULE_NAME = 'ApplicableOnlyToItems'
+
+ @staticmethod
+ def __call__(self):
+ assigneditems = getattr(self, 'AssignedItems', INDETERMINATE)
+ assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_add2.ifcgeometricrepresentationitem', 'ifc4x3_add2.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False
+
+class IfcProcedure_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProcedure'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcProcedure_HasName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProcedure'
+ RULE_NAME = 'HasName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcProcedureType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProcedureType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ProcessType', INDETERMINATE)))) is not False
+
+class IfcProduct_PlacementForShapeRepresentation:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProduct'
+ RULE_NAME = 'PlacementForShapeRepresentation'
+
+ @staticmethod
+ def __call__(self):
+ objectplacement = getattr(self, 'ObjectPlacement', INDETERMINATE)
+ representation = getattr(self, 'Representation', INDETERMINATE)
+ assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_add2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False
+
+class IfcProductDefinitionShape_OnlyShapeModel:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProductDefinitionShape'
+ RULE_NAME = 'OnlyShapeModel'
+
+ @staticmethod
+ def __call__(self):
+ representations = getattr(self, 'Representations', INDETERMINATE)
+ assert (sizeof([temp for temp in representations if not 'ifc4x3_add2.ifcshapemodel' in typeof(temp)]) == 0) is not False
+
+class IfcProject_CorrectContext:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProject'
+ RULE_NAME = 'CorrectContext'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_add2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False
+
+class IfcProject_HasName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProject'
+ RULE_NAME = 'HasName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcProject_NoDecomposition:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProject'
+ RULE_NAME = 'NoDecomposition'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False
+
+class IfcProjectedCRS_MapUnitIsLength:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProjectedCRS'
+ RULE_NAME = 'MapUnitIsLength'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'MapUnit', INDETERMINATE)) or getattr(getattr(self, 'MapUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False
+
+class IfcProjectionElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProjectionElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPropertyBoundedValue_SameUnitLowerSet:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyBoundedValue'
+ RULE_NAME = 'SameUnitLowerSet'
+
+ @staticmethod
+ def __call__(self):
+ lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE)
+ setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE)
+ assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False
+
+class IfcPropertyBoundedValue_SameUnitUpperLower:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyBoundedValue'
+ RULE_NAME = 'SameUnitUpperLower'
+
+ @staticmethod
+ def __call__(self):
+ upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE)
+ lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE)
+ assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False
+
+class IfcPropertyBoundedValue_SameUnitUpperSet:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyBoundedValue'
+ RULE_NAME = 'SameUnitUpperSet'
+
+ @staticmethod
+ def __call__(self):
+ upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE)
+ setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE)
+ assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False
+
+class IfcPropertyDependencyRelationship_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyDependencyRelationship'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE)
+ dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE)
+ assert (dependingproperty != dependantproperty) is not False
+
+class IfcPropertyEnumeratedValue_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyEnumeratedValue'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ enumerationvalues = getattr(self, 'EnumerationValues', INDETERMINATE)
+ enumerationreference = getattr(self, 'EnumerationReference', INDETERMINATE)
+ assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False
+
+class IfcPropertyEnumeration_WR01:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyEnumeration'
+ RULE_NAME = 'WR01'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False
+
+class IfcPropertyListValue_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyListValue'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False
+
+class IfcPropertySet_ExistsName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertySet'
+ RULE_NAME = 'ExistsName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcPropertySet_UniquePropertyNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertySet'
+ RULE_NAME = 'UniquePropertyNames'
+
+ @staticmethod
+ def __call__(self):
+ hasproperties = getattr(self, 'HasProperties', INDETERMINATE)
+ assert IfcUniquePropertyName(hasproperties) is not False
+
+class IfcPropertySetTemplate_ExistsName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertySetTemplate'
+ RULE_NAME = 'ExistsName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcPropertySetTemplate_UniquePropertyNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertySetTemplate'
+ RULE_NAME = 'UniquePropertyNames'
+
+ @staticmethod
+ def __call__(self):
+ haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE)
+ assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False
+
+class IfcPropertyTableValue_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyTableValue'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ definingvalues = getattr(self, 'DefiningValues', INDETERMINATE)
+ definedvalues = getattr(self, 'DefinedValues', INDETERMINATE)
+ assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False
+
+class IfcPropertyTableValue_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyTableValue'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ definingvalues = getattr(self, 'DefiningValues', INDETERMINATE)
+ assert (not exists(definingvalues) or sizeof([temp for temp in getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False
+
+class IfcPropertyTableValue_WR23:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPropertyTableValue'
+ RULE_NAME = 'WR23'
+
+ @staticmethod
+ def __call__(self):
+ definedvalues = getattr(self, 'DefinedValues', INDETERMINATE)
+ assert (not exists(definedvalues) or sizeof([temp for temp in getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False
+
+class IfcProtectiveDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcProtectiveDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDeviceTrippingUnit'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDeviceTrippingUnit'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDeviceTrippingUnitType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcProtectiveDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcProtectiveDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcPump_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPump'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcPump_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPump'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcPumpType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcPumpType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcQuantityArea_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityArea'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Unit', INDETERMINATE)) or getattr(getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False
+
+class IfcQuantityArea_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityArea'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ areavalue = getattr(self, 'AreaValue', INDETERMINATE)
+ assert (areavalue >= 0.0) is not False
+
+class IfcQuantityCount_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityCount'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ countvalue = getattr(self, 'CountValue', INDETERMINATE)
+ assert (countvalue >= 0) is not False
+
+class IfcQuantityLength_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityLength'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Unit', INDETERMINATE)) or getattr(getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False
+
+class IfcQuantityLength_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityLength'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ lengthvalue = getattr(self, 'LengthValue', INDETERMINATE)
+ assert (lengthvalue >= 0.0) is not False
+
+class IfcQuantityTime_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityTime'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Unit', INDETERMINATE)) or getattr(getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False
+
+class IfcQuantityTime_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityTime'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ timevalue = getattr(self, 'TimeValue', INDETERMINATE)
+ assert (timevalue >= 0.0) is not False
+
+class IfcQuantityVolume_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityVolume'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Unit', INDETERMINATE)) or getattr(getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False
+
+class IfcQuantityVolume_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityVolume'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ volumevalue = getattr(self, 'VolumeValue', INDETERMINATE)
+ assert (volumevalue >= 0.0) is not False
+
+class IfcQuantityWeight_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityWeight'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(getattr(self, 'Unit', INDETERMINATE)) or getattr(getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False
+
+class IfcQuantityWeight_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcQuantityWeight'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ weightvalue = getattr(self, 'WeightValue', INDETERMINATE)
+ assert (weightvalue >= 0.0) is not False
+
+class IfcRail_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRail'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRail_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRail'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcRailType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRailing_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailing'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRailing_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailing'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcRailingType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailingType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRailway_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailway'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRailwayPart_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRailwayPart'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRamp_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRamp'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRamp_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRamp'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcRampFlight_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRampFlight'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRampFlight_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRampFlight'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcRampFlightType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRampFlightType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRampType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRampType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRationalBSplineCurveWithKnots'
+ RULE_NAME = 'SameNumOfWeightsAndPoints'
+
+ @staticmethod
+ def __call__(self):
+ weightsdata = getattr(self, 'WeightsData', INDETERMINATE)
+ assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False
+
+class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRationalBSplineCurveWithKnots'
+ RULE_NAME = 'WeightsGreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcCurveWeightsPositive(self) is not False
+
+def calc_IfcRationalBSplineCurveWithKnots_Weights(self):
+ weightsdata = getattr(self, 'WeightsData', INDETERMINATE)
+ return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE))
+
+class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRationalBSplineSurfaceWithKnots'
+ RULE_NAME = 'CorrespondingWeightsDataLists'
+
+ @staticmethod
+ def __call__(self):
+ weightsdata = getattr(self, 'WeightsData', INDETERMINATE)
+ assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRationalBSplineSurfaceWithKnots'
+ RULE_NAME = 'WeightValuesGreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcSurfaceWeightsPositive(self) is not False
+
+def calc_IfcRationalBSplineSurfaceWithKnots_Weights(self):
+ uupper = getattr(self, 'UUpper', INDETERMINATE)
+ vupper = getattr(self, 'VUpper', INDETERMINATE)
+ weightsdata = getattr(self, 'WeightsData', INDETERMINATE)
+ return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper)
+
+class IfcRectangleHollowProfileDef_ValidInnerRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangleHollowProfileDef'
+ RULE_NAME = 'ValidInnerRadius'
+
+ @staticmethod
+ def __call__(self):
+ wallthickness = getattr(self, 'WallThickness', INDETERMINATE)
+ innerfilletradius = getattr(self, 'InnerFilletRadius', INDETERMINATE)
+ assert (not exists(innerfilletradius) or (innerfilletradius <= getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False
+
+class IfcRectangleHollowProfileDef_ValidOuterRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangleHollowProfileDef'
+ RULE_NAME = 'ValidOuterRadius'
+
+ @staticmethod
+ def __call__(self):
+ outerfilletradius = getattr(self, 'OuterFilletRadius', INDETERMINATE)
+ assert (not exists(outerfilletradius) or (outerfilletradius <= getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False
+
+class IfcRectangleHollowProfileDef_ValidWallThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangleHollowProfileDef'
+ RULE_NAME = 'ValidWallThickness'
+
+ @staticmethod
+ def __call__(self):
+ wallthickness = getattr(self, 'WallThickness', INDETERMINATE)
+ assert (wallthickness < getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False
+
+class IfcRectangularTrimmedSurface_U1AndU2Different:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangularTrimmedSurface'
+ RULE_NAME = 'U1AndU2Different'
+
+ @staticmethod
+ def __call__(self):
+ u1 = getattr(self, 'U1', INDETERMINATE)
+ u2 = getattr(self, 'U2', INDETERMINATE)
+ assert (u1 != u2) is not False
+
+class IfcRectangularTrimmedSurface_UsenseCompatible:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangularTrimmedSurface'
+ RULE_NAME = 'UsenseCompatible'
+
+ @staticmethod
+ def __call__(self):
+ basissurface = getattr(self, 'BasisSurface', INDETERMINATE)
+ u1 = getattr(self, 'U1', INDETERMINATE)
+ u2 = getattr(self, 'U2', INDETERMINATE)
+ usense = getattr(self, 'Usense', INDETERMINATE)
+ assert ('ifc4x3_add2.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_add2.ifcplane' in typeof(basissurface)) or 'ifc4x3_add2.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False
+
+class IfcRectangularTrimmedSurface_V1AndV2Different:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangularTrimmedSurface'
+ RULE_NAME = 'V1AndV2Different'
+
+ @staticmethod
+ def __call__(self):
+ v1 = getattr(self, 'V1', INDETERMINATE)
+ v2 = getattr(self, 'V2', INDETERMINATE)
+ assert (v1 != v2) is not False
+
+class IfcRectangularTrimmedSurface_VsenseCompatible:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRectangularTrimmedSurface'
+ RULE_NAME = 'VsenseCompatible'
+
+ @staticmethod
+ def __call__(self):
+ v1 = getattr(self, 'V1', INDETERMINATE)
+ v2 = getattr(self, 'V2', INDETERMINATE)
+ vsense = getattr(self, 'Vsense', INDETERMINATE)
+ assert (vsense == (v2 > v1)) is not False
+
+class IfcReinforcedSoil_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcedSoil'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcReinforcingBar_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingBar'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcReinforcingBar_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingBar'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcReinforcingBarType_BendingShapeCodeProvided:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingBarType'
+ RULE_NAME = 'BendingShapeCodeProvided'
+
+ @staticmethod
+ def __call__(self):
+ bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE)
+ bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE)
+ assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False
+
+class IfcReinforcingBarType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingBarType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcReinforcingMesh_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingMesh'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcReinforcingMesh_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingMesh'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcReinforcingMeshType_BendingShapeCodeProvided:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingMeshType'
+ RULE_NAME = 'BendingShapeCodeProvided'
+
+ @staticmethod
+ def __call__(self):
+ bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE)
+ bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE)
+ assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False
+
+class IfcReinforcingMeshType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReinforcingMeshType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRelAggregates_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAggregates'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingobject = getattr(self, 'RelatingObject', INDETERMINATE)
+ relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE)
+ assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False
+
+class IfcRelAssignsToActor_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToActor'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingactor = getattr(self, 'RelatingActor', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False
+
+class IfcRelAssignsToControl_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToControl'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingcontrol = getattr(self, 'RelatingControl', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False
+
+class IfcRelAssignsToGroup_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToGroup'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatinggroup = getattr(self, 'RelatingGroup', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False
+
+class IfcRelAssignsToProcess_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToProcess'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False
+
+class IfcRelAssignsToProduct_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToProduct'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingproduct = getattr(self, 'RelatingProduct', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False
+
+class IfcRelAssignsToResource_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssignsToResource'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingresource = getattr(self, 'RelatingResource', INDETERMINATE)
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False
+
+class IfcRelAssociatesMaterial_AllowedElements:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssociatesMaterial'
+ RULE_NAME = 'AllowedElements'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_add2.ifcelement', 'ifc4x3_add2.ifcelementtype', 'ifc4x3_add2.ifcstructuralmember', 'ifc4x3_add2.ifcport']) == 0]) == 0) is not False
+
+class IfcRelAssociatesMaterial_NoVoidElement:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelAssociatesMaterial'
+ RULE_NAME = 'NoVoidElement'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add2.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_add2.ifcvirtualelement' in typeof(temp)]) == 0) is not False
+
+class IfcRelConnectsElements_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelConnectsElements'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingelement = getattr(self, 'RelatingElement', INDETERMINATE)
+ relatedelement = getattr(self, 'RelatedElement', INDETERMINATE)
+ assert (relatingelement != relatedelement) is not False
+
+class IfcRelConnectsPathElements_NormalizedRelatedPriorities:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelConnectsPathElements'
+ RULE_NAME = 'NormalizedRelatedPriorities'
+
+ @staticmethod
+ def __call__(self):
+ relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE)
+ assert (sizeof(relatedpriorities) == 0 or sizeof([temp for temp in relatedpriorities if 0 <= temp <= 100]) == sizeof(relatedpriorities)) is not False
+
+class IfcRelConnectsPathElements_NormalizedRelatingPriorities:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelConnectsPathElements'
+ RULE_NAME = 'NormalizedRelatingPriorities'
+
+ @staticmethod
+ def __call__(self):
+ relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE)
+ assert (sizeof(relatingpriorities) == 0 or sizeof([temp for temp in relatingpriorities if 0 <= temp <= 100]) == sizeof(relatingpriorities)) is not False
+
+class IfcRelConnectsPorts_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelConnectsPorts'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingport = getattr(self, 'RelatingPort', INDETERMINATE)
+ relatedport = getattr(self, 'RelatedPort', INDETERMINATE)
+ assert (relatingport != relatedport) is not False
+
+class IfcRelContainedInSpatialStructure_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelContainedInSpatialStructure'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ relatedelements = getattr(self, 'RelatedElements', INDETERMINATE)
+ assert (sizeof([temp for temp in relatedelements if 'ifc4x3_add2.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False
+
+class IfcRelDeclares_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelDeclares'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE)
+ relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE)
+ assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False
+
+class IfcRelDefinesByProperties_NoRelatedTypeObject:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelDefinesByProperties'
+ RULE_NAME = 'NoRelatedTypeObject'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add2.ifctypeobject' in typeof(types)]) == 0) is not False
+
+class IfcRelInterferesElements_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelInterferesElements'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingelement = getattr(self, 'RelatingElement', INDETERMINATE)
+ relatedelement = getattr(self, 'RelatedElement', INDETERMINATE)
+ assert (relatingelement != relatedelement) is not False
+
+class IfcRelNests_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelNests'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingobject = getattr(self, 'RelatingObject', INDETERMINATE)
+ relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE)
+ assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False
+
+class IfcRelPositions_NoSelfReference:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelPositions'
+ RULE_NAME = 'NoSelfReference'
+
+ @staticmethod
+ def __call__(self):
+ relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE)
+ relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE)
+ assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False
+
+class IfcRelReferencedInSpatialStructure_AllowedRelatedElements:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelReferencedInSpatialStructure'
+ RULE_NAME = 'AllowedRelatedElements'
+
+ @staticmethod
+ def __call__(self):
+ relatedelements = getattr(self, 'RelatedElements', INDETERMINATE)
+ assert (sizeof([temp for temp in relatedelements if 'ifc4x3_add2.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_add2.ifcspace' in typeof(temp))]) == 0) is not False
+
+class IfcRelSequence_AvoidInconsistentSequence:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelSequence'
+ RULE_NAME = 'AvoidInconsistentSequence'
+
+ @staticmethod
+ def __call__(self):
+ relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE)
+ relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE)
+ assert (relatingprocess != relatedprocess) is not False
+
+class IfcRelSequence_CorrectSequenceType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelSequence'
+ RULE_NAME = 'CorrectSequenceType'
+
+ @staticmethod
+ def __call__(self):
+ sequencetype = getattr(self, 'SequenceType', INDETERMINATE)
+ userdefinedsequencetype = getattr(self, 'UserDefinedSequenceType', INDETERMINATE)
+ assert (sequencetype != getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False
+
+class IfcRelSpaceBoundary_CorrectPhysOrVirt:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRelSpaceBoundary'
+ RULE_NAME = 'CorrectPhysOrVirt'
+
+ @staticmethod
+ def __call__(self):
+ relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE)
+ physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE)
+ assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_add2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_add2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_add2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False
+
+class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcReparametrisedCompositeCurveSegment'
+ RULE_NAME = 'PositiveLengthParameter'
+
+ @staticmethod
+ def __call__(self):
+ paramlength = getattr(self, 'ParamLength', INDETERMINATE)
+ assert (paramlength > 0.0) is not False
+
+class IfcRepresentationMap_ApplicableMappedRepr:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRepresentationMap'
+ RULE_NAME = 'ApplicableMappedRepr'
+
+ @staticmethod
+ def __call__(self):
+ mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE)
+ assert ('ifc4x3_add2.ifcshapemodel' in typeof(mappedrepresentation)) is not False
+
+class IfcRevolvedAreaSolid_AxisDirectionInXY:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRevolvedAreaSolid'
+ RULE_NAME = 'AxisDirectionInXY'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ assert (express_getitem(getattr(getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False
+
+class IfcRevolvedAreaSolid_AxisStartInXY:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRevolvedAreaSolid'
+ RULE_NAME = 'AxisStartInXY'
+
+ @staticmethod
+ def __call__(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(axis, 'Location', INDETERMINATE)) and express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False
+
+def calc_IfcRevolvedAreaSolid_AxisLine(self):
+ axis = getattr(self, 'Axis', INDETERMINATE)
+ return IfcLine(Pnt=getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0))
+
+class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRevolvedAreaSolidTapered'
+ RULE_NAME = 'CorrectProfileAssignment'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False
+
+class IfcRigidOperation_SameCoordinateType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRigidOperation'
+ RULE_NAME = 'SameCoordinateType'
+
+ @staticmethod
+ def __call__(self):
+ firstcoordinate = getattr(self, 'FirstCoordinate', INDETERMINATE)
+ secondcoordinate = getattr(self, 'SecondCoordinate', INDETERMINATE)
+ assert ('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))) is not False
+
+class IfcRoad_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoad'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRoadPart_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoadPart'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRoof_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoof'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcRoof_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoof'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcRoofType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoofType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcRoundedRectangleProfileDef_ValidRadius:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcRoundedRectangleProfileDef'
+ RULE_NAME = 'ValidRadius'
+
+ @staticmethod
+ def __call__(self):
+ roundingradius = getattr(self, 'RoundingRadius', INDETERMINATE)
+ assert (roundingradius <= getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False
+
+def calc_IfcSIUnit_Dimensions(self):
+ return IfcDimensionsForSIUnit(getattr(self, 'Name', INDETERMINATE))
+
+class IfcSanitaryTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSanitaryTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSanitaryTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSanitaryTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSanitaryTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSanitaryTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSeamCurve_SameSurface:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSeamCurve'
+ RULE_NAME = 'SameSurface'
+
+ @staticmethod
+ def __call__(self):
+ assert (IfcAssociatedSurface(express_getitem(getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcSeamCurve_TwoPCurves:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSeamCurve'
+ RULE_NAME = 'TwoPCurves'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False
+
+class IfcSectionedSolid_ConsistentProfileTypes:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSolid'
+ RULE_NAME = 'ConsistentProfileTypes'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssections if getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False
+
+class IfcSectionedSolid_DirectrixIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSolid'
+ RULE_NAME = 'DirectrixIs3D'
+
+ @staticmethod
+ def __call__(self):
+ directrix = getattr(self, 'Directrix', INDETERMINATE)
+ assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcSectionedSolid_SectionsSameType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSolid'
+ RULE_NAME = 'SectionsSameType'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssections if typeof(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != typeof(temp)]) == 0) is not False
+
+class IfcSectionedSolidHorizontal_CorrespondingSectionPositions:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSolidHorizontal'
+ RULE_NAME = 'CorrespondingSectionPositions'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE)
+ assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False
+
+class IfcSectionedSolidHorizontal_NoLongitudinalOffsets:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSolidHorizontal'
+ RULE_NAME = 'NoLongitudinalOffsets'
+
+ @staticmethod
+ def __call__(self):
+ crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False
+
+class IfcSectionedSpine_ConsistentProfileTypes:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSpine'
+ RULE_NAME = 'ConsistentProfileTypes'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssections if getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False
+
+class IfcSectionedSpine_CorrespondingSectionPositions:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSpine'
+ RULE_NAME = 'CorrespondingSectionPositions'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE)
+ assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False
+
+class IfcSectionedSpine_SpineCurveDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSpine'
+ RULE_NAME = 'SpineCurveDim'
+
+ @staticmethod
+ def __call__(self):
+ spinecurve = getattr(self, 'SpineCurve', INDETERMINATE)
+ assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False
+
+def calc_IfcSectionedSpine_Dim(self):
+ return 3
+
+class IfcSectionedSurface_AreaProfileTypes:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSurface'
+ RULE_NAME = 'AreaProfileTypes'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssections if getattr(temp, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)]) != 0) is not False
+
+class IfcSectionedSurface_CorrespondingSectionPositions:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSurface'
+ RULE_NAME = 'CorrespondingSectionPositions'
+
+ @staticmethod
+ def __call__(self):
+ crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE)
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False
+
+class IfcSectionedSurface_DirectrixIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSurface'
+ RULE_NAME = 'DirectrixIs3D'
+
+ @staticmethod
+ def __call__(self):
+ directrix = getattr(self, 'Directrix', INDETERMINATE)
+ assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcSectionedSurface_NoOffsets:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSurface'
+ RULE_NAME = 'NoOffsets'
+
+ @staticmethod
+ def __call__(self):
+ crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(getattr(temp, 'Location', INDETERMINATE), 'OffsetLateral', INDETERMINATE)) or exists(getattr(getattr(temp, 'Location', INDETERMINATE), 'OffsetVertical', INDETERMINATE)) or exists(getattr(getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False
+
+class IfcSectionedSurface_SectionsSameType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSectionedSurface'
+ RULE_NAME = 'SectionsSameType'
+
+ @staticmethod
+ def __call__(self):
+ crosssections = getattr(self, 'CrossSections', INDETERMINATE)
+ assert (sizeof([temp for temp in crosssections if typeof(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != typeof(temp)]) == 0) is not False
+
+def calc_IfcSegment_Dim(self):
+ return IfcSegmentDim(self)
+
+class IfcSensor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSensor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSensor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSensor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSensorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSensorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcShadingDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShadingDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcShadingDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShadingDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcShadingDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShadingDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcShapeModel_WR11:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeModel'
+ RULE_NAME = 'WR11'
+
+ @staticmethod
+ def __call__(self):
+ ofshapeaspect = getattr(self, 'OfShapeAspect', INDETERMINATE)
+ assert (sizeof(getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False
+
+class IfcShapeRepresentation_CorrectContext:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeRepresentation'
+ RULE_NAME = 'CorrectContext'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False
+
+class IfcShapeRepresentation_CorrectItemsForType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeRepresentation'
+ RULE_NAME = 'CorrectItemsForType'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False
+
+class IfcShapeRepresentation_HasRepresentationIdentifier:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeRepresentation'
+ RULE_NAME = 'HasRepresentationIdentifier'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False
+
+class IfcShapeRepresentation_HasRepresentationType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeRepresentation'
+ RULE_NAME = 'HasRepresentationType'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False
+
+class IfcShapeRepresentation_NoTopologicalItem:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcShapeRepresentation'
+ RULE_NAME = 'NoTopologicalItem'
+
+ @staticmethod
+ def __call__(self):
+ items = getattr(self, 'Items', INDETERMINATE)
+ assert (sizeof([temp for temp in items if 'ifc4x3_add2.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_add2.ifcvertexpoint', 'ifc4x3_add2.ifcedgecurve', 'ifc4x3_add2.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False
+
+def calc_IfcShellBasedSurfaceModel_Dim(self):
+ return 3
+
+class IfcSign_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSign'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSign_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSign'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSignType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSignType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSignal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSignal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSignal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSignal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSignalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSignalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSlab_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSlab'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSlab_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSlab'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSlabType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSlabType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSolarDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSolarDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSolarDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSolarDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSolarDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSolarDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcSolidModel_Dim(self):
+ return 3
+
+class IfcSpace_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpace'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSpace_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpace'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSpaceHeater_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpaceHeater'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSpaceHeater_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpaceHeater'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSpaceHeaterType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpaceHeaterType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSpaceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpaceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSpatialStructureElement_WR41:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpatialStructureElement'
+ RULE_NAME = 'WR41'
+
+ @staticmethod
+ def __call__(self):
+ assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_add2.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_add2.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_add2.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False
+
+class IfcSpatialZone_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpatialZone'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSpatialZone_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpatialZone'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSpatialZoneType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSpatialZoneType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcStackTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStackTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcStackTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStackTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcStackTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStackTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcStair_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStair'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcStair_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStair'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcStairFlight_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStairFlight'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcStairFlight_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStairFlight'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcStairFlightType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStairFlightType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcStairType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStairType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcStructuralAnalysisModel_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralAnalysisModel'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcStructuralCurveAction_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveAction'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralCurveAction_ProjectedIsGlobal:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveAction'
+ RULE_NAME = 'ProjectedIsGlobal'
+
+ @staticmethod
+ def __call__(self):
+ projectedortrue = getattr(self, 'ProjectedOrTrue', INDETERMINATE)
+ assert (not exists(projectedortrue) or (projectedortrue != projected_length or getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False
+
+class IfcStructuralCurveAction_SuitablePredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveAction'
+ RULE_NAME = 'SuitablePredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False
+
+class IfcStructuralCurveMember_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveMember'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralCurveReaction_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveReaction'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralCurveReaction_SuitablePredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralCurveReaction'
+ RULE_NAME = 'SuitablePredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False
+
+class IfcStructuralLinearAction_ConstPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralLinearAction'
+ RULE_NAME = 'ConstPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False
+
+class IfcStructuralLinearAction_SuitableLoadType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralLinearAction'
+ RULE_NAME = 'SuitableLoadType'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(['ifc4x3_add2.ifcstructuralloadlinearforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False
+
+class IfcStructuralLoadCase_IsLoadCasePredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralLoadCase'
+ RULE_NAME = 'IsLoadCasePredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False
+
+class IfcStructuralLoadConfiguration_ValidListSize:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralLoadConfiguration'
+ RULE_NAME = 'ValidListSize'
+
+ @staticmethod
+ def __call__(self):
+ values = getattr(self, 'Values', INDETERMINATE)
+ locations = getattr(self, 'Locations', INDETERMINATE)
+ assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False
+
+class IfcStructuralLoadGroup_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralLoadGroup'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ actiontype = getattr(self, 'ActionType', INDETERMINATE)
+ actionsource = getattr(self, 'ActionSource', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralPlanarAction_ConstPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralPlanarAction'
+ RULE_NAME = 'ConstPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False
+
+class IfcStructuralPlanarAction_SuitableLoadType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralPlanarAction'
+ RULE_NAME = 'SuitableLoadType'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(['ifc4x3_add2.ifcstructuralloadplanarforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False
+
+class IfcStructuralPointAction_SuitableLoadType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralPointAction'
+ RULE_NAME = 'SuitableLoadType'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False
+
+class IfcStructuralPointReaction_SuitableLoadType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralPointReaction'
+ RULE_NAME = 'SuitableLoadType'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False
+
+class IfcStructuralResultGroup_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralResultGroup'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ theorytype = getattr(self, 'TheoryType', INDETERMINATE)
+ assert (theorytype != getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralSurfaceAction_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralSurfaceAction'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralSurfaceAction_ProjectedIsGlobal:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralSurfaceAction'
+ RULE_NAME = 'ProjectedIsGlobal'
+
+ @staticmethod
+ def __call__(self):
+ projectedortrue = getattr(self, 'ProjectedOrTrue', INDETERMINATE)
+ assert (not exists(projectedortrue) or (projectedortrue != projected_length or getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False
+
+class IfcStructuralSurfaceMember_HasObjectType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralSurfaceMember'
+ RULE_NAME = 'HasObjectType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStructuralSurfaceReaction_HasPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStructuralSurfaceReaction'
+ RULE_NAME = 'HasPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False
+
+class IfcStyledItem_ApplicableItem:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStyledItem'
+ RULE_NAME = 'ApplicableItem'
+
+ @staticmethod
+ def __call__(self):
+ item = getattr(self, 'Item', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcstyleditem' in typeof(item)) is not False
+
+class IfcStyledRepresentation_OnlyStyledItems:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcStyledRepresentation'
+ RULE_NAME = 'OnlyStyledItems'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add2.ifcstyleditem' in typeof(temp)]) == 0) is not False
+
+class IfcSubContractResource_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSubContractResource'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSubContractResourceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSubContractResourceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ResourceType', INDETERMINATE)))) is not False
+
+def calc_IfcSurface_Dim(self):
+ return 3
+
+class IfcSurfaceCurve_CurveIs3D:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceCurve'
+ RULE_NAME = 'CurveIs3D'
+
+ @staticmethod
+ def __call__(self):
+ curve3d = getattr(self, 'Curve3D', INDETERMINATE)
+ assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcSurfaceCurve_CurveIsNotPcurve:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceCurve'
+ RULE_NAME = 'CurveIsNotPcurve'
+
+ @staticmethod
+ def __call__(self):
+ curve3d = getattr(self, 'Curve3D', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcpcurve' in typeof(curve3d)) is not False
+
+def calc_IfcSurfaceCurve_BasisSurface(self):
+ return IfcGetBasisSurface(self)
+
+class IfcSurfaceFeature_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceFeature'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSurfaceOfLinearExtrusion_DepthGreaterZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceOfLinearExtrusion'
+ RULE_NAME = 'DepthGreaterZero'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ assert (depth > 0.0) is not False
+
+def calc_IfcSurfaceOfLinearExtrusion_ExtrusionAxis(self):
+ extrudeddirection = getattr(self, 'ExtrudedDirection', INDETERMINATE)
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ return IfcVector(Orientation=extrudeddirection, Magnitude=depth)
+
+def calc_IfcSurfaceOfRevolution_AxisLine(self):
+ axisposition = getattr(self, 'AxisPosition', INDETERMINATE)
+ return IfcLine(Pnt=getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0))
+
+class IfcSurfaceReinforcementArea_NonnegativeArea1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceReinforcementArea'
+ RULE_NAME = 'NonnegativeArea1'
+
+ @staticmethod
+ def __call__(self):
+ surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE)
+ assert (not exists(surfacereinforcement1) or (express_getitem(surfacereinforcement1, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0 and express_getitem(surfacereinforcement1, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0 and (sizeof(surfacereinforcement1) == 1 or express_getitem(surfacereinforcement1, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0))) is not False
+
+class IfcSurfaceReinforcementArea_NonnegativeArea2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceReinforcementArea'
+ RULE_NAME = 'NonnegativeArea2'
+
+ @staticmethod
+ def __call__(self):
+ surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE)
+ assert (not exists(surfacereinforcement2) or (express_getitem(surfacereinforcement2, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0 and express_getitem(surfacereinforcement2, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0 and (sizeof(surfacereinforcement2) == 1 or express_getitem(surfacereinforcement2, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) >= 0.0))) is not False
+
+class IfcSurfaceReinforcementArea_NonnegativeArea3:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceReinforcementArea'
+ RULE_NAME = 'NonnegativeArea3'
+
+ @staticmethod
+ def __call__(self):
+ shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE)
+ assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False
+
+class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceReinforcementArea'
+ RULE_NAME = 'SurfaceAndOrShearAreaSpecified'
+
+ @staticmethod
+ def __call__(self):
+ surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE)
+ surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE)
+ shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE)
+ assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False
+
+class IfcSurfaceStyle_MaxOneExtDefined:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceStyle'
+ RULE_NAME = 'MaxOneExtDefined'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False
+
+class IfcSurfaceStyle_MaxOneLighting:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceStyle'
+ RULE_NAME = 'MaxOneLighting'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False
+
+class IfcSurfaceStyle_MaxOneRefraction:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceStyle'
+ RULE_NAME = 'MaxOneRefraction'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False
+
+class IfcSurfaceStyle_MaxOneShading:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceStyle'
+ RULE_NAME = 'MaxOneShading'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False
+
+class IfcSurfaceStyle_MaxOneTextures:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSurfaceStyle'
+ RULE_NAME = 'MaxOneTextures'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False
+
+class IfcSweptAreaSolid_SweptAreaType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptAreaSolid'
+ RULE_NAME = 'SweptAreaType'
+
+ @staticmethod
+ def __call__(self):
+ sweptarea = getattr(self, 'SweptArea', INDETERMINATE)
+ assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False
+
+class IfcSweptDiskSolid_DirectrixBounded:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptDiskSolid'
+ RULE_NAME = 'DirectrixBounded'
+
+ @staticmethod
+ def __call__(self):
+ directrix = getattr(self, 'Directrix', INDETERMINATE)
+ startparam = getattr(self, 'StartParam', INDETERMINATE)
+ endparam = getattr(self, 'EndParam', INDETERMINATE)
+ assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_add2.ifcconic', 'ifc4x3_add2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False
+
+class IfcSweptDiskSolid_DirectrixDim:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptDiskSolid'
+ RULE_NAME = 'DirectrixDim'
+
+ @staticmethod
+ def __call__(self):
+ directrix = getattr(self, 'Directrix', INDETERMINATE)
+ assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False
+
+class IfcSweptDiskSolid_InnerRadiusSize:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptDiskSolid'
+ RULE_NAME = 'InnerRadiusSize'
+
+ @staticmethod
+ def __call__(self):
+ radius = getattr(self, 'Radius', INDETERMINATE)
+ innerradius = getattr(self, 'InnerRadius', INDETERMINATE)
+ assert (not exists(innerradius) or radius > innerradius) is not False
+
+class IfcSweptDiskSolidPolygonal_CorrectRadii:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptDiskSolidPolygonal'
+ RULE_NAME = 'CorrectRadii'
+
+ @staticmethod
+ def __call__(self):
+ filletradius = getattr(self, 'FilletRadius', INDETERMINATE)
+ assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False
+
+class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptDiskSolidPolygonal'
+ RULE_NAME = 'DirectrixIsPolyline'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_add2.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False
+
+class IfcSweptSurface_SweptCurveType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSweptSurface'
+ RULE_NAME = 'SweptCurveType'
+
+ @staticmethod
+ def __call__(self):
+ sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE)
+ assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False
+
+class IfcSwitchingDevice_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSwitchingDevice'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSwitchingDevice_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSwitchingDevice'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSwitchingDeviceType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSwitchingDeviceType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcSystemFurnitureElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSystemFurnitureElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcSystemFurnitureElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSystemFurnitureElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcSystemFurnitureElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcSystemFurnitureElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTShapeProfileDef_ValidFlangeThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTShapeProfileDef'
+ RULE_NAME = 'ValidFlangeThickness'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE)
+ assert (flangethickness < depth) is not False
+
+class IfcTShapeProfileDef_ValidWebThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTShapeProfileDef'
+ RULE_NAME = 'ValidWebThickness'
+
+ @staticmethod
+ def __call__(self):
+ flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ assert (webthickness < flangewidth) is not False
+
+class IfcTable_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTable'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ rows = getattr(self, 'Rows', INDETERMINATE)
+ assert (sizeof([temp for temp in rows if hiindex(getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False
+
+class IfcTable_WR2:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTable'
+ RULE_NAME = 'WR2'
+
+ @staticmethod
+ def __call__(self):
+ numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE)
+ assert (0 <= numberofheadings <= 1) is not False
+
+def calc_IfcTable_NumberOfCellsInRow(self):
+ rows = getattr(self, 'Rows', INDETERMINATE)
+ return hiindex(getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))
+
+def calc_IfcTable_NumberOfHeadings(self):
+ rows = getattr(self, 'Rows', INDETERMINATE)
+ return sizeof([temp for temp in rows if getattr(temp, 'IsHeading', INDETERMINATE)])
+
+def calc_IfcTable_NumberOfDataRows(self):
+ rows = getattr(self, 'Rows', INDETERMINATE)
+ return sizeof([temp for temp in rows if not getattr(temp, 'IsHeading', INDETERMINATE)])
+
+class IfcTank_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTank'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTank_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTank'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTankType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTankType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTask_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTask'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTask_HasName:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTask'
+ RULE_NAME = 'HasName'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcTaskType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTaskType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ProcessType', INDETERMINATE)))) is not False
+
+class IfcTelecomAddress_MinimumDataProvided:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTelecomAddress'
+ RULE_NAME = 'MinimumDataProvided'
+
+ @staticmethod
+ def __call__(self):
+ telephonenumbers = getattr(self, 'TelephoneNumbers', INDETERMINATE)
+ facsimilenumbers = getattr(self, 'FacsimileNumbers', INDETERMINATE)
+ pagernumber = getattr(self, 'PagerNumber', INDETERMINATE)
+ electronicmailaddresses = getattr(self, 'ElectronicMailAddresses', INDETERMINATE)
+ wwwhomepageurl = getattr(self, 'WWWHomePageURL', INDETERMINATE)
+ messagingids = getattr(self, 'MessagingIDs', INDETERMINATE)
+ assert (exists(telephonenumbers) or exists(facsimilenumbers) or exists(pagernumber) or exists(electronicmailaddresses) or exists(wwwhomepageurl) or exists(messagingids)) is not False
+
+class IfcTendon_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendon'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTendon_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendon'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTendonAnchor_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonAnchor'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTendonAnchor_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonAnchor'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTendonAnchorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonAnchorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTendonConduit_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonConduit'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTendonConduit_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonConduit'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTendonConduitType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonConduitType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTendonType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTendonType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcTessellatedFaceSet_Dim(self):
+ return 3
+
+class IfcTextLiteralWithExtent_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTextLiteralWithExtent'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ extent = getattr(self, 'Extent', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcplanarbox' in typeof(extent)) is not False
+
+class IfcTextStyleFontModel_MeasureOfFontSize:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTextStyleFontModel'
+ RULE_NAME = 'MeasureOfFontSize'
+
+ @staticmethod
+ def __call__(self):
+ assert ('ifc4x3_add2.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False
+
+class IfcTopologyRepresentation_WR21:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTopologyRepresentation'
+ RULE_NAME = 'WR21'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False
+
+class IfcTopologyRepresentation_WR22:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTopologyRepresentation'
+ RULE_NAME = 'WR22'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False
+
+class IfcTopologyRepresentation_WR23:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTopologyRepresentation'
+ RULE_NAME = 'WR23'
+
+ @staticmethod
+ def __call__(self):
+ assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False
+
+class IfcToroidalSurface_MajorLargerMinor:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcToroidalSurface'
+ RULE_NAME = 'MajorLargerMinor'
+
+ @staticmethod
+ def __call__(self):
+ majorradius = getattr(self, 'MajorRadius', INDETERMINATE)
+ minorradius = getattr(self, 'MinorRadius', INDETERMINATE)
+ assert (minorradius < majorradius) is not False
+
+class IfcTrackElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrackElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTrackElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrackElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTrackElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrackElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTransformer_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransformer'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTransformer_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransformer'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctransformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTransformerType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransformerType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTransportElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransportElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTransportElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransportElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTransportElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTransportElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self):
+ coordindex = getattr(self, 'CoordIndex', INDETERMINATE)
+ return sizeof(coordindex)
+
+class IfcTriangulatedIrregularNetwork_NotClosed:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTriangulatedIrregularNetwork'
+ RULE_NAME = 'NotClosed'
+
+ @staticmethod
+ def __call__(self):
+ assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False
+
+class IfcTrimmedCurve_NoTrimOfBoundedCurves:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrimmedCurve'
+ RULE_NAME = 'NoTrimOfBoundedCurves'
+
+ @staticmethod
+ def __call__(self):
+ basiscurve = getattr(self, 'BasisCurve', INDETERMINATE)
+ assert (not 'ifc4x3_add2.ifcboundedcurve' in typeof(basiscurve)) is not False
+
+class IfcTrimmedCurve_Trim1ValuesConsistent:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrimmedCurve'
+ RULE_NAME = 'Trim1ValuesConsistent'
+
+ @staticmethod
+ def __call__(self):
+ trim1 = getattr(self, 'Trim1', INDETERMINATE)
+ assert (hiindex(trim1) == 1 or typeof(express_getitem(trim1, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != typeof(express_getitem(trim1, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcTrimmedCurve_Trim2ValuesConsistent:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTrimmedCurve'
+ RULE_NAME = 'Trim2ValuesConsistent'
+
+ @staticmethod
+ def __call__(self):
+ trim2 = getattr(self, 'Trim2', INDETERMINATE)
+ assert (hiindex(trim2) == 1 or typeof(express_getitem(trim2, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != typeof(express_getitem(trim2, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcTubeBundle_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTubeBundle'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcTubeBundle_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTubeBundle'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcTubeBundleType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTubeBundleType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcTypeObject_NameRequired:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTypeObject'
+ RULE_NAME = 'NameRequired'
+
+ @staticmethod
+ def __call__(self):
+ assert exists(getattr(self, 'Name', INDETERMINATE)) is not False
+
+class IfcTypeObject_UniquePropertySetNames:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTypeObject'
+ RULE_NAME = 'UniquePropertySetNames'
+
+ @staticmethod
+ def __call__(self):
+ haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE)
+ assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False
+
+class IfcTypeProduct_ApplicableOccurrence:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcTypeProduct'
+ RULE_NAME = 'ApplicableOccurrence'
+
+ @staticmethod
+ def __call__(self):
+ assert (not exists(lambda : express_getitem(getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in getattr(express_getitem(getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_add2.ifcproduct' in typeof(temp)]) == 0) is not False
+
+class IfcUShapeProfileDef_ValidFlangeThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUShapeProfileDef'
+ RULE_NAME = 'ValidFlangeThickness'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE)
+ assert (flangethickness < depth / 2.0) is not False
+
+class IfcUShapeProfileDef_ValidWebThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUShapeProfileDef'
+ RULE_NAME = 'ValidWebThickness'
+
+ @staticmethod
+ def __call__(self):
+ flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE)
+ webthickness = getattr(self, 'WebThickness', INDETERMINATE)
+ assert (webthickness < flangewidth) is not False
+
+class IfcUnitAssignment_WR01:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitAssignment'
+ RULE_NAME = 'WR01'
+
+ @staticmethod
+ def __call__(self):
+ units = getattr(self, 'Units', INDETERMINATE)
+ assert IfcCorrectUnitAssignment(units) is not False
+
+class IfcUnitaryControlElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryControlElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcUnitaryControlElement_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryControlElement'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcUnitaryControlElementType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryControlElementType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcUnitaryEquipment_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryEquipment'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcUnitaryEquipment_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryEquipment'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcUnitaryEquipmentType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcUnitaryEquipmentType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcValve_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcValve'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcValve_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcValve'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcValveType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcValveType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcVector_MagGreaterOrEqualZero:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVector'
+ RULE_NAME = 'MagGreaterOrEqualZero'
+
+ @staticmethod
+ def __call__(self):
+ magnitude = getattr(self, 'Magnitude', INDETERMINATE)
+ assert (magnitude >= 0.0) is not False
+
+def calc_IfcVector_Dim(self):
+ orientation = getattr(self, 'Orientation', INDETERMINATE)
+ return getattr(orientation, 'Dim', INDETERMINATE)
+
+class IfcVehicle_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVehicle'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcVehicle_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVehicle'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvehicletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcVehicleType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVehicleType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcVibrationDamper_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationDamper'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcVibrationDamper_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationDamper'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcVibrationDamperType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationDamperType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcVibrationIsolator_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationIsolator'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcVibrationIsolator_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationIsolator'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcVibrationIsolatorType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVibrationIsolatorType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcVirtualElement_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVirtualElement'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcVoidingFeature_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcVoidingFeature'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWall_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWall'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWall_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWall'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcWallStandardCase_HasMaterialLayerSetUsage:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWallStandardCase'
+ RULE_NAME = 'HasMaterialLayerSetUsage'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof([temp for temp in usedin(self, 'ifc4x3_add2.ifcrelassociates.relatedobjects') if 'ifc4x3_add2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_add2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False
+
+class IfcWallType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWallType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcWasteTerminal_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWasteTerminal'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWasteTerminal_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWasteTerminal'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcWasteTerminalType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWasteTerminalType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcWindow_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindow'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWindow_CorrectTypeAssigned:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindow'
+ RULE_NAME = 'CorrectTypeAssigned'
+
+ @staticmethod
+ def __call__(self):
+ istypedby = getattr(self, 'IsTypedBy', INDETERMINATE)
+ assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False
+
+class IfcWindowLiningProperties_WR31:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowLiningProperties'
+ RULE_NAME = 'WR31'
+
+ @staticmethod
+ def __call__(self):
+ liningdepth = getattr(self, 'LiningDepth', INDETERMINATE)
+ liningthickness = getattr(self, 'LiningThickness', INDETERMINATE)
+ assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False
+
+class IfcWindowLiningProperties_WR32:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowLiningProperties'
+ RULE_NAME = 'WR32'
+
+ @staticmethod
+ def __call__(self):
+ firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE)
+ secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE)
+ assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False
+
+class IfcWindowLiningProperties_WR33:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowLiningProperties'
+ RULE_NAME = 'WR33'
+
+ @staticmethod
+ def __call__(self):
+ firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE)
+ secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE)
+ assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False
+
+class IfcWindowLiningProperties_WR34:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowLiningProperties'
+ RULE_NAME = 'WR34'
+
+ @staticmethod
+ def __call__(self):
+ assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcWindowPanelProperties_ApplicableToType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowPanelProperties'
+ RULE_NAME = 'ApplicableToType'
+
+ @staticmethod
+ def __call__(self):
+ assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False
+
+class IfcWindowType_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWindowType'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (predefinedtype != getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False
+
+class IfcWorkCalendar_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWorkCalendar'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWorkPlan_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWorkPlan'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcWorkSchedule_CorrectPredefinedType:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcWorkSchedule'
+ RULE_NAME = 'CorrectPredefinedType'
+
+ @staticmethod
+ def __call__(self):
+ predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE)
+ assert (not exists(predefinedtype) or predefinedtype != getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False
+
+class IfcZShapeProfileDef_ValidFlangeThickness:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcZShapeProfileDef'
+ RULE_NAME = 'ValidFlangeThickness'
+
+ @staticmethod
+ def __call__(self):
+ depth = getattr(self, 'Depth', INDETERMINATE)
+ flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE)
+ assert (flangethickness < depth / 2.0) is not False
+
+class IfcZone_WR1:
+ SCOPE = 'entity'
+ TYPE_NAME = 'IfcZone'
+ RULE_NAME = 'WR1'
+
+ @staticmethod
+ def __call__(self):
+ assert (sizeof(getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in getattr(express_getitem(getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_add2.ifczone' in typeof(temp) or 'ifc4x3_add2.ifcspace' in typeof(temp) or 'ifc4x3_add2.ifcspatialzone' in typeof(temp))]) == 0) is not False
+
+class IfcRepresentationContextSameWCS:
+ SCOPE = 'file'
+
+ @staticmethod
+ def __call__(file):
+ IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext')
+ isdifferent = False
+ if sizeof(IfcGeometricRepresentationContext) > 1:
+ for i in range(2, hiindex(IfcGeometricRepresentationContext) + 1):
+ if getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE):
+ isdifferent = not IfcSameValidPrecision(getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE))
+ if isdifferent == True:
+ break
+ assert (isdifferent == False) is not False
+
+class IfcSingleProjectInstance:
+ SCOPE = 'file'
+
+ @staticmethod
+ def __call__(file):
+ IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject')
+ assert (sizeof(IfcProject) <= 1) is not False
+
+def IfcAssociatedSurface(arg):
+ surf = getattr(arg, 'BasisSurface', INDETERMINATE)
+ return surf
+
+def IfcBaseAxis(dim, axis1, axis2, axis3):
+ if dim == 3:
+ d1 = nvl(IfcNormalise(axis3), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]))
+ d2 = IfcFirstProjAxis(d1, axis1)
+ u = [d2, IfcSecondProjAxis(d1, d2, axis2), d1]
+ elif exists(axis1):
+ d1 = IfcNormalise(axis1)
+ u = [d1, IfcOrthogonalComplement(d1)]
+ if exists(axis2):
+ factor = IfcDotProduct(axis2, express_getitem(u, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))
+ if factor < 0.0:
+ u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(getattr(express_getitem(u, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[2 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(getattr(express_getitem(u, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ elif exists(axis2):
+ d1 = IfcNormalise(axis2)
+ u = [IfcOrthogonalComplement(d1), d1]
+ u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(getattr(express_getitem(u, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[2 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(getattr(express_getitem(u, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ else:
+ u = [IfcDirection(DirectionRatios=[1.0, 0.0]), IfcDirection(DirectionRatios=[0.0, 1.0])]
+ return u
+
+def IfcBooleanChoose(b, choice1, choice2):
+ if b:
+ return choice1
+ else:
+ return choice2
+
+def IfcBuild2Axes(refdirection):
+ d = nvl(IfcNormalise(refdirection), IfcDirection(DirectionRatios=[1.0, 0.0]))
+ return [d, IfcOrthogonalComplement(d)]
+
+def IfcBuildAxes(axis, refdirection):
+ d1 = nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]))
+ d2 = IfcFirstProjAxis(d1, refdirection)
+ return [d2, getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1]
+
+def IfcConsecutiveSegments(segments):
+ result = True
+ for i in range(1, hiindex(segments) - 1 + 1):
+ if express_getitem(express_getitem(segments, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), hiindex(segments[i - EXPRESS_ONE_BASED_INDEXING]) - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) != express_getitem(express_getitem(segments, i + 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE):
+ result = False
+ break
+ return result
+
+def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots):
+ result = True
+ sum = express_getitem(knotmult, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ for i in range(2, upknots + 1):
+ sum = sum + express_getitem(knotmult, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if degree < 1 or upknots < 2 or upcp < degree or (sum != degree + upcp + 2):
+ result = False
+ return result
+ k = express_getitem(knotmult, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if k < 1 or k > degree + 1:
+ result = False
+ return result
+ for i in range(2, upknots + 1):
+ if express_getitem(knotmult, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) < 1 or express_getitem(knots, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= express_getitem(knots, i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE):
+ result = False
+ return result
+ k = express_getitem(knotmult, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if i < upknots and k > degree:
+ result = False
+ return result
+ if i == upknots and k > degree + 1:
+ result = False
+ return result
+ return result
+
+def IfcConvertDirectionInto2D(direction):
+ direction2d = IfcDirection(DirectionRatios=[0.0, 1.0])
+ temp = list(getattr(direction2d, 'DirectionRatios', INDETERMINATE))
+ temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(getattr(direction, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ direction2d.DirectionRatios = temp
+ temp = list(getattr(direction2d, 'DirectionRatios', INDETERMINATE))
+ temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ direction2d.DirectionRatios = temp
+ return direction2d
+
+def IfcCorrectDimensions(m, dim):
+ if m == lengthunit:
+ if dim == IfcDimensionalExponents(1, 0, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == massunit:
+ if dim == IfcDimensionalExponents(0, 1, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == timeunit:
+ if dim == IfcDimensionalExponents(0, 0, 1, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electriccurrentunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 1, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == thermodynamictemperatureunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 1, 0, 0):
+ return True
+ else:
+ return False
+ elif m == amountofsubstanceunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 0, 1, 0):
+ return True
+ else:
+ return False
+ elif m == luminousintensityunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 1):
+ return True
+ else:
+ return False
+ elif m == planeangleunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == solidangleunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == areaunit:
+ if dim == IfcDimensionalExponents(2, 0, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == volumeunit:
+ if dim == IfcDimensionalExponents(3, 0, 0, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == absorbeddoseunit:
+ if dim == IfcDimensionalExponents(2, 0, -2, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == radioactivityunit:
+ if dim == IfcDimensionalExponents(0, 0, -1, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electriccapacitanceunit:
+ if dim == IfcDimensionalExponents(-2, -1, 4, 2, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == doseequivalentunit:
+ if dim == IfcDimensionalExponents(2, 0, -2, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electricchargeunit:
+ if dim == IfcDimensionalExponents(0, 0, 1, 1, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electricconductanceunit:
+ if dim == IfcDimensionalExponents(-2, -1, 3, 2, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electricvoltageunit:
+ if dim == IfcDimensionalExponents(2, 1, -3, -1, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == electricresistanceunit:
+ if dim == IfcDimensionalExponents(2, 1, -3, -2, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == energyunit:
+ if dim == IfcDimensionalExponents(2, 1, -2, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == forceunit:
+ if dim == IfcDimensionalExponents(1, 1, -2, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == frequencyunit:
+ if dim == IfcDimensionalExponents(0, 0, -1, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == inductanceunit:
+ if dim == IfcDimensionalExponents(2, 1, -2, -2, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == illuminanceunit:
+ if dim == IfcDimensionalExponents(-2, 0, 0, 0, 0, 0, 1):
+ return True
+ else:
+ return False
+ elif m == luminousfluxunit:
+ if dim == IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 1):
+ return True
+ else:
+ return False
+ elif m == magneticfluxunit:
+ if dim == IfcDimensionalExponents(2, 1, -2, -1, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == magneticfluxdensityunit:
+ if dim == IfcDimensionalExponents(0, 1, -2, -1, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == powerunit:
+ if dim == IfcDimensionalExponents(2, 1, -3, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ elif m == pressureunit:
+ if dim == IfcDimensionalExponents(-1, 1, -2, 0, 0, 0, 0):
+ return True
+ else:
+ return False
+ else:
+ return unknown
+
+def IfcCorrectFillAreaStyle(styles):
+ hatching = 0
+ tiles = 0
+ colour = 0
+ external = 0
+ external = sizeof([style for style in styles if 'ifc4x3_add2.ifcexternallydefinedhatchstyle' in typeof(style)])
+ hatching = sizeof([style for style in styles if 'ifc4x3_add2.ifcfillareastylehatching' in typeof(style)])
+ tiles = sizeof([style for style in styles if 'ifc4x3_add2.ifcfillareastyletiles' in typeof(style)])
+ colour = sizeof([style for style in styles if 'ifc4x3_add2.ifccolour' in typeof(style)])
+ if external > 1:
+ return False
+ if external == 1 and (hatching > 0 or tiles > 0 or colour > 0):
+ return False
+ if colour > 1:
+ return False
+ if hatching > 0 and tiles > 0:
+ return False
+ return True
+
+def IfcCorrectLocalPlacement(axisplacement, relplacement):
+ if exists(relplacement):
+ if 'ifc4x3_add2.ifcgridplacement' in typeof(relplacement):
+ return None
+ if 'ifc4x3_add2.ifclocalplacement' in typeof(relplacement):
+ if 'ifc4x3_add2.ifcaxis2placement2d' in typeof(axisplacement):
+ return True
+ if 'ifc4x3_add2.ifcaxis2placement3d' in typeof(axisplacement):
+ if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3:
+ return True
+ else:
+ return False
+ return True
+ return None
+
+def IfcCorrectUnitAssignment(units):
+ namedunitnumber = 0
+ derivedunitnumber = 0
+ monetaryunitnumber = 0
+ namedunitnames = express_set([])
+ derivedunitnames = express_set([])
+ namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add2.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))])
+ derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add2.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))])
+ monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_add2.ifcmonetaryunit' in typeof(temp)])
+ for i in range(1, sizeof(units) + 1):
+ if 'ifc4x3_add2.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)):
+ namedunitnames = namedunitnames + getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE)
+ if 'ifc4x3_add2.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)):
+ derivedunitnames = derivedunitnames + getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE)
+ return sizeof(namedunitnames) == namedunitnumber and sizeof(derivedunitnames) == derivedunitnumber and (monetaryunitnumber <= 1)
+
+def IfcCrossProduct(arg1, arg2):
+ if (not exists(arg1) or getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or getattr(arg2, 'Dim', INDETERMINATE) == 2):
+ return None
+ else:
+ v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE)
+ v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE)
+ res = IfcDirection(DirectionRatios=[express_getitem(v1, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - express_getitem(v1, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(v1, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - express_getitem(v1, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(v1, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - express_getitem(v1, 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(v2, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)])
+ mag = 0.0
+ for i in range(1, 3 + 1):
+ mag = mag + express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if mag > 0.0:
+ result = IfcVector(Orientation=res, Magnitude=sqrt(mag))
+ else:
+ result = IfcVector(Orientation=arg1, Magnitude=0.0)
+ return result
+
+def IfcCurveDim(curve):
+ if 'ifc4x3_add2.ifcline' in typeof(curve):
+ return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcconic' in typeof(curve):
+ return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcpolyline' in typeof(curve):
+ return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifctrimmedcurve' in typeof(curve):
+ return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE))
+ if 'ifc4x3_add2.ifcgradientcurve' in typeof(curve):
+ return 3
+ if 'ifc4x3_add2.ifcsegmentedreferencecurve' in typeof(curve):
+ return 3
+ if 'ifc4x3_add2.ifccompositecurve' in typeof(curve):
+ return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcbsplinecurve' in typeof(curve):
+ return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcoffsetcurve2d' in typeof(curve):
+ return 2
+ if 'ifc4x3_add2.ifcoffsetcurve3d' in typeof(curve):
+ return 3
+ if 'ifc4x3_add2.ifcoffsetcurvebydistances' in typeof(curve):
+ return 3
+ if 'ifc4x3_add2.ifccurvesegment2d' in typeof(curve):
+ return 2
+ if 'ifc4x3_add2.ifcpolynomialcurve' in typeof(curve):
+ if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2:
+ return 2
+ return 3
+ if 'ifc4x3_add2.ifcpcurve' in typeof(curve):
+ return 3
+ if 'ifc4x3_add2.ifcindexedpolycurve' in typeof(curve):
+ return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcspiral' in typeof(curve):
+ return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE)
+ return None
+
+def IfcCurveWeightsPositive(b):
+ result = True
+ for i in range(0, getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1):
+ if express_getitem(getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0:
+ result = False
+ return result
+ return result
+
+def IfcDeriveDimensionalExponents(unitelements):
+ result = IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0)
+ for i in range(loindex(unitelements), hiindex(unitelements) + 1):
+ result.LengthExponent = getattr(result, 'LengthExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE)
+ result.MassExponent = getattr(result, 'MassExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE)
+ result.TimeExponent = getattr(result, 'TimeExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE)
+ result.ElectricCurrentExponent = getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE)
+ result.ThermodynamicTemperatureExponent = getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE)
+ result.AmountOfSubstanceExponent = getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE)
+ result.LuminousIntensityExponent = getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * getattr(getattr(getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE)
+ return result
+
+def IfcDimensionsForSIUnit(n):
+ if n == metre:
+ return IfcDimensionalExponents(1, 0, 0, 0, 0, 0, 0)
+ elif n == square_metre:
+ return IfcDimensionalExponents(2, 0, 0, 0, 0, 0, 0)
+ elif n == cubic_metre:
+ return IfcDimensionalExponents(3, 0, 0, 0, 0, 0, 0)
+ elif n == gram:
+ return IfcDimensionalExponents(0, 1, 0, 0, 0, 0, 0)
+ elif n == second:
+ return IfcDimensionalExponents(0, 0, 1, 0, 0, 0, 0)
+ elif n == ampere:
+ return IfcDimensionalExponents(0, 0, 0, 1, 0, 0, 0)
+ elif n == kelvin:
+ return IfcDimensionalExponents(0, 0, 0, 0, 1, 0, 0)
+ elif n == mole:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 1, 0)
+ elif n == candela:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 1)
+ elif n == radian:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0)
+ elif n == steradian:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0)
+ elif n == hertz:
+ return IfcDimensionalExponents(0, 0, -1, 0, 0, 0, 0)
+ elif n == newton:
+ return IfcDimensionalExponents(1, 1, -2, 0, 0, 0, 0)
+ elif n == pascal:
+ return IfcDimensionalExponents(-1, 1, -2, 0, 0, 0, 0)
+ elif n == joule:
+ return IfcDimensionalExponents(2, 1, -2, 0, 0, 0, 0)
+ elif n == watt:
+ return IfcDimensionalExponents(2, 1, -3, 0, 0, 0, 0)
+ elif n == coulomb:
+ return IfcDimensionalExponents(0, 0, 1, 1, 0, 0, 0)
+ elif n == volt:
+ return IfcDimensionalExponents(2, 1, -3, -1, 0, 0, 0)
+ elif n == farad:
+ return IfcDimensionalExponents(-2, -1, 4, 2, 0, 0, 0)
+ elif n == ohm:
+ return IfcDimensionalExponents(2, 1, -3, -2, 0, 0, 0)
+ elif n == siemens:
+ return IfcDimensionalExponents(-2, -1, 3, 2, 0, 0, 0)
+ elif n == weber:
+ return IfcDimensionalExponents(2, 1, -2, -1, 0, 0, 0)
+ elif n == tesla:
+ return IfcDimensionalExponents(0, 1, -2, -1, 0, 0, 0)
+ elif n == henry:
+ return IfcDimensionalExponents(2, 1, -2, -2, 0, 0, 0)
+ elif n == degree_celsius:
+ return IfcDimensionalExponents(0, 0, 0, 0, 1, 0, 0)
+ elif n == lumen:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 1)
+ elif n == lux:
+ return IfcDimensionalExponents(-2, 0, 0, 0, 0, 0, 1)
+ elif n == becquerel:
+ return IfcDimensionalExponents(0, 0, -1, 0, 0, 0, 0)
+ elif n == gray:
+ return IfcDimensionalExponents(2, 0, -2, 0, 0, 0, 0)
+ elif n == sievert:
+ return IfcDimensionalExponents(2, 0, -2, 0, 0, 0, 0)
+ else:
+ return IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0)
+
+def IfcDotProduct(arg1, arg2):
+ if not exists(arg1) or not exists(arg2):
+ scalar = None
+ elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE):
+ scalar = None
+ else:
+ vec1 = IfcNormalise(arg1)
+ vec2 = IfcNormalise(arg2)
+ ndim = getattr(arg1, 'Dim', INDETERMINATE)
+ scalar = 0.0
+ for i in range(1, ndim + 1):
+ scalar = scalar + express_getitem(getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ return scalar
+
+def IfcFirstProjAxis(zaxis, arg):
+ if not exists(zaxis):
+ return None
+ else:
+ z = IfcNormalise(zaxis)
+ if not exists(arg):
+ if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]:
+ v = IfcDirection(DirectionRatios=[1.0, 0.0, 0.0])
+ else:
+ v = IfcDirection(DirectionRatios=[0.0, 1.0, 0.0])
+ else:
+ if getattr(arg, 'Dim', INDETERMINATE) != 3:
+ return None
+ if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0:
+ return None
+ else:
+ v = IfcNormalise(arg)
+ xvec = IfcScalarTimesVector(IfcDotProduct(v, z), z)
+ xaxis = getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE)
+ xaxis = IfcNormalise(xaxis)
+ return xaxis
+
+def IfcGetBasisSurface(c):
+ surfs = []
+ if 'ifc4x3_add2.ifcpcurve' in typeof(c):
+ surfs = [getattr(c, 'BasisSurface', INDETERMINATE)]
+ elif 'ifc4x3_add2.ifcsurfacecurve' in typeof(c):
+ n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE))
+ for i in range(1, n + 1):
+ surfs = surfs + IfcAssociatedSurface(express_getitem(getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))
+ if 'ifc4x3_add2.ifccompositecurveonsurface' in typeof(c):
+ n = sizeof(getattr(c, 'Segments', INDETERMINATE))
+ if 'ifc4x3_add2.ifccurvesegment' in typeof(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE))
+ if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE))
+ if n > 1:
+ for i in range(2, n + 1):
+ if 'ifc4x3_add2.ifccurvesegment' in typeof(express_getitem(getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE))
+ if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(express_getitem(getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE))
+ return surfs
+
+def IfcListToArray(lis, low, u):
+ n = sizeof(lis)
+ if n != u - low + 1:
+ return None
+ else:
+ res = [express_getitem(lis, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)] * n
+ for i in range(2, n + 1):
+ temp = list(res)
+ temp[low + i - 1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(lis, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ res = temp
+ return res
+
+def IfcLoopHeadToTail(aloop):
+ p = True
+ n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE))
+ for i in range(2, n + 1):
+ p = p and getattr(express_getitem(getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == getattr(express_getitem(getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE)
+ return p
+
+def IfcMakeArrayOfArray(lis, low1, u1, low2, u2):
+ if u1 - low1 + 1 != sizeof(lis):
+ return None
+ if u2 - low2 + 1 != sizeof(express_getitem(lis, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ return None
+ res = [IfcListToArray(express_getitem(lis, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), low2, u2)] * u1 - low1 + 1
+ for i in range(2, hiindex(lis) + 1):
+ if u2 - low2 + 1 != sizeof(express_getitem(lis, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ return None
+ temp = list(res)
+ temp[low1 + i - 1 - EXPRESS_ONE_BASED_INDEXING] = IfcListToArray(express_getitem(lis, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), low2, u2)
+ res = temp
+ return res
+
+def IfcMlsTotalThickness(layerset):
+ max = getattr(express_getitem(getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE)
+ if sizeof(getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1:
+ for i in range(2, hiindex(getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1):
+ max = max + getattr(express_getitem(getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE)
+ return max
+
+def IfcNormalise(arg):
+ v = IfcDirection(DirectionRatios=[1.0, 0.0])
+ vec = IfcVector(Orientation=IfcDirection(DirectionRatios=[1.0, 0.0]), Magnitude=1.0)
+ result = v
+ if not exists(arg):
+ return None
+ else:
+ if 'ifc4x3_add2.ifcvector' in typeof(arg):
+ ndim = getattr(arg, 'Dim', INDETERMINATE)
+ v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE)
+ vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE)
+ vec.Orientation = v
+ if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0:
+ return None
+ else:
+ vec.Magnitude = 1.0
+ else:
+ ndim = getattr(arg, 'Dim', INDETERMINATE)
+ v.DirectionRatios = getattr(arg, 'DirectionRatios', INDETERMINATE)
+ mag = 0.0
+ for i in range(1, ndim + 1):
+ mag = mag + express_getitem(getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if mag > 0.0:
+ mag = sqrt(mag)
+ for i in range(1, ndim + 1):
+ temp = list(getattr(v, 'DirectionRatios', INDETERMINATE))
+ temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag
+ v.DirectionRatios = temp
+ if 'ifc4x3_add2.ifcvector' in typeof(arg):
+ vec.Orientation = v
+ result = vec
+ else:
+ result = v
+ else:
+ return None
+ return result
+
+def IfcOrthogonalComplement(vec):
+ if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2:
+ return None
+ else:
+ result = IfcDirection(DirectionRatios=[-express_getitem(getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(getattr(vec, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)])
+ return result
+
+def IfcPathHeadToTail(apath):
+ n = 0
+ p = unknown
+ n = sizeof(getattr(apath, 'EdgeList', INDETERMINATE))
+ for i in range(2, n + 1):
+ p = p and getattr(express_getitem(getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == getattr(express_getitem(getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE)
+ return p
+
+def IfcPointDim(point):
+ if 'ifc4x3_add2.ifccartesianpoint' in typeof(point):
+ return hiindex(getattr(point, 'Coordinates', INDETERMINATE))
+ if 'ifc4x3_add2.ifcpointbydistanceexpression' in typeof(point):
+ return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcpointoncurve' in typeof(point):
+ return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifcpointonsurface' in typeof(point):
+ return getattr(getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE)
+ return None
+
+def IfcPointListDim(pointlist):
+ if 'ifc4x3_add2.ifccartesianpointlist2d' in typeof(pointlist):
+ return 2
+ if 'ifc4x3_add2.ifccartesianpointlist3d' in typeof(pointlist):
+ return 3
+ return None
+
+def IfcSameAxis2Placement(ap1, ap2, epsilon):
+ return IfcSameDirection(express_getitem(getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(getattr(ap1, 'Location', INDETERMINATE), getattr(ap2, 'Location', INDETERMINATE), epsilon)
+
+def IfcSameCartesianPoint(cp1, cp2, epsilon):
+ cp1x = express_getitem(getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ cp1y = express_getitem(getattr(cp1, 'Coordinates', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ cp1z = 0
+ cp2x = express_getitem(getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ cp2y = express_getitem(getattr(cp2, 'Coordinates', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ cp2z = 0
+ if sizeof(getattr(cp1, 'Coordinates', INDETERMINATE)) > 2:
+ cp1z = express_getitem(getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if sizeof(getattr(cp2, 'Coordinates', INDETERMINATE)) > 2:
+ cp2z = express_getitem(getattr(cp2, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ return IfcSameValue(cp1x, cp2x, epsilon) and IfcSameValue(cp1y, cp2y, epsilon) and IfcSameValue(cp1z, cp2z, epsilon)
+
+def IfcSameDirection(dir1, dir2, epsilon):
+ dir1x = express_getitem(getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ dir1y = express_getitem(getattr(dir1, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ dir1z = 0
+ dir2x = express_getitem(getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ dir2y = express_getitem(getattr(dir2, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ dir2z = 0
+ if sizeof(getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2:
+ dir1z = express_getitem(getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if sizeof(getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2:
+ dir2z = express_getitem(getattr(dir2, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ return IfcSameValue(dir1x, dir2x, epsilon) and IfcSameValue(dir1y, dir2y, epsilon) and IfcSameValue(dir1z, dir2z, epsilon)
+
+def IfcSameValidPrecision(epsilon1, epsilon2):
+ defaulteps = 1e-06
+ derivationofeps = 1.001
+ uppereps = 1.0
+ valideps1 = nvl(epsilon1, defaulteps)
+ valideps2 = nvl(epsilon2, defaulteps)
+ return 0.0 < valideps1 and valideps1 <= derivationofeps * valideps2 and (valideps2 <= derivationofeps * valideps1) and (valideps2 < uppereps)
+
+def IfcSameValue(value1, value2, epsilon):
+ defaulteps = 1e-06
+ valideps = nvl(epsilon, defaulteps)
+ return value1 + valideps > value2 and value1 < value2 + valideps
+
+def IfcScalarTimesVector(scalar, vec):
+ if not exists(scalar) or not exists(vec):
+ return None
+ else:
+ if 'ifc4x3_add2.ifcvector' in typeof(vec):
+ v = getattr(vec, 'Orientation', INDETERMINATE)
+ mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE)
+ else:
+ v = vec
+ mag = scalar
+ if mag < 0.0:
+ for i in range(1, sizeof(getattr(v, 'DirectionRatios', INDETERMINATE)) + 1):
+ temp = list(getattr(v, 'DirectionRatios', INDETERMINATE))
+ temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ v.DirectionRatios = temp
+ mag = -mag
+ result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag)
+ return result
+
+def IfcSecondProjAxis(zaxis, xaxis, arg):
+ if not exists(arg):
+ v = IfcDirection(DirectionRatios=[0.0, 1.0, 0.0])
+ else:
+ v = arg
+ temp = IfcScalarTimesVector(IfcDotProduct(v, zaxis), zaxis)
+ yaxis = IfcVectorDifference(v, temp)
+ temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis)
+ yaxis = IfcVectorDifference(yaxis, temp)
+ yaxis = IfcNormalise(yaxis)
+ return getattr(yaxis, 'Orientation', INDETERMINATE)
+
+def IfcSegmentDim(segment):
+ if 'ifc4x3_add2.ifccurvesegment' in typeof(segment):
+ return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE)
+ if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(segment):
+ return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE)
+ return None
+
+def IfcShapeRepresentationTypes(reptype, items):
+ count = 0
+ if getattr(reptype, 'lower', INDETERMINATE)() == 'point':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcpoint' in typeof(temp) or 'ifc4x3_add2.ifccartesianpointlist' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccartesianpointlist3d' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccurve' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'segment':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsegment' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsurface' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsectionedsurface' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcannotationfillarea' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'text':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifctextliteral' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcbsplinesurface' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d':
+ count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_add2.ifcpoint', 'ifc4x3_add2.ifccurve', 'ifc4x3_add2.ifcgeometriccurveset', 'ifc4x3_add2.ifcannotationfillarea', 'ifc4x3_add2.ifctextliteral']) == 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcgeometricset' in typeof(temp) or 'ifc4x3_add2.ifcpoint' in typeof(temp) or 'ifc4x3_add2.ifccurve' in typeof(temp) or ('ifc4x3_add2.ifcsurface' in typeof(temp))])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_add2.ifcgeometricset' in typeof(temp) or 'ifc4x3_add2.ifcpoint' in typeof(temp) or ('ifc4x3_add2.ifccurve' in typeof(temp))])
+ for i in range(1, hiindex(items) + 1):
+ if 'ifc4x3_add2.ifcgeometricset' in typeof(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ if sizeof([temp for temp in getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_add2.ifcsurface' in typeof(temp)]) > 0:
+ count = count - 1
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifctessellateditem' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifctessellateditem', 'ifc4x3_add2.ifcshellbasedsurfacemodel', 'ifc4x3_add2.ifcfacebasedsurfacemodel', 'ifc4x3_add2.ifcsolidmodel'] * typeof(temp)) >= 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifctessellateditem', 'ifc4x3_add2.ifcshellbasedsurfacemodel', 'ifc4x3_add2.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsolidmodel' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifcextrudedareasolid', 'ifc4x3_add2.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_add2.ifcextrudedareasolidtapered', 'ifc4x3_add2.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifcsweptareasolid', 'ifc4x3_add2.ifcsweptdisksolid', 'ifc4x3_add2.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifcbooleanresult', 'ifc4x3_add2.ifccsgprimitive3d', 'ifc4x3_add2.ifccsgsolid'] * typeof(temp)) >= 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping':
+ count = sizeof([temp for temp in items if sizeof(['ifc4x3_add2.ifccsgsolid', 'ifc4x3_add2.ifcbooleanclippingresult'] * typeof(temp)) >= 1])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcfacetedbrep' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcmanifoldsolidbrep' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcboundingbox' in typeof(temp)])
+ if sizeof(items) > 1:
+ count = 0
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsectionedspine' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifclightsource' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcmappeditem' in typeof(temp)])
+ else:
+ return None
+ return count == sizeof(items)
+
+def IfcSurfaceWeightsPositive(b):
+ result = True
+ weights = getattr(b, 'Weights', INDETERMINATE)
+ for i in range(0, getattr(b, 'UUpper', INDETERMINATE) + 1):
+ for j in range(0, getattr(b, 'VUpper', INDETERMINATE) + 1):
+ if express_getitem(express_getitem(weights, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), j - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0:
+ result = False
+ return result
+ return result
+
+def IfcTaperedSweptAreaProfiles(startarea, endarea):
+ result = False
+ if 'ifc4x3_add2.ifcparameterizedprofiledef' in typeof(startarea):
+ if 'ifc4x3_add2.ifcderivedprofiledef' in typeof(endarea):
+ result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE)
+ else:
+ result = typeof(startarea) == typeof(endarea)
+ elif 'ifc4x3_add2.ifcderivedprofiledef' in typeof(endarea):
+ result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE)
+ else:
+ result = False
+ return result
+
+def IfcTopologyRepresentationTypes(reptype, items):
+ count = 0
+ if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcvertex' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcedge' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'path':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcpath' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'face':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcface' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell':
+ count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcopenshell' in typeof(temp) or 'ifc4x3_add2.ifcclosedshell' in typeof(temp)])
+ elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined':
+ return True
+ else:
+ return None
+ return count == sizeof(items)
+
+def IfcUniqueDefinitionNames(relations):
+ properties = express_set([])
+ if sizeof(relations) == 0:
+ return True
+ for i in range(1, hiindex(relations) + 1):
+ definition = getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE)
+ if 'ifc4x3_add2.ifcpropertysetdefinition' in typeof(definition):
+ properties = properties + definition
+ elif 'ifc4x3_add2.ifcpropertysetdefinitionset' in typeof(definition):
+ definitionset = definition
+ for j in range(1, hiindex(definitionset) + 1):
+ properties = properties + express_getitem(definitionset, j - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ result = IfcUniquePropertySetNames(properties)
+ return result
+
+def IfcUniquePropertyName(properties):
+ names = express_set([])
+ for i in range(1, hiindex(properties) + 1):
+ names = names + getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE)
+ return sizeof(names) == sizeof(properties)
+
+def IfcUniquePropertySetNames(properties):
+ names = express_set([])
+ unnamed = 0
+ for i in range(1, hiindex(properties) + 1):
+ if 'ifc4x3_add2.ifcpropertyset' in typeof(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)):
+ names = names + getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE)
+ else:
+ unnamed = unnamed + 1
+ return sizeof(names) + unnamed == sizeof(properties)
+
+def IfcUniquePropertyTemplateNames(properties):
+ names = express_set([])
+ for i in range(1, hiindex(properties) + 1):
+ names = names + getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE)
+ return sizeof(names) == sizeof(properties)
+
+def IfcUniqueQuantityNames(properties):
+ names = express_set([])
+ for i in range(1, hiindex(properties) + 1):
+ names = names + getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE)
+ return sizeof(names) == sizeof(properties)
+
+def IfcVectorDifference(arg1, arg2):
+ if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE):
+ return None
+ else:
+ if 'ifc4x3_add2.ifcvector' in typeof(arg1):
+ mag1 = getattr(arg1, 'Magnitude', INDETERMINATE)
+ vec1 = getattr(arg1, 'Orientation', INDETERMINATE)
+ else:
+ mag1 = 1.0
+ vec1 = arg1
+ if 'ifc4x3_add2.ifcvector' in typeof(arg2):
+ mag2 = getattr(arg2, 'Magnitude', INDETERMINATE)
+ vec2 = getattr(arg2, 'Orientation', INDETERMINATE)
+ else:
+ mag2 = 1.0
+ vec2 = arg2
+ vec1 = IfcNormalise(vec1)
+ vec2 = IfcNormalise(vec2)
+ ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE))
+ mag = 0.0
+ res = IfcDirection(DirectionRatios=[0.0] * ndim)
+ for i in range(1, ndim + 1):
+ temp = list(getattr(res, 'DirectionRatios', INDETERMINATE))
+ temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ res.DirectionRatios = temp
+ mag = mag + express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if mag > 0.0:
+ result = IfcVector(Orientation=res, Magnitude=sqrt(mag))
+ else:
+ result = IfcVector(Orientation=vec1, Magnitude=0.0)
+ return result
+
+def IfcVectorSum(arg1, arg2):
+ if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE):
+ return None
+ else:
+ if 'ifc4x3_add2.ifcvector' in typeof(arg1):
+ mag1 = getattr(arg1, 'Magnitude', INDETERMINATE)
+ vec1 = getattr(arg1, 'Orientation', INDETERMINATE)
+ else:
+ mag1 = 1.0
+ vec1 = arg1
+ if 'ifc4x3_add2.ifcvector' in typeof(arg2):
+ mag2 = getattr(arg2, 'Magnitude', INDETERMINATE)
+ vec2 = getattr(arg2, 'Orientation', INDETERMINATE)
+ else:
+ mag2 = 1.0
+ vec2 = arg2
+ vec1 = IfcNormalise(vec1)
+ vec2 = IfcNormalise(vec2)
+ ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE))
+ mag = 0.0
+ res = IfcDirection(DirectionRatios=[0.0] * ndim)
+ for i in range(1, ndim + 1):
+ temp = list(getattr(res, 'DirectionRatios', INDETERMINATE))
+ temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ res.DirectionRatios = temp
+ mag = mag + express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)
+ if mag > 0.0:
+ result = IfcVector(Orientation=res, Magnitude=sqrt(mag))
+ else:
+ result = IfcVector(Orientation=vec1, Magnitude=0.0)
+ return result
\ No newline at end of file
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py
index ead551f82c..9355c0b196 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py
@@ -5115,7 +5115,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5196,7 +5196,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5205,7 +5205,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5214,7 +5214,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5313,7 +5313,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5322,7 +5322,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5331,7 +5331,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6010,7 +6010,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -7564,7 +7564,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7573,7 +7573,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py
index 7cb03faf7f..f609e02f19 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py
@@ -5156,7 +5156,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5237,7 +5237,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5246,7 +5246,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5255,7 +5255,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5354,7 +5354,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5363,7 +5363,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5372,7 +5372,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6098,7 +6098,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -7652,7 +7652,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7661,7 +7661,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py
index dbd6e0cf57..2a1c28b7ae 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py
@@ -5145,7 +5145,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5226,7 +5226,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5235,7 +5235,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5244,7 +5244,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5343,7 +5343,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5352,7 +5352,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5361,7 +5361,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6087,7 +6087,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -7685,7 +7685,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7694,7 +7694,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py
index 73a893e372..06a5a6d06b 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py
@@ -5161,7 +5161,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5242,7 +5242,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5251,7 +5251,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5260,7 +5260,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5359,7 +5359,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5368,7 +5368,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5377,7 +5377,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6103,7 +6103,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBlobTexture_RasterCodeByteStream:
SCOPE = 'entity'
@@ -7701,7 +7701,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7710,7 +7710,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py
index 01a6930dde..d9224c2551 100644
--- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py
+++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py
@@ -5118,7 +5118,7 @@ class IfcBoxAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']) is not False
class IfcCardinalPointReference_GreaterThanZero:
SCOPE = 'type'
@@ -5199,7 +5199,7 @@ class IfcFontStyle_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'italic', 'oblique']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False
class IfcFontVariant_WR1:
SCOPE = 'type'
@@ -5208,7 +5208,7 @@ class IfcFontVariant_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False
class IfcFontWeight_WR1:
SCOPE = 'type'
@@ -5217,7 +5217,7 @@ class IfcFontWeight_WR1:
@staticmethod
def __call__(self):
- assert (self in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps', '100', '200', '300', '400', '500', '600', '700', '800', '900']) is not False
class IfcHeatingValueMeasure_WR1:
SCOPE = 'type'
@@ -5316,7 +5316,7 @@ class IfcTextAlignment_WR1:
@staticmethod
def __call__(self):
- assert (self in ['left', 'right', 'center', 'justify']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False
class IfcTextDecoration_WR1:
SCOPE = 'type'
@@ -5325,7 +5325,7 @@ class IfcTextDecoration_WR1:
@staticmethod
def __call__(self):
- assert (self in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False
class IfcTextTransformation_WR1:
SCOPE = 'type'
@@ -5334,7 +5334,7 @@ class IfcTextTransformation_WR1:
@staticmethod
def __call__(self):
- assert (self in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
+ assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False
class IfcActorRole_WR1:
SCOPE = 'entity'
@@ -6061,7 +6061,7 @@ class IfcBlobTexture_SupportedRasterFormat:
@staticmethod
def __call__(self):
- assert (getattr(self, 'RasterFormat', INDETERMINATE) in ['bmp', 'jpg', 'gif', 'png']) is not False
+ assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False
class IfcBoiler_CorrectPredefinedType:
SCOPE = 'entity'
@@ -7638,7 +7638,7 @@ class IfcDraughtingPreDefinedColour_PreDefinedColourNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False
class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
SCOPE = 'entity'
@@ -7647,7 +7647,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames:
@staticmethod
def __call__(self):
- assert (getattr(self, 'Name', INDETERMINATE) in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
+ assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False
class IfcDuctFitting_CorrectPredefinedType:
SCOPE = 'entity'
diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py
index 4852ff067c..11d222d318 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/element.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/element.py
@@ -19,7 +19,7 @@
import ifcopenshell
-def get_pset(element, name, prop=None, should_inherit=True):
+def get_pset(element, name, prop=None, should_inherit=True, verbose=False):
"""Retrieve a single property set or single property
This is more efficient than ifcopenshell.util.element.get_psets if you know
@@ -64,7 +64,7 @@ def get_pset(element, name, prop=None, should_inherit=True):
if should_inherit:
element_type = ifcopenshell.util.element.get_type(element)
if element_type:
- type_pset = get_pset(element_type, name, prop, should_inherit=False)
+ type_pset = get_pset(element_type, name, prop, should_inherit=False, verbose=verbose)
for relationship in element.IsDefinedBy:
if relationship.is_a("IfcRelDefinesByProperties"):
definition = relationship.RelatingPropertyDefinition
@@ -77,19 +77,19 @@ def get_pset(element, name, prop=None, should_inherit=True):
if not prop:
if type_pset:
- occurrence_pset = get_property_definition(pset)
+ occurrence_pset = get_property_definition(pset, verbose=verbose)
if occurrence_pset:
type_pset.update(occurrence_pset)
return type_pset
- return get_property_definition(pset)
+ return get_property_definition(pset, verbose=verbose)
- value = get_property_definition(pset, prop)
+ value = get_property_definition(pset, prop=prop, verbose=verbose)
if value is None and type_pset is not None:
return type_pset
return value
-def get_psets(element, psets_only=False, qtos_only=False, should_inherit=True):
+def get_psets(element, psets_only=False, qtos_only=False, should_inherit=True, verbose=False):
"""Retrieve property sets, their related properties' names & values and ids.
If should_inherit is true, the pset "id" only refers to the ID of the
@@ -122,12 +122,12 @@ def get_psets(element, psets_only=False, qtos_only=False, should_inherit=True):
continue
if qtos_only and not definition.is_a("IfcElementQuantity"):
continue
- psets[definition.Name] = get_property_definition(definition)
+ psets[definition.Name] = get_property_definition(definition, verbose=verbose)
elif element.is_a("IfcMaterialDefinition") or element.is_a("IfcProfileDef"):
for definition in getattr(element, "HasProperties", None) or []:
if qtos_only:
continue
- psets[definition.Name] = get_property_definition(definition)
+ psets[definition.Name] = get_property_definition(definition, verbose=verbose)
elif hasattr(element, "IsDefinedBy"):
if should_inherit:
element_type = ifcopenshell.util.element.get_type(element)
@@ -140,21 +140,21 @@ def get_psets(element, psets_only=False, qtos_only=False, should_inherit=True):
continue
if qtos_only and not definition.is_a("IfcElementQuantity"):
continue
- psets.setdefault(definition.Name, {}).update(get_property_definition(definition))
+ psets.setdefault(definition.Name, {}).update(get_property_definition(definition, verbose=verbose))
return psets
-def get_property_definition(definition, prop=None):
+def get_property_definition(definition, prop=None, verbose=False):
if not definition:
return
if prop:
if definition.is_a("IfcElementQuantity"):
- return get_quantity(definition.Quantities, prop)
+ return get_quantity(definition.Quantities, prop, verbose=verbose)
elif definition.is_a("IfcPropertySet"):
- return get_property(definition.HasProperties, prop)
+ return get_property(definition.HasProperties, prop, verbose=verbose)
elif definition.is_a("IfcMaterialProperties") or definition.is_a("IfcProfileProperties"):
- return get_property(definition.Properties, prop)
+ return get_property(definition.Properties, prop, verbose=verbose)
else:
# Entity introduced in IFC4
# definition.is_a('IfcPreDefinedPropertySet'):
@@ -166,11 +166,11 @@ def get_property_definition(definition, prop=None):
props = {}
if definition.is_a("IfcElementQuantity"):
- props.update(get_quantities(definition.Quantities))
+ props.update(get_quantities(definition.Quantities, verbose=verbose))
elif definition.is_a("IfcPropertySet"):
- props.update(get_properties(definition.HasProperties))
+ props.update(get_properties(definition.HasProperties, verbose=verbose))
elif definition.is_a("IfcMaterialProperties") or definition.is_a("IfcProfileProperties"):
- props.update(get_properties(definition.Properties))
+ props.update(get_properties(definition.Properties, verbose=verbose))
else:
# Entity introduced in IFC4
# definition.is_a('IfcPreDefinedPropertySet'):
@@ -181,76 +181,105 @@ def get_property_definition(definition, prop=None):
return props
-def get_quantity(quantities, name):
+def get_quantity(quantities, name, verbose=False):
for quantity in quantities or []:
if quantity.Name != name:
continue
if quantity.is_a("IfcPhysicalSimpleQuantity"):
- return quantity[3]
- results[quantity.Name] = quantity[3]
+ result = quantity[3]
elif quantity.is_a("IfcPhysicalComplexQuantity"):
data = {k: v for k, v in quantity.get_info().items() if v is not None and k != "Name"}
data["properties"] = get_quantities(quantity.HasQuantities)
del data["HasQuantities"]
- return data
+ result = data
+ if verbose:
+ result = {"id": quantity.id(), "class": quantity.is_a(), "value": result}
+ return result
-def get_quantities(quantities, name=None):
+def get_quantities(quantities, verbose=False):
results = {}
for quantity in quantities or []:
if quantity.is_a("IfcPhysicalSimpleQuantity"):
results[quantity.Name] = quantity[3]
+ if verbose:
+ results[quantity.Name] = {
+ "id": quantity.id(),
+ "class": quantity.is_a(),
+ "value": results[quantity.Name],
+ }
elif quantity.is_a("IfcPhysicalComplexQuantity"):
data = {k: v for k, v in quantity.get_info().items() if v is not None and k != "Name"}
data["properties"] = get_quantities(quantity.HasQuantities)
del data["HasQuantities"]
results[quantity.Name] = data
+ if verbose:
+ results[quantity.Name] = {
+ "id": quantity.id(),
+ "class": quantity.is_a(),
+ "value": results[quantity.Name],
+ }
return results
-def get_property(properties, name):
+def get_property(properties, name, verbose=False):
for prop in properties or []:
if prop.Name != name:
continue
if prop.is_a("IfcPropertySingleValue"):
- return prop.NominalValue.wrappedValue if prop.NominalValue else None
+ result = prop.NominalValue.wrappedValue if prop.NominalValue else None
elif prop.is_a("IfcPropertyEnumeratedValue"):
- return [v.wrappedValue for v in prop.EnumerationValues] if prop.EnumerationValues else None
+ result = [v.wrappedValue for v in prop.EnumerationValues] if prop.EnumerationValues else None
elif prop.is_a("IfcPropertyListValue"):
- return [v.wrappedValue for v in prop.ListValues] or None
+ result = [v.wrappedValue for v in prop.ListValues] or None
elif prop.is_a("IfcPropertyBoundedValue"):
data = prop.get_info()
del data["Unit"]
- return data
+ result = data
elif prop.is_a("IfcPropertyTableValue"):
- return prop.get_info()
+ result = prop.get_info()
elif prop.is_a("IfcComplexProperty"):
data = {k: v for k, v in prop.get_info().items() if v is not None and k != "Name"}
data["properties"] = get_properties(prop.HasProperties)
del data["HasProperties"]
- return data
+ result = data
+ if verbose:
+ result = {"id": prop.id(), "class": prop.is_a(), "value": result}
+ return result
-def get_properties(properties):
+def get_properties(properties, verbose=False):
results = {}
for prop in properties or []:
if prop.is_a("IfcPropertySingleValue"):
results[prop.Name] = prop.NominalValue.wrappedValue if prop.NominalValue else None
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
elif prop.is_a("IfcPropertyEnumeratedValue"):
results[prop.Name] = [v.wrappedValue for v in prop.EnumerationValues] if prop.EnumerationValues else None
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
elif prop.is_a("IfcPropertyListValue"):
results[prop.Name] = [v.wrappedValue for v in prop.ListValues] or None
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
elif prop.is_a("IfcPropertyBoundedValue"):
data = prop.get_info()
del data["Unit"]
results[prop.Name] = data
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
elif prop.is_a("IfcPropertyTableValue"):
results[prop.Name] = prop.get_info()
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
elif prop.is_a("IfcComplexProperty"):
data = {k: v for k, v in prop.get_info().items() if v is not None and k != "Name"}
data["properties"] = get_properties(prop.HasProperties)
del data["HasProperties"]
results[prop.Name] = data
+ if verbose:
+ results[prop.Name] = {"id": prop.id(), "class": prop.is_a(), "value": results[prop.Name]}
return results
@@ -406,6 +435,8 @@ def get_materials(element, should_inherit=True):
return [p.Material for p in material.MaterialProfiles]
elif material.is_a("IfcMaterialConstituentSet"):
return [c.Material for c in material.MaterialConstituents]
+ elif material.is_a("IfcMaterialList"):
+ return list(material.Materials)
def get_styles(element):
@@ -577,7 +608,7 @@ def get_elements_by_layer(ifc_file, layer):
:rtype: list[ifcopenshell.entity_instance.entity_instance]
"""
results = set()
- for item in layer.AssignedItems:
+ for item in layer.AssignedItems or []:
if item.is_a("IfcShapeRepresentation"):
results.update(get_elements_by_representation(ifc_file, item))
elif item.is_a("IfcRepresentationItem"):
@@ -918,7 +949,7 @@ def remove_deep2(ifc_file, element, also_consider=[], do_not_delete=[]):
:param element: The starting element that defines the subgraph
:type element: ifcopenshell.entity_instance.entity_instance
"""
- ifc_file.batch()
+ # ifc_file.batch()
to_delete = set()
subgraph = list(ifc_file.traverse(element, breadth_first=True))
subgraph.extend(also_consider)
@@ -953,7 +984,7 @@ def remove_deep2(ifc_file, element, also_consider=[], do_not_delete=[]):
# We delete elements from subgraph in reverse order to allow batching to work
for subelement in filter(lambda e: e in to_delete, subgraph[::-1]):
ifc_file.remove(subelement)
- ifc_file.unbatch()
+ # ifc_file.unbatch()
def copy(ifc_file, element):
diff --git a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py
index 81e6277d25..7cf57b225a 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py
@@ -20,10 +20,12 @@ RUN_FROM_DEV_REPO = False
import ifcopenshell.api
import ifcopenshell.util.attribute
-from pathlib import Path
-from lxml import etree
import glob
import sys
+from pathlib import Path
+from lxml import etree
+from itertools import chain
+
if not RUN_FROM_DEV_REPO:
import zipfile
@@ -47,8 +49,9 @@ IFC2x3_OUTPUT_PATH = BASE_MODULE_PATH / "schema/Pset_IFC2X3.ifc"
PROPERTY_TYPES_DICT = {
"TypePropertySingleValue": ("P_SINGLEVALUE", "type"),
# in IFC2X3 weirdly xmls have TypeSimpleProperty
- # no difference with TypePropertySingleValue though
- "TypeSimpleProperty": ("P_SINGLEVALUE", "type"),
+ # which is actually more P_REFERENCEVALUE value, not P_SINGLEVALUE
+ # because it utilizes IfcTimeSeries
+ "TypeSimpleProperty": ("P_REFERENCEVALUE", "type"),
"TypePropertyListValue": ("P_LISTVALUE", "type"),
"TypePropertyBoundedValue": ("P_BOUNDEDVALUE", "type"),
"TypePropertyReferenceValue": ("P_REFERENCEVALUE", "reftype"),
@@ -121,12 +124,15 @@ class PsetTemplatesGenerator:
def parse_psets_data(self, schema_name, pset_data_glob, project_name, ifc_output_path):
schema_name = schema_name.upper()
self.ifc_file = ifcopenshell.api.run("project.create_file", version=schema_name)
+ self.units = dict()
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(schema_name)
self.ifc_derived_unit_enum = (
schema.declaration_by_name("IfcDerivedUnitEnum").as_enumeration_type().enumeration_items()
)
self.ifc_unit_enum = schema.declaration_by_name("IfcUnitEnum").as_enumeration_type().enumeration_items()
+ select_types = schema.declaration_by_name("IfcValue").select_list()
+ self.ifc_value_types = [t.name() for t in chain(*[select_type.select_list() for select_type in select_types])]
project = self.ifc_entity("IfcProject", Name=project_name, GlobalId=ifcopenshell.guid.new())
psets_list = []
@@ -246,11 +252,38 @@ class PsetTemplatesGenerator:
self.add_prop_type_params_to_prop(pset_type, pdef, pset_property, property_type_tag)
return pset_property
+ def get_unit(self, unit_type):
+ # to define USERDEFINED unit type we'd need more info
+ # like UserDefinedType name and elements for IfcDerivedUnit
+ # which is not provided in .xmls
+ if unit_type != "USERDEFINED":
+ return None
+
+ if unit_type in self.units:
+ return self.units[unit_type]
+
+ unit_entity = None
+ if unit_type in self.ifc_derived_unit_enum:
+ # TODO: define derived units if there will be someday api like `ifcopenshell.api.run("unit.add_derived_unit", ...)`
+ # since creating IfcDerivedUnit is more complex and requiring settting up elements it consists of
+ # and related IfcNamedUnits
+ # unit_entity = ifcopenshell.api.run("unit.add_derived_unit", self.ifc_file, unit_type=unit_type)
+ pass
+ elif unit_type in self.ifc_unit_enum:
+ unit_entity = ifcopenshell.api.run("unit.add_si_unit", self.ifc_file, unit_type=unit_type)
+ elif unit_type == "IFCMONETARYUNIT":
+ self.ifc_entity("IFCMONETARYUNIT", Currency="")
+ else:
+ print(f"WARNING. Wasn't able to find units {unit_type} in schema.")
+ self.units[unit_type] = unit_entity
+ return unit_entity
+
def add_prop_type_params_to_prop(self, pset_type, pdef, pset_property, property_type_tag):
if not pset_type:
property_type = pdef.find("QtoType").text
else:
property_type, property_type_parse = PROPERTY_TYPES_DICT[property_type_tag]
+
pset_property.TemplateType = property_type
if not pset_type or property_type == "P_COMPLEX":
@@ -285,7 +318,24 @@ class PsetTemplatesGenerator:
pset_property.SecondaryMeasureType = property_type_xml.find("DefinedValue/DataType").get("type")
else:
if property_type == "P_REFERENCEVALUE":
- pset_property.PrimaryMeasureType = property_type_xml.get(property_type_parse)
+ if property_type_tag == "TypeSimpleProperty":
+ type_xml = property_type_xml.find("DataType")
+ primary_measure_type = type_xml.get(property_type_parse)
+ unit_type = property_type_xml.find("UnitType")
+ secondary_measure_type = (
+ unit_type.get(property_type_parse).strip() if unit_type is not None else None
+ )
+
+ if primary_measure_type != "IfcTimeSeries":
+ unit = self.get_unit(secondary_measure_type)
+ secondary_measure_type = primary_measure_type
+ primary_measure_type = "IfcTimeSeries"
+ pset_property.PrimaryUnit = unit
+
+ pset_property.PrimaryMeasureType = primary_measure_type
+ pset_property.SecondaryMeasureType = secondary_measure_type
+ else:
+ pset_property.PrimaryMeasureType = property_type_xml.get(property_type_parse)
# TODO: ifc4add2 seems to have some secondary measure types
# need to add it in ifc4x3 too
# if https://github.com/buildingSMART/IFC4.3.x-development/issues/586 is resolved
@@ -297,17 +347,10 @@ class PsetTemplatesGenerator:
# only used only in ifc2x3, omitted in ifc4 and ifc4x3
unit_type_xml = property_type_xml.find("UnitType")
+
if unit_type_xml is not None:
unit_type = unit_type_xml.get(property_type_parse).strip()
- if unit_type.lower().startswith("ifc"):
- unit_entity = self.ifc_entity(unit_type)
- else:
- if unit_type in self.ifc_derived_unit_enum:
- unit_entity = self.ifc_entity("IfcDerivedUnit", UnitType=unit_type)
- elif unit_type in self.ifc_unit_enum:
- unit_entity = self.ifc_entity("IfcNamedUnit", UnitType=unit_type)
- else:
- print("WARNING. Wasn't able to find units {unit_type} in schema.")
+ unit_entity = self.get_unit(unit_type)
pset_property.PrimaryUnit = unit_entity
type_xml = property_type_xml.find(property_type_node)
@@ -317,6 +360,12 @@ class PsetTemplatesGenerator:
else:
primary_measure_type = type_xml.get(property_type_parse)
+ primary_measure_type = primary_measure_type.strip()
+ if property_type == "P_SINGLEVALUE" and primary_measure_type not in self.ifc_value_types:
+ print(
+ f"Error assinging {primary_measure_type} as PrimaryMeasureType - it's not IfcValue, {property_type_tag}"
+ )
+
pset_property.PrimaryMeasureType = primary_measure_type
diff --git a/src/ifcopenshell-python/ifcopenshell/util/geolocation.py b/src/ifcopenshell-python/ifcopenshell/util/geolocation.py
index d4737ac016..7128630c2f 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/geolocation.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/geolocation.py
@@ -23,11 +23,34 @@ import ifcopenshell.util.unit
def dms2dd(degrees, minutes, seconds, ms=0):
+ """Convert degrees, minutes, and (milli)seconds to decimal degrees
+
+ :param degrees: The degrees component
+ :type degrees: int
+ :param minutes: The minutes component
+ :type minutes: int
+ :param seconds: The seconds component
+ :type seconds: int
+ :param ms: The milliseconds component
+ :type ms: int
+ :return: The angle in decimal degrees.
+ :rtype: float
+ """
dd = float(degrees) + float(minutes) / 60.0 + float(seconds) / (3600.0) + float(ms / 3600000000.0)
return dd
def dd2dms(dd, use_ms=False):
+ """Convert decimal degrees to degrees, minutes, and (milli)seconds format
+
+ :param dd: The decimal degrees
+ :type dd: float
+ :param use_ms: True if to include milliseconds and false otherwise. Defaults to false.
+ :type use_ms: bool
+ :return: The angle in a tuple of either 3 or 4 values, being degrees,
+ minutes, seconds, and optionally milliseconds.
+ :rtype: tuple[float]
+ """
dd = float(dd)
sign = 1 if dd >= 0 else -1
dd = abs(dd)
@@ -43,6 +66,43 @@ def dd2dms(dd, use_ms=False):
def xyz2enh(x, y, z, eastings, northings, orthogonal_height, x_axis_abscissa, x_axis_ordinate, scale=None):
+ """Manually convert local XYZ coordinates to map eastings, northings, and height
+
+ This function is for advanced users as it allows you to specify your own
+ helmert transformation parameters (i.e. those typically stored in
+ IfcMapConversion). This manual approach is useful for tests or in case your
+ are setting your helmert transformations in non-standard locations, or if
+ you are applying your own temporary false origin (such as when federating
+ models for digital twins of large cities).
+
+ No unit conversion is performed.
+
+ For most scenarios you should use ``auto_xyz2enh`` instead.
+
+ :param x: The X local engineering coordinate.
+ :type x: float
+ :param y: The Y local engineering coordinate.
+ :type y: float
+ :param z: The Z local engineering coordinate.
+ :type z: float
+ :param eastings: The eastings offset to apply.
+ :type eastings: float
+ :param northings: The northings offset to apply.
+ :type northings: float
+ :param orthogonal_height: The orthogonal height offset to apply.
+ :type orthogonal_height: float
+ :param x_axis_abscissa: The X axis abscissa (i.e. first coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_abscissa: float
+ :param x_axis_ordinate: The X axis ordinate (i.e. second coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_ordinate: float
+ :param scale: The combined scale factor to convert from local coordinates
+ to map coordinates.
+ :type scale: float
+ :return: A tuple of three ordinates representing the easting, northing and height.
+ :rtype: tuple[float]
+ """
if scale is None:
scale = 1.0
rotation = math.atan2(x_axis_ordinate, x_axis_abscissa)
@@ -76,20 +136,60 @@ def xyz2enh_ifc4x3(
def auto_xyz2enh(ifc_file, x, y, z):
+ """Convert from local XYZ coordinates to global map coordinate eastings, northings, and heights
+
+ The necessary georeferencing map conversion is automatically detected from
+ the IFC map conversion parameters present in the IFC model. If no map
+ conversion is present, then the Z coordinate is returned unchanged.
+
+ For IFC2X3, the map conversion is detected from the IfcProject's
+ ePSet_MapConversion. See the "User Guide for Geo-referencing in IFC":
+ https://www.buildingsmart.org/standards/bsi-standards/standards-library/
+
+ :param ifc_file: The IFC file
+ :type ifc_file: ifcopenshell.file.file
+ :param x: The X local engineering coordinate provided in project length units.
+ :type x: float
+ :param y: The Y local engineering coordinate provided in project length units.
+ :type y: float
+ :param z: The Z local engineering coordinate provided in project length units.
+ :type z: float
+ :return: The global map coordinate eastings, northings, and height in map units.
+ :rtype: tuple[float]
+ """
+ conversion = None
try:
conversion = ifc_file.by_type("IfcMapConversion")
except:
- return (x, y, z)
- if not conversion:
- return (x, y, z)
- conversion = conversion[0]
- e = conversion.Eastings or 0
- n = conversion.Northings or 0
- h = conversion.OrthogonalHeight or 0
- xaa = conversion.XAxisAbscissa or 0
- xao = conversion.XAxisOrdinate or 0
- scale = conversion.Scale or 0
- map_unit = conversion.TargetCRS.MapUnit
+ pass
+
+ if conversion:
+ conversion = conversion[0]
+ e = conversion.Eastings or 0
+ n = conversion.Northings or 0
+ h = conversion.OrthogonalHeight or 0
+ xaa = conversion.XAxisAbscissa or 0
+ xao = conversion.XAxisOrdinate or 0
+ scale = conversion.Scale or 1
+ map_unit = conversion.TargetCRS.MapUnit
+ else:
+ project = ifc_file.by_type("IfcProject")[0]
+ conversion = ifcopenshell.util.element.get_pset(project, "ePSet_MapConversion")
+ if not conversion:
+ return (x, y, z)
+
+ e = conversion.get("Eastings", None) or 0
+ n = conversion.get("Northings", None) or 0
+ h = conversion.get("OrthogonalHeight", None) or 0
+ xaa = conversion.get("XAxisAbscissa", None) or 0
+ xao = conversion.get("XAxisOrdinate", None) or 0
+ scale = conversion.get("Scale", None) or 1
+ map_unit = None
+
+ if not xaa and not xao:
+ xaa = 1.0
+ xao = 0.0
+
if map_unit:
# Warning! This definition has changed in IFC4X3 such that map_unit no
# longer affects unit conversion, only the Scale attribute affects unit
@@ -103,6 +203,74 @@ def auto_xyz2enh(ifc_file, x, y, z):
return xyz2enh(x, y, z, e, n, h, xaa, xao, scale)
+def auto_enh2xyz(ifc_file, easting, northing, height):
+ """Convert from global map coordinate eastings, northings, and heights to local XYZ coordinates
+
+ The necessary georeferencing map conversion is automatically detected from
+ the IFC map conversion parameters present in the IFC model. If no map
+ conversion is present, then the Z coordinate is returned unchanged.
+
+ For IFC2X3, the map conversion is detected from the IfcProject's
+ ePSet_MapConversion. See the "User Guide for Geo-referencing in IFC":
+ https://www.buildingsmart.org/standards/bsi-standards/standards-library/
+
+ :param ifc_file: The IFC file
+ :type ifc_file: ifcopenshell.file.file
+ :param easting: The global easting map coordinate provided in map units.
+ :type easting: float
+ :param northing: The global northing map coordinate provided in map units.
+ :type northing: float
+ :param height: The global height map coordinate provided in map units.
+ :type height: float
+ :return: The local engineering XYZ coordinates in project length units.
+ :rtype: tuple[float]
+ """
+ conversion = None
+ try:
+ conversion = ifc_file.by_type("IfcMapConversion")
+ except:
+ pass
+
+ if conversion:
+ conversion = conversion[0]
+ e = conversion.Eastings or 0
+ n = conversion.Northings or 0
+ h = conversion.OrthogonalHeight or 0
+ xaa = conversion.XAxisAbscissa or 0
+ xao = conversion.XAxisOrdinate or 0
+ scale = conversion.Scale or 1
+ map_unit = conversion.TargetCRS.MapUnit
+ else:
+ project = ifc_file.by_type("IfcProject")[0]
+ conversion = ifcopenshell.util.element.get_pset(project, "ePSet_MapConversion")
+ if not conversion:
+ return (easting, northing, height)
+
+ e = conversion.get("Eastings", None) or 0
+ n = conversion.get("Northings", None) or 0
+ h = conversion.get("OrthogonalHeight", None) or 0
+ xaa = conversion.get("XAxisAbscissa", None) or 0
+ xao = conversion.get("XAxisOrdinate", None) or 0
+ scale = conversion.get("Scale", None) or 1
+ map_unit = None
+
+ if not xaa and not xao:
+ xaa = 1.0
+ xao = 0.0
+
+ if map_unit:
+ # Warning! This definition has changed in IFC4X3 such that map_unit no
+ # longer affects unit conversion, only the Scale attribute affects unit
+ # conversion. TODO: consolidate once IFC4X3 confirmed.
+ project_unit = ifcopenshell.util.unit.get_project_unit(ifc_file, "LENGTHUNIT")
+ map_prefix = getattr(map_unit, "Prefix", None)
+ project_prefix = getattr(project_unit, "Prefix", None)
+ e = ifcopenshell.util.unit.convert(e, map_prefix, map_unit.Name, project_prefix, project_unit.Name)
+ n = ifcopenshell.util.unit.convert(n, map_prefix, map_unit.Name, project_prefix, project_unit.Name)
+ h = ifcopenshell.util.unit.convert(h, map_prefix, map_unit.Name, project_prefix, project_unit.Name)
+ return enh2xyz(easting, northing, height, e, n, h, xaa, xao, scale)
+
+
def auto_z2e(ifc_file, z):
"""Convert a Z coordinate to an elevation using model georeferencing data
@@ -110,6 +278,10 @@ def auto_z2e(ifc_file, z):
the IFC map conversion parameters present in the IFC model. If no map
conversion is present, then the Z coordinate is returned unchanged.
+ For IFC2X3, the map conversion is detected from the IfcProject's
+ ePSet_MapConversion. See the "User Guide for Geo-referencing in IFC":
+ https://www.buildingsmart.org/standards/bsi-standards/standards-library/
+
:param ifc_file: The IFC file
:type ifc_file: ifcopenshell.file.file
:param z: The Z local engineering coordinate provided in project length units.
@@ -117,15 +289,25 @@ def auto_z2e(ifc_file, z):
:return: The elevation in project length units.
:rtype: float
"""
+ conversion = None
try:
conversion = ifc_file.by_type("IfcMapConversion")
except:
- return z
- if not conversion or not conversion[0].OrthogonalHeight:
- return z
- conversion = conversion[0]
- h = conversion.OrthogonalHeight
- map_unit = conversion.TargetCRS.MapUnit
+ pass
+
+ if conversion and not conversion[0].OrthogonalHeight:
+ conversion = conversion[0]
+ h = conversion.OrthogonalHeight
+ map_unit = conversion.TargetCRS.MapUnit
+ else:
+ project = ifc_file.by_type("IfcProject")[0]
+ conversion = ifcopenshell.util.element.get_pset(project, "ePSet_MapConversion")
+ if not conversion:
+ return z
+
+ h = conversion.get("OrthogonalHeight", None) or 0
+ map_unit = None
+
if map_unit:
# Warning! This definition has changed in IFC4X3 such that map_unit no
# longer affects unit conversion, only the Scale attribute affects unit
@@ -142,10 +324,61 @@ def auto_z2e(ifc_file, z):
def z2e(z, h):
+ """Manually convert a Z coordinate to an elevation
+
+ This function is for advanced users as it allows you to specify your own
+ orthogonal height offset.
+
+ For most scenarios you should use ``auto_z2e`` instead.
+
+ :param z: The Z local engineering coordinate provided in project length units.
+ :type z: float
+ :param h: The orthogonal height offset in project length units.
+ :type h: float
+ :return: The elevation in project length units.
+ :rtype: float
+ """
return z + h
def enh2xyz(e, n, h, eastings, northings, orthogonal_height, x_axis_abscissa, x_axis_ordinate, scale=None):
+ """Manually convert map eastings, northings, and height to local XYZ coordinates
+
+ This function is for advanced users as it allows you to specify your own
+ helmert transformation parameters (i.e. those typically stored in
+ IfcMapConversion). This manual approach is useful for tests or in case your
+ are setting your helmert transformations in non-standard locations, or if
+ you are applying your own temporary false origin (such as when federating
+ models for digital twins of large cities).
+
+ No unit conversion is performed.
+
+ For most scenarios you should use ``auto_enh2xyz`` instead.
+
+ :param e: The global easting map coordinate.
+ :type e: float
+ :param n: The global northing map coordinate.
+ :type n: float
+ :param h: The global height map coordinate.
+ :type h: float
+ :param eastings: The eastings offset to apply.
+ :type eastings: float
+ :param northings: The northings offset to apply.
+ :type northings: float
+ :param orthogonal_height: The orthogonal height offset to apply.
+ :type orthogonal_height: float
+ :param x_axis_abscissa: The X axis abscissa (i.e. first coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_abscissa: float
+ :param x_axis_ordinate: The X axis ordinate (i.e. second coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_ordinate: float
+ :param scale: The combined scale factor to convert from local coordinates
+ to map coordinates.
+ :type scale: float
+ :return: A tuple of three ordinates representing XYZ.
+ :rtype: tuple[float]
+ """
if scale is None:
scale = 1.0
rotation = math.atan2(x_axis_ordinate, x_axis_abscissa)
@@ -158,6 +391,37 @@ def enh2xyz(e, n, h, eastings, northings, orthogonal_height, x_axis_abscissa, x_
def local2global(matrix, eastings, northings, orthogonal_height, x_axis_abscissa, x_axis_ordinate, scale=None):
+ """Manually convert a 4x4 matrix from local to global coordinates
+
+ This function is for advanced users as it allows you to specify your own
+ helmert transformation parameters (i.e. those typically stored in
+ IfcMapConversion). This manual approach is useful for tests or in case your
+ are setting your helmert transformations in non-standard locations, or if
+ you are applying your own temporary false origin (such as when federating
+ models for digital twins of large cities).
+
+ No unit conversion is performed.
+
+ :param matrix: A 4x4 numpy matrix representing local coordinates.
+ :type matrix: np.array
+ :param eastings: The eastings offset to apply.
+ :type eastings: float
+ :param northings: The northings offset to apply.
+ :type northings: float
+ :param orthogonal_height: The orthogonal height offset to apply.
+ :type orthogonal_height: float
+ :param x_axis_abscissa: The X axis abscissa (i.e. first coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_abscissa: float
+ :param x_axis_ordinate: The X axis ordinate (i.e. second coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_ordinate: float
+ :param scale: The combined scale factor to convert from local coordinates
+ to map coordinates.
+ :type scale: float
+ :return: A numpy 4x4 array matrix representing global coordinates.
+ :rtype: np.array
+ """
if scale is None:
scale = 1.0
x = np.array([x_axis_abscissa, x_axis_ordinate, 0])
@@ -221,6 +485,37 @@ def local2global_ifc4x3(
def global2local(matrix, eastings, northings, orthogonal_height, x_axis_abscissa, x_axis_ordinate, scale=None):
+ """Manually convert a 4x4 matrix from global to local coordinates
+
+ This function is for advanced users as it allows you to specify your own
+ helmert transformation parameters (i.e. those typically stored in
+ IfcMapConversion). This manual approach is useful for tests or in case your
+ are setting your helmert transformations in non-standard locations, or if
+ you are applying your own temporary false origin (such as when federating
+ models for digital twins of large cities).
+
+ No unit conversion is performed.
+
+ :param matrix: A 4x4 numpy matrix representing global coordinates.
+ :type matrix: np.array
+ :param eastings: The eastings offset to apply.
+ :type eastings: float
+ :param northings: The northings offset to apply.
+ :type northings: float
+ :param orthogonal_height: The orthogonal height offset to apply.
+ :type orthogonal_height: float
+ :param x_axis_abscissa: The X axis abscissa (i.e. first coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_abscissa: float
+ :param x_axis_ordinate: The X axis ordinate (i.e. second coordinate) of the
+ 2D vector that points to the local X axis when in map coordinates.
+ :type x_axis_ordinate: float
+ :param scale: The combined scale factor to convert from local coordinates
+ to map coordinates.
+ :type scale: float
+ :return: A numpy 4x4 array matrix representing local coordinates.
+ :rtype: np.array
+ """
if scale is None:
scale = 1.0
x = np.array([x_axis_abscissa, x_axis_ordinate, 0])
@@ -245,13 +540,31 @@ def global2local(matrix, eastings, northings, orthogonal_height, x_axis_abscissa
)
-# Used for converting the X and Y vectors of the X Axis in IFC grid north geolocation
def xaxis2angle(x, y):
+ """Converts X axis abscissa and ordinates to an angle in decimal degrees
+
+ :param x: The X axis abscissa
+ :type x: float
+ :param y: The X axis ordinate
+ :type y: float
+ :return: The equivalent angle in decimal degrees from the X axis
+ :rtype: float
+ """
return math.degrees(math.atan2(y, x)) * -1
-# Used for converting the X and Y vectors of the Y Axis in IFC true north geolocation
def yaxis2angle(x, y):
+ """Converts Y axis abscissa and ordinates to an angle in decimal degrees
+
+ The Y axis abscissa and ordinate is how IFC stores true north.
+
+ :param x: The Y axis abscissa
+ :type x: float
+ :param y: The Y axis ordinate
+ :type y: float
+ :return: The equivalent angle in decimal degrees from the Y axis
+ :rtype: float
+ """
angle = math.degrees(math.atan2(y, x)) - 90
if angle < -180:
angle += 360
@@ -261,36 +574,94 @@ def yaxis2angle(x, y):
def get_grid_north(ifc_file):
+ """Get an angle pointing to map grid north
+
+ Anticlockwise is positive.
+
+ The necessary georeferencing map conversion is automatically detected from
+ the IFC map conversion parameters present in the IFC model. If no map
+ conversion is present, then the Z coordinate is returned unchanged.
+
+ For IFC2X3, the map conversion is detected from the IfcProject's
+ ePSet_MapConversion. See the "User Guide for Geo-referencing in IFC":
+ https://www.buildingsmart.org/standards/bsi-standards/standards-library/
+
+ :param ifc_file: The IFC file
+ :type ifc_file: ifcopenshell.file.file
+ :return: An angle to grid north in decimal degrees
+ :rtype: float
+ """
+ conversion = None
try:
conversion = ifc_file.by_type("IfcMapConversion")[0]
except:
- return 0
- if not conversion.XAxisAbscissa or not conversion.XAxisOrdinate:
- return 0
- return xaxis2angle(conversion.XAxisAbscissa, conversion.XAxisOrdinate)
+ pass
+ if conversion:
+ if not conversion.XAxisAbscissa or not conversion.XAxisOrdinate:
+ return 0
+ xaa = conversion.XAxisAbscissa
+ xao = conversion.XAxisOrdinate
+ else:
+ project = ifc_file.by_type("IfcProject")[0]
+ conversion = ifcopenshell.util.element.get_pset(project, "ePSet_MapConversion")
+ if not conversion:
+ return 0
+ xaa = conversion.get("XAxisAbscissa", None) or 0
+ xao = conversion.get("XAxisOrdinate", None) or 0
+ return xaxis2angle(xaa, xao)
def get_true_north(ifc_file):
+ """Get an angle pointing to global true north
+
+ Anticlockwise is positive.
+
+ Always remember that true north is not a constant! (Unless you are working
+ in polar coordinates) This true north is only a reference value useful for
+ things like solar analysis on small sites (<1km). If you're after the north
+ that your surveyor is using, you're probably after ``get_grid_north``
+ instead.
+
+ :param ifc_file: The IFC file
+ :type ifc_file: ifcopenshell.file.file
+ :return: An angle to true north in decimal degrees
+ :rtype: float
+ """
try:
for context in ifc_file.by_type("IfcGeometricRepresentationContext", include_subtypes=False):
- if not context.TrueNorth:
- continue
- return yaxis2angle(*context.TrueNorth.DirectionRatios[0:2])
+ if context.TrueNorth:
+ return yaxis2angle(*context.TrueNorth.DirectionRatios[0:2])
except:
return 0
return 0
-# Used for converting an angle in degrees to return the X and Y vectors of the X Axis in IFC grid north geolocation:
def angle2xaxis(angle):
+ """Converts an angle into an X axis abscissa and ordinate
+
+ The inverse of ``xaxis2angle``.
+
+ :param angle: The angle in decimal degrees where anticlockwise is positive.
+ :type angle: float
+ :return: A tuple of X axis abscissa and ordinate
+ :rtype: tuple[float]
+ """
angle_rad = math.radians(angle)
x = math.cos(angle_rad)
y = -math.sin(angle_rad)
return x, y
-# Used for converting True North angle as seen in CAD (relative to +Y)
def angle2yaxis(angle):
+ """Converts an angle into an Y axis abscissa and ordinate
+
+ The inverse of ``yaxis2angle``.
+
+ :param angle: The angle in decimal degrees where anticlockwise is positive.
+ :type angle: float
+ :return: A tuple of Y axis abscissa and ordinate
+ :rtype: tuple[float]
+ """
angle_rad = math.radians(angle)
x = -math.sin(angle_rad)
y = math.cos(angle_rad)
diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py
index 7219cd6856..b96287e7df 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/placement.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/placement.py
@@ -20,6 +20,20 @@ import numpy as np
def a2p(o, z, x):
+ """Converts a location, X, and Z axis vector to a 4x4 transformation matrix
+
+ IFC uses a right-handed coordinate system, so it is not necessary to
+ provide the Y axis.
+
+ :param o: The origin (i.e. location) of the matrix
+ :type o: iterable[float]
+ :param z: The +Z vector / axis of the matrix
+ :type z: iterable[float]
+ :param x: The +X vector / axis of the matrix
+ :type x: iterable[float]
+ :return: A 4x4 numpy matrix
+ :rtype: np.array[np.array[float]]
+ """
x = x / np.linalg.norm(x)
z = z / np.linalg.norm(z)
y = np.cross(z, x)
@@ -30,37 +44,83 @@ def a2p(o, z, x):
return r.T
-def get_axis2placement(plc):
- if plc.is_a("IfcAxis2Placement3D"):
- z = np.array(plc.Axis.DirectionRatios if plc.Axis else (0, 0, 1))
- x = np.array(plc.RefDirection.DirectionRatios if plc.RefDirection else (1, 0, 0))
- o = plc.Location.Coordinates
- elif plc.is_a("IfcAxis2Placement2D"):
+def get_axis2placement(placement):
+ """Parses an IfcAxis2Placement (2D or 3D) to a 4x4 transformation matrix
+
+ Note that this function only parses a single placement axis. If you want to
+ get the placement of an element instead, element placements often are made
+ out of multiple placement axes or other alternative placement methods. You
+ should use ``get_local_placement`` instead.
+
+ :param placement: The IfcLocalPlacement enitity
+ :type placement: ifcopenshell.entity_instance.entity_instance
+ :return: A 4x4 numpy matrix
+ :rtype: np.array[np.array[float]]
+ """
+ if placement.is_a("IfcAxis2Placement3D"):
+ z = np.array(placement.Axis.DirectionRatios if placement.Axis else (0, 0, 1))
+ x = np.array(placement.RefDirection.DirectionRatios if placement.RefDirection else (1, 0, 0))
+ o = placement.Location.Coordinates
+ elif placement.is_a("IfcAxis2Placement2D"):
z = np.array((0, 0, 1))
- if plc.RefDirection:
- x = np.array(plc.RefDirection.DirectionRatios)
+ if placement.RefDirection:
+ x = np.array(placement.RefDirection.DirectionRatios)
x.resize(3)
else:
x = np.array((1, 0, 0))
- o = (*plc.Location.Coordinates, 0.0)
+ o = (*placement.Location.Coordinates, 0.0)
return a2p(o, z, x)
-def get_local_placement(plc):
- if plc is None:
+def get_local_placement(placement):
+ """Parse a local placement into a 4x4 transformation matrix
+
+ This is typically used to find the location and rotation of an element. The
+ transformation matrix takes the form of:
+
+ .. code::
+
+ [ [ x_x, y_x, z_x, x ]
+ [ x_y, y_y, z_y, y ]
+ [ x_z, y_z, z_z, z ]
+ [ 0.0, 0.0, 0.0, 1.0 ] ]
+
+ Example:
+
+ .. code:: python
+
+ element = file.by_type("IfcBeam")[0]
+ matrix = ifcopenshell.util.placement.get_local_placement(element)
+
+ :param placement: The IfcLocalPlacement enitity
+ :type placement: ifcopenshell.entity_instance.entity_instance
+ :return: A 4x4 numpy matrix
+ :rtype: np.array[np.array[float]]
+ """
+ if placement is None:
return np.eye(4)
- if plc.PlacementRelTo is None:
+ if placement.PlacementRelTo is None:
parent = np.eye(4)
else:
- parent = get_local_placement(plc.PlacementRelTo)
- return np.dot(parent, get_axis2placement(plc.RelativePlacement))
+ parent = get_local_placement(placement.PlacementRelTo)
+ return np.dot(parent, get_axis2placement(placement.RelativePlacement))
def get_cartesiantransformationoperator3d(inst):
+ """Parses an IfcCartesianTransformationOperator into a 4x4 transformation matrix
+
+ Note that in general you will not need to call this directly. See
+ ``get_mappeditem_transformation`` instead.
+
+ :param item: The IfcCartesianTransformationOperator entity
+ :type item: ifcopenshell.entity_instance.entity_instance
+ :return: A 4x4 numpy transformation matrix
+ :rtype: np.array[np.array[float]]
+ """
origin = np.array(inst.LocalOrigin.Coordinates)
- axis1 = np.array((1., 0., 0.))
- axis2 = np.array((0., 1., 0.))
- axis3 = np.array((0., 0., 1.))
+ axis1 = np.array((1.0, 0.0, 0.0))
+ axis2 = np.array((0.0, 1.0, 0.0))
+ axis3 = np.array((0.0, 0.0, 1.0))
if inst.Axis1:
axis1[0:3] = inst.Axis1.DirectionRatios
@@ -69,18 +129,18 @@ def get_cartesiantransformationoperator3d(inst):
if inst.Axis3:
axis3[0:3] = inst.Axis3.DirectionRatios
- m4 = ifcopenshell.util.placement.a2p(origin, axis3, axis1)
+ m4 = a2p(origin, axis3, axis1)
# Negate axis2 (introduce mirroring) when supplied axis2
# is opposite of constructed axis2, but remains orthogonal
- if m4.T[1][0:3].dot(axis2) < 0.:
- m4.T[1] *= -1.
+ if m4.T[1][0:3].dot(axis2) < 0.0:
+ m4.T[1] *= -1.0
- scale1 = scale2 = scale3 = 1.
+ scale1 = scale2 = scale3 = 1.0
if inst.Scale:
scale1 = inst.Scale
- if inst.is_a('IfcCartesianTransformationOperator3DnonUniform'):
+ if inst.is_a("IfcCartesianTransformationOperator3DnonUniform"):
scale2 = inst.Scale2 if inst.Scale2 is not None else scale1
scale3 = inst.Scale3 if inst.Scale3 is not None else scale1
@@ -92,11 +152,34 @@ def get_cartesiantransformationoperator3d(inst):
def get_mappeditem_transformation(item):
- m4 = ifcopenshell.util.placement.get_axis2placement(item.MappingSource.MappingOrigin)
- return get_cartesiantransformationoperator(item.MappingTarget) @ m4
+ """Parse an IfcMappedItem into a 4x4 transformation matrix
+
+ Mapped items take a representation with an origin and transform them with a
+ cartesian transformation operation. This function returns the final
+ transformation matrix.
+
+ :param item: The IfcMappedItem entity
+ :type item: ifcopenshell.entity_instance.entity_instance
+ :return: A 4x4 numpy transformation matrix
+ :rtype: np.array[np.array[float]]
+ """
+ m4 = get_axis2placement(item.MappingSource.MappingOrigin)
+ # TODO 2d
+ if item.MappingTarget.is_a("IfcCartesianTransformationOperator3D"):
+ return get_cartesiantransformationoperator3d(item.MappingTarget) @ m4
def get_storey_elevation(storey):
+ """Get the Z elevation in project units of a buildling storey
+
+ Building storeys store elevation in two possible locations: the Z value of
+ its placement, or as a fallback the ``Elevation`` attribute.
+
+ :param storey: The IfcBuildingStorey entity
+ :type storey: ifcopenshell.entity_instance.entity_instance
+ :return: The elevation in project units
+ :rtype: float
+ """
if storey.ObjectPlacement:
matrix = get_local_placement(storey.ObjectPlacement)
return matrix[2][3]
@@ -104,6 +187,18 @@ def get_storey_elevation(storey):
def rotation(angle, axis, is_degrees=True):
+ """Create a 4x4 numpy matrix representing an euler rotation
+
+ :param angle: The angle of rotation
+ :type angle: float
+ :param axis: The axis to rotate around, either X, Y, or Z.
+ :type axis: str
+ :param is_degrees: Whether or not the angle is specified in degrees or
+ radians. Defaults to true (i.e. degrees).
+ :type is_degrees: bool
+ :return: A 4x4 numpy rotation matrix
+ :rtype: np.array[np.array[float]]
+ """
theta = np.radians(angle) if is_degrees else angle
cos, sin = np.cos(theta), np.sin(theta)
diff --git a/src/ifcopenshell-python/ifcopenshell/util/representation.py b/src/ifcopenshell-python/ifcopenshell/util/representation.py
index e293aa226f..68842d3ef3 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/representation.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/representation.py
@@ -16,6 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
+import numpy as np
+import ifcopenshell
+
def get_context(ifc_file, context, subcontext=None, target_view=None):
if subcontext or target_view:
@@ -33,6 +36,9 @@ def get_context(ifc_file, context, subcontext=None, target_view=None):
def is_representation_of_context(representation, context, subcontext=None, target_view=None):
+ if isinstance(context, ifcopenshell.entity_instance):
+ return representation.ContextOfItems == context
+
if target_view is not None:
return (
representation.ContextOfItems.is_a("IfcGeometricRepresentationSubContext")
@@ -62,6 +68,21 @@ def get_representation(element, context, subcontext=None, target_view=None):
def resolve_representation(representation):
- if representation.Items and representation.Items[0].is_a("IfcMappedItem"):
+ if len(representation.Items) == 1 and representation.Items[0].is_a("IfcMappedItem"):
return resolve_representation(representation.Items[0].MappingSource.MappedRepresentation)
return representation
+
+
+def resolve_items(representation, matrix=None):
+ if matrix is None:
+ matrix = np.eye(4)
+ results = []
+ for item in representation.Items or []: # Be forgiving of invalid IFCs because Revit :(
+ if item.is_a("IfcMappedItem"):
+ rep_matrix = ifcopenshell.util.placement.get_mappeditem_transformation(item)
+ if not np.allclose(rep_matrix, np.eye(4)):
+ rep_matrix = rep_matrix @ matrix.copy()
+ results.extend(resolve_items(item.MappingSource.MappedRepresentation, rep_matrix))
+ else:
+ results.append({"matrix": matrix.copy(), "item": item})
+ return results
diff --git a/src/ifcopenshell-python/ifcopenshell/util/schema/Pset_IFC2X3.ifc b/src/ifcopenshell-python/ifcopenshell/util/schema/Pset_IFC2X3.ifc
index f03be600f1..22201798b9 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/schema/Pset_IFC2X3.ifc
+++ b/src/ifcopenshell-python/ifcopenshell/util/schema/Pset_IFC2X3.ifc
@@ -1,3180 +1,2386 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1');
-FILE_NAME('/dev/null','2023-06-03T10:27:24+05:00',(),(),'IfcOpenShell v0.7.0-476ab506d','IfcOpenShell v0.7.0-476ab506d','Nobody');
+FILE_NAME('/dev/null','2023-10-26T15:50:26+05:00',(),(),'IfcOpenShell v0.7.0-f0e03c79d','IfcOpenShell v0.7.0-f0e03c79d','Nobody');
FILE_SCHEMA(('IFC4X3'));
ENDSEC;
DATA;
-#1=IFCPROJECT('12tOmRdtjDuvYX0Pfk7Yj2',$,'IFC2X3 Property Set Templates',$,$,$,$,$,$);
-#2=IFCRELDECLARES('3cGkrdKkD2ZuVkkr2EPCT3',$,$,$,#1,(#3,#13,#17,#22,#27,#32,#37,#42,#55,#68,#81,#92,#98,#105,#109,#114,#119,#127,#135,#143,#150,#157,#168,#174,#183,#188,#198,#207,#216,#227,#235,#243,#251,#261,#276,#290,#297,#316,#323,#328,#331,#334,#337,#349,#364,#375,#386,#392,#394,#397,#410,#415,#418,#421,#424,#427,#432,#435,#438,#441,#447,#456,#477,#486,#492,#501,#506,#532,#545,#584,#587,#590,#597,#600,#612,#625,#635,#659,#662,#672,#685,#690,#701,#725,#740,#757,#769,#785,#799,#803,#812,#853,#859,#890,#897,#943,#948,#956,#958,#960,#962,#983,#987,#1003,#1008,#1031,#1034,#1050,#1057,#1061,#1066,#1075,#1087,#1099,#1119,#1131,#1154,#1161,#1165,#1184,#1208,#1213,#1216,#1225,#1230,#1241,#1243,#1246,#1251,#1254,#1258,#1260,#1265,#1278,#1280,#1295,#1298,#1314,#1317,#1331,#1336,#1339,#1346,#1362,#1380,#1393,#1398,#1405,#1425,#1432,#1441,#1448,#1455,#1483,#1499,#1516,#1522,#1526,#1528,#1547,#1549,#1558,#1563,#1565,#1569,#1574,#1579,#1582,#1592,#1596,#1607,#1612,#1614,#1617,#1622,#1625,#1628,#1639,#1655,#1670,#1695,#1711,#1726,#1739,#1754,#1771,#1786,#1803,#1816,#1831,#1837,#1862,#1877,#1899,#1922,#1946,#1963,#1982,#1997,#2004,#2011,#2024,#2026,#2035,#2050,#2055,#2066,#2073,#2085,#2088,#2094,#2109,#2115,#2121,#2128,#2143,#2153,#2157,#2168,#2172,#2174,#2196,#2199,#2206,#2215,#2224,#2231,#2240,#2255,#2277,#2281,#2290,#2298,#2305,#2316,#2322,#2330,#2343,#2358,#2378,#2390,#2402,#2432,#2446,#2468,#2475,#2495,#2507,#2514,#2521,#2533,#2535,#2539,#2543,#2545,#2548,#2551,#2555,#2558,#2561,#2566,#2570,#2573,#2587,#2594,#2601,#2610,#2619,#2624,#2629,#2648,#2672,#2682,#2692,#2698,#2707,#2720,#2729,#2742,#2751,#2759,#2772,#2779,#2792,#2799,#2806,#2816,#2819,#2821,#2825,#2830,#2836,#2851,#2854,#2871,#2879,#2885,#2894,#2904,#2908,#2923,#2926,#2929,#2936,#2950,#2971,#2983,#3012,#3019,#3026,#3039,#3046,#3073,#3084,#3126,#3140,#3154));
-#3=IFCPROPERTYSETTEMPLATE('2UcDHEdQf10ev$eurUJH1a',$,'Pset_SpaceProgramCommon','Definition from IAI: Properties common to the definition of all instances of IfcSpaceProgram',$,'IfcSpaceProgram',(#4,#5,#6,#7,#8,#9,#10,#11,#12));
-#4=IFCSIMPLEPROPERTYTEMPLATE('0ZkG0A_jX04uBqZFUkX$1r',$,'Location','General description of the required location for the space (e.g. "third floor south") ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#5=IFCSIMPLEPROPERTYTEMPLATE('2DPOYXYs989PKOjFdGskfi',$,'FunctionRequirement','General description of the functional requirement for the space (in addition to the space name)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#6=IFCSIMPLEPROPERTYTEMPLATE('1dB_VkQhr0Gv8eTDwBiiLt',$,'SecurityRequirement','General description of the security requirement for the space (in addition to the function requirement)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#7=IFCSIMPLEPROPERTYTEMPLATE('0nFaZNgNT6pgsbZG6SiHyl',$,'PrivacyRequirement','General description of the privacy requirement for the space (in addition to the security requirement)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#8=IFCSIMPLEPROPERTYTEMPLATE('2LXHyWp$z7Cv$$VhAplPX0',$,'LightingRequirement','General description of the lighting requirement for the space (e.g. "natural lighting required")',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#9=IFCSIMPLEPROPERTYTEMPLATE('2XPV6ki1H6mB8QoRLkCCat',$,'FFETypeRequirement','General description of the Furniture, Fixtures and Equipment requirement for this space. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#10=IFCSIMPLEPROPERTYTEMPLATE('3L4HPvKW114BEPsm0_hyIe',$,'EmployeeType','General description of the employee type that will occupy the space (e.g. manager, programmer, secretary, etc.). The type classification depends on the company based terms for employee types. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#11=IFCSIMPLEPROPERTYTEMPLATE('3eD31M5a52w84RL1a0$jdN',$,'OccupancyType','Occupancy type for this object.\X2\000A\X0\It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#12=IFCSIMPLEPROPERTYTEMPLATE('0CaLqly1b7Yu6kV5bj8lDm',$,'OccupancyNumber','Maximum number of occupants for the designed usage of the space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#13=IFCPROPERTYSETTEMPLATE('1IrMKk2DrFbvHnatV1tlJe',$,'Pset_ActuatorTypeCommon','Definition from IAI: Actuator type common attributes.',$,'IfcActuatorType',(#14,#16));
-#14=IFCSIMPLEPROPERTYTEMPLATE('1efDm3s$L5vfQz2K5xtFjQ',$,'FailPosition','Specifies the required fail-safe position of the actuator.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#15,$,$,$,.READWRITE.);
+#1=IFCPROJECT('2F24BjnDX87uPNbhYHS60Q',$,'IFC2X3 Property Set Templates',$,$,$,$,$,$);
+#2=IFCRELDECLARES('1_xZb6xLzA9hGuDAEtOfga',$,$,$,#1,(#3,#13,#17,#21,#24,#27,#30,#33,#43,#53,#66,#77,#83,#90,#94,#98,#102,#110,#118,#124,#128,#134,#140,#145,#150,#154,#160,#167,#172,#179,#184,#189,#194,#201,#210,#221,#226,#239,#245,#249,#251,#253,#255,#265,#277,#287,#297,#301,#303,#306,#315,#319,#322,#324,#326,#329,#334,#337,#340,#343,#349,#358,#370,#379,#385,#394,#399,#417,#425,#455,#458,#461,#465,#468,#480,#489,#499,#515,#517,#524,#531,#536,#542,#560,#575,#588,#600,#610,#624,#628,#635,#661,#667,#689,#696,#728,#732,#739,#741,#743,#745,#758,#762,#773,#778,#794,#797,#807,#814,#818,#823,#832,#840,#852,#866,#878,#893,#897,#901,#916,#929,#934,#936,#942,#945,#953,#955,#957,#962,#965,#969,#971,#976,#985,#987,#997,#1000,#1012,#1015,#1025,#1028,#1031,#1038,#1048,#1061,#1071,#1074,#1081,#1094,#1098,#1105,#1109,#1113,#1129,#1139,#1149,#1155,#1159,#1161,#1175,#1177,#1186,#1190,#1192,#1196,#1200,#1203,#1205,#1212,#1216,#1227,#1231,#1233,#1235,#1238,#1240,#1242,#1251,#1263,#1275,#1294,#1305,#1315,#1326,#1337,#1349,#1360,#1373,#1382,#1393,#1399,#1416,#1425,#1438,#1454,#1471,#1481,#1492,#1501,#1505,#1510,#1522,#1524,#1531,#1544,#1549,#1555,#1560,#1571,#1574,#1580,#1591,#1597,#1603,#1607,#1620,#1630,#1633,#1641,#1645,#1647,#1663,#1666,#1670,#1677,#1684,#1690,#1698,#1711,#1728,#1732,#1739,#1746,#1751,#1760,#1764,#1770,#1781,#1793,#1805,#1816,#1826,#1847,#1857,#1871,#1875,#1889,#1897,#1901,#1905,#1913,#1915,#1919,#1923,#1925,#1927,#1929,#1933,#1936,#1939,#1943,#1946,#1948,#1961,#1968,#1974,#1980,#1986,#1991,#1996,#2009,#2023,#2031,#2038,#2044,#2049,#2056,#2061,#2068,#2073,#2078,#2085,#2089,#2096,#2103,#2107,#2114,#2116,#2118,#2121,#2126,#2132,#2146,#2148,#2165,#2171,#2176,#2183,#2192,#2196,#2210,#2213,#2216,#2223,#2234,#2251,#2261,#2280,#2287,#2292,#2302,#2307,#2322,#2330,#2352,#2360,#2368));
+#3=IFCPROPERTYSETTEMPLATE('1_nMpQK0jBkRugn3$B21pT',$,'Pset_SpaceProgramCommon','Definition from IAI: Properties common to the definition of all instances of IfcSpaceProgram',$,'IfcSpaceProgram',(#4,#5,#6,#7,#8,#9,#10,#11,#12));
+#4=IFCSIMPLEPROPERTYTEMPLATE('0ONbg9f512Qv2_8y0PRr8w',$,'Location','General description of the required location for the space (e.g. "third floor south") ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#5=IFCSIMPLEPROPERTYTEMPLATE('2w0cn_xgnCs996cwkDv8Kv',$,'FunctionRequirement','General description of the functional requirement for the space (in addition to the space name)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#6=IFCSIMPLEPROPERTYTEMPLATE('3lN6cj339CKRs6VQ91MT6R',$,'SecurityRequirement','General description of the security requirement for the space (in addition to the function requirement)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#7=IFCSIMPLEPROPERTYTEMPLATE('270W$XKU16rhgwJluVr04k',$,'PrivacyRequirement','General description of the privacy requirement for the space (in addition to the security requirement)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#8=IFCSIMPLEPROPERTYTEMPLATE('0aKw0z5Ob5YwUoVFyD9p7r',$,'LightingRequirement','General description of the lighting requirement for the space (e.g. "natural lighting required")',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#9=IFCSIMPLEPROPERTYTEMPLATE('3_I1ki$KLEVPQNgXp6i1Dj',$,'FFETypeRequirement','General description of the Furniture, Fixtures and Equipment requirement for this space. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#10=IFCSIMPLEPROPERTYTEMPLATE('306i$_7IfBy87nmCxX$375',$,'EmployeeType','General description of the employee type that will occupy the space (e.g. manager, programmer, secretary, etc.). The type classification depends on the company based terms for employee types. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#11=IFCSIMPLEPROPERTYTEMPLATE('1LjmKTwzv6r9Dh5cUr43Fw',$,'OccupancyType','Occupancy type for this object.\X2\000A\X0\It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#12=IFCSIMPLEPROPERTYTEMPLATE('0wLaO36LT3BRVb$JUFPTpW',$,'OccupancyNumber','Maximum number of occupants for the designed usage of the space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#13=IFCPROPERTYSETTEMPLATE('1m5X0yFtj6i9uqkhjTo5qW',$,'Pset_ActuatorTypeCommon','Definition from IAI: Actuator type common attributes.',$,'IfcActuatorType',(#14,#16));
+#14=IFCSIMPLEPROPERTYTEMPLATE('1QbIhXYKT6tvvNzxqxJe8o',$,'FailPosition','Specifies the required fail-safe position of the actuator.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#15,$,$,$,.READWRITE.);
#15=IFCPROPERTYENUMERATION('PEnum_FailPosition',(IFCLABEL('FailOpen'),IFCLABEL('FailClosed'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#16=IFCSIMPLEPROPERTYTEMPLATE('3zhfGs5nj1CBVJXXkMuuXL',$,'ManualOverride','Identifies whether hand-operated operation is provided as an override (= TRUE) or not (= FALSE). Note that this value should be set to FALSE by default in the case of a Hand Operated Actuator.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#17=IFCPROPERTYSETTEMPLATE('04U9mlRgP4XR7B0nfKte_9',$,'Pset_ActuatorTypeElectricActuator','Definition from IAI: A device that electrically actuates a control element. ',$,'IfcActuatorType',(#18,#20));
-#18=IFCSIMPLEPROPERTYTEMPLATE('2D$KKxBf90TgSQqW0d1$kR',$,'ActuatorInputPower','Maximum input power requirement ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#19,$,$,.READWRITE.);
-#19=IFCNAMEDUNIT($,.POWERUNIT.);
-#20=IFCSIMPLEPROPERTYTEMPLATE('0dGduFXET1RxbGw0r$EdJ8',$,'ElectricActuatorType','Enumeration that identifies electric actuator as defined by its operational principle. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#21,$,$,$,.READWRITE.);
-#21=IFCPROPERTYENUMERATION('PEnum_ElectricActuatorType',(IFCLABEL('MotorDrive'),IFCLABEL('Magnetic'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#22=IFCPROPERTYSETTEMPLATE('08YlWbwQz61PbGm$wBtVnW',$,'Pset_ActuatorTypeHydraulicActuator','Definition from IAI: A device that hydraulically actuates a control element. ',$,'IfcActuatorType',(#23,#25));
-#23=IFCSIMPLEPROPERTYTEMPLATE('00SU9BSzb9DfWZsb0lRbmV',$,'InputPressure','Maximum design pressure for the actuator.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#24,$,$,.READWRITE.);
-#24=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#25=IFCSIMPLEPROPERTYTEMPLATE('0VTwbeiUP2tvYkOjMwPZMI',$,'InputFlowrate','Maximum hydraulic flowrate requirement. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#26,$,$,.READWRITE.);
-#26=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#27=IFCPROPERTYSETTEMPLATE('3L1gY0eQr81BBv7vHgEYoZ',$,'Pset_ActuatorTypeLinearActuation','Definition from IAI: Characteristics of linear actuation of an actuator\X2\000A\X0\History: Replaces Pset_LinearActuator',$,'IfcActuatorType',(#28,#30));
-#28=IFCSIMPLEPROPERTYTEMPLATE('3PbdG$0on4svWkfED7mXB2',$,'Force','Indicates the maximum close-off force for the actuator.',.P_SINGLEVALUE.,'IfcForceMeasure',$,$,#29,$,$,.READWRITE.);
-#29=IFCNAMEDUNIT($,.FORCEUNIT.);
-#30=IFCSIMPLEPROPERTYTEMPLATE('1aCCclTt5B2uzQRQjTd6nI',$,'Stroke','Indicates the maximum distance the actuator must traverse.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#31,$,$,.READWRITE.);
-#31=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#32=IFCPROPERTYSETTEMPLATE('0h3_dP67T0O9mhXq5Yee$L',$,'Pset_ActuatorTypePneumaticActuator','Definition from IAI: A device that pneumatically actuates a control element ',$,'IfcActuatorType',(#33,#35));
-#33=IFCSIMPLEPROPERTYTEMPLATE('1ATF4Gy6z1Ge$syy3OBHmA',$,'InputPressure','Maximum input control air pressure requirement ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#34,$,$,.READWRITE.);
-#34=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#35=IFCSIMPLEPROPERTYTEMPLATE('3hJXCluMPE8hWofLA3LIBS',$,'InputFlowrate','Maximum input control air flowrate requirement ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#36,$,$,.READWRITE.);
-#36=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#37=IFCPROPERTYSETTEMPLATE('38x1CGSPbBJPgPn9n2mJ$t',$,'Pset_ActuatorTypeRotationalActuation','Definition from IAI: Characteristics of rotational actuation of an actuator\X2\000A\X0\History: Replaces Pset_RotationalActuator',$,'IfcActuatorType',(#38,#40));
-#38=IFCSIMPLEPROPERTYTEMPLATE('21hu$HfqrFwAToyXHr1CdB',$,'Torque','Indicates the maximum close-off torque for the actuator.',.P_SINGLEVALUE.,'IfcTorqueMeasure',$,$,#39,$,$,.READWRITE.);
-#39=IFCDERIVEDUNIT($,.TORQUEUNIT.,$,$);
-#40=IFCSIMPLEPROPERTYTEMPLATE('2QSyWolN18LAebd40y7sUm',$,'RangeAngle','Indicates the maximum rotation the actuator must traverse.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#41,$,$,.READWRITE.);
-#41=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#42=IFCPROPERTYSETTEMPLATE('0bijhkegD6ag2vPN7CB$Y5',$,'Pset_AnalogInput','Definition from IAI: Defines the characteristics of an analog input.',$,'IfcDistributionControlElement',(#43,#45,#47,#49,#50,#51,#53));
-#43=IFCSIMPLEPROPERTYTEMPLATE('2yRzOx3ML3o92I3uqcxlbP',$,'HighLimit','The high limit value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,#44,$,$,.READWRITE.);
-#44=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#45=IFCSIMPLEPROPERTYTEMPLATE('0d_cOZM314qvAGx3Tp5FlV',$,'LowLimit','The low limit value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,#46,$,$,.READWRITE.);
-#46=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#47=IFCSIMPLEPROPERTYTEMPLATE('0Mxe7wvf97FPvCliYew_pV',$,'Deadband','The deadband value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,#48,$,$,.READWRITE.);
-#48=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#49=IFCSIMPLEPROPERTYTEMPLATE('1O1$v7PN1F0AS4WWUbmX1l',$,'HighLimitEnable','Is high limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#50=IFCSIMPLEPROPERTYTEMPLATE('0Wp71BHMvAKv4Qo_5c7j4Y',$,'LowLimitEnable','Is low limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#51=IFCSIMPLEPROPERTYTEMPLATE('2BTgcNmCf5T8UWTsMOZrtx',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#52,$,$,$,.READWRITE.);
-#52=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#53=IFCSIMPLEPROPERTYTEMPLATE('0mJDTwc418qOlygyP_WZVn',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#54,$,$,$,.READWRITE.);
-#54=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#55=IFCPROPERTYSETTEMPLATE('2_$y4OJcD8BvEWA6cWUkRQ',$,'Pset_AnalogOutput','Definition from IAI: Defines the characteristics of an analog output.',$,'IfcDistributionControlElement',(#56,#58,#60,#62,#63,#64,#66));
-#56=IFCSIMPLEPROPERTYTEMPLATE('1qxzRjVJT6zxzY3qPLFV2c',$,'HighLimit','The high limit value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,#57,$,$,.READWRITE.);
-#57=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#58=IFCSIMPLEPROPERTYTEMPLATE('2fnHZ0pfrB7RPBfAa8CJfA',$,'LowLimit','The low limit value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,#59,$,$,.READWRITE.);
-#59=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#60=IFCSIMPLEPROPERTYTEMPLATE('1Dl6PwojbCtv8DobJ2oT__',$,'Deadband','The deadband value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,#61,$,$,.READWRITE.);
-#61=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#62=IFCSIMPLEPROPERTYTEMPLATE('3_y1oZ5WL7xu2YgpVozKVX',$,'HighLimitEnable','Is high limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#63=IFCSIMPLEPROPERTYTEMPLATE('0Swrzmk7v7R9EP9nvpmFNP',$,'LowLimitEnable','Is low limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#64=IFCSIMPLEPROPERTYTEMPLATE('3jDqFZ0u19dO7MZl5HDytb',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#65,$,$,$,.READWRITE.);
-#65=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#66=IFCSIMPLEPROPERTYTEMPLATE('2NeOlcLsn18PrS0x9ur6$r',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#67,$,$,$,.READWRITE.);
-#67=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#68=IFCPROPERTYSETTEMPLATE('0ZzNUqoeP9cAGhK_J1c_fn',$,'Pset_BinaryInput','Definition from IAI: Defines the characteristics of a binary input.',$,'IfcDistributionControlElement',(#69,#71,#72,#73,#74,#75,#77,#79));
-#69=IFCSIMPLEPROPERTYTEMPLATE('1vAyQh73H3dRh$kuZkiQgj',$,'Polarity','Enumeration defining the polarity',.P_ENUMERATEDVALUE.,'IfcLabel',$,#70,$,$,$,.READWRITE.);
-#70=IFCPROPERTYENUMERATION('PEnum_PolarityEnum',(IFCLABEL('Normal'),IFCLABEL('Reverse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#71=IFCSIMPLEPROPERTYTEMPLATE('1wdoaIm_59aQ2ofwP$nHLb',$,'InactiveText','String value to be displayed in an inactive, off, or idle state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#72=IFCSIMPLEPROPERTYTEMPLATE('1BY3balk16RvmjbxTTCliY',$,'ActiveText','String value to be displayed in an active, on, or running state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#73=IFCSIMPLEPROPERTYTEMPLATE('3u9FpOiaT5xv9QKKHTZq9H',$,'MinimumOffTime','Minimum off time',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
-#74=IFCSIMPLEPROPERTYTEMPLATE('2DZL1DvNTD1eEZ$n6Gy7de',$,'MinimumOnTime','Minimum on time',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
-#75=IFCSIMPLEPROPERTYTEMPLATE('2$vdRPkbj5y92b5rsqNOPi',$,'FeedbackValue','Enumeration defining the feedback value from the control system element',.P_ENUMERATEDVALUE.,'IfcLabel',$,#76,$,$,$,.READWRITE.);
-#76=IFCPROPERTYENUMERATION('PEnum_BACnetFeedbackValueType',(IFCLABEL('Active'),IFCLABEL('Inactive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#77=IFCSIMPLEPROPERTYTEMPLATE('1BIldFg4rF_RGzvo_n_QUG',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#78,$,$,$,.READWRITE.);
-#78=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#79=IFCSIMPLEPROPERTYTEMPLATE('2SR93ALHjDvuXnq0z_72yu',$,'AckedTransitions','Enumeration that defines the type of transition acknowledgement',.P_ENUMERATEDVALUE.,'IfcLabel',$,#80,$,$,$,.READWRITE.);
-#80=IFCPROPERTYENUMERATION('PEnum_BACnetAckedTransitionsType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#81=IFCPROPERTYSETTEMPLATE('3CgiUUCOr93eQf4EX0Gmdc',$,'Pset_BinaryOutput','Definition from IAI: Defines the characteristics of a binary output.',$,'IfcDistributionControlElement',(#82,#84,#85,#86,#88,#90));
-#82=IFCSIMPLEPROPERTYTEMPLATE('0ZWwcsWR9AwRUNQJbyEOUf',$,'Polarity','Enumeration defining the polarity',.P_ENUMERATEDVALUE.,'IfcLabel',$,#83,$,$,$,.READWRITE.);
-#83=IFCPROPERTYENUMERATION('PEnum_PolarityEnum',(IFCLABEL('Normal'),IFCLABEL('Reverse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#84=IFCSIMPLEPROPERTYTEMPLATE('1GKmsDHPzCjegPukARBCBn',$,'InactiveText','String value to be displayed in an inactive, off, or idle state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#85=IFCSIMPLEPROPERTYTEMPLATE('1SP3L2NKLFAgICbLubX$__',$,'ActiveText','String value to be displayed in an active, on, or running state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#86=IFCSIMPLEPROPERTYTEMPLATE('0Qz71j$hT9TwEPvFa6N1GF',$,'AlarmValue','Enumeration defining the operating state of the control system element',.P_ENUMERATEDVALUE.,'IfcLabel',$,#87,$,$,$,.READWRITE.);
-#87=IFCPROPERTYENUMERATION('PEnum_BACnetAlarmValueType',(IFCLABEL('Active'),IFCLABEL('Inactive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#88=IFCSIMPLEPROPERTYTEMPLATE('02S6Ra2Lf6lxbnPjY_6pvv',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#89,$,$,$,.READWRITE.);
-#89=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#90=IFCSIMPLEPROPERTYTEMPLATE('049ZEuQQbEIAwccHcMT6hl',$,'AckedTransitions','Enumeration that defines the type of transition acknowledgement',.P_ENUMERATEDVALUE.,'IfcLabel',$,#91,$,$,$,.READWRITE.);
-#91=IFCPROPERTYENUMERATION('PEnum_BACnetAckedTransitionsType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#92=IFCPROPERTYSETTEMPLATE('1fWJq4PwD94BwxSVecqWSI',$,'Pset_ControllerTypeCommon','Definition from IAI: Properties for signal handling for an analog controller taking disparate valued multiple inputs and creating a single valued output.',$,'IfcControllerType',(#93,#95,#96,#97));
-#93=IFCSIMPLEPROPERTYTEMPLATE('03XiQLooTD5v1MLazjNmkZ',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#94,$,$,$,.READWRITE.);
-#94=IFCPROPERTYENUMERATION('PEnum_ControlType',(IFCLABEL('Hysteresis'),IFCLABEL('Constant'),IFCLABEL('Divide'),IFCLABEL('Integral'),IFCLABEL('Subtract'),IFCLABEL('Report'),IFCLABEL('Absolute'),IFCLABEL('Sum'),IFCLABEL('Average'),IFCLABEL('Maximum'),IFCLABEL('Minimum'),IFCLABEL('Modifier'),IFCLABEL('Product'),IFCLABEL('Split'),IFCLABEL('RunningAverage'),IFCLABEL('Inverse'),IFCLABEL('Binary'),IFCLABEL('LowerLimitControl'),IFCLABEL('LowerLimitControl'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#95=IFCSIMPLEPROPERTYTEMPLATE('2YoVAv7fDASP_UEJPubuI9',$,'SignalOffset','Offset constant added to modfied signal',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#96=IFCSIMPLEPROPERTYTEMPLATE('3WCGPpxFf0PecGeWfhIrEy',$,'SignalFactor','Factor multiplied onto offset signal',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#97=IFCSIMPLEPROPERTYTEMPLATE('2_XAuns7v1d8$gloMYbyHn',$,'SignalTime','Time factor used for integral and running average controllers',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
-#98=IFCPROPERTYSETTEMPLATE('3G3A_YbK98ewTkvRr1n_Ie',$,'Pset_ControllerTypeProportional','Definition from IAI: Properties for signal handling for an proportional controller taking a single input and creating a single valued output',$,'IfcControllerType',(#99,#101,#102,#103,#104));
-#99=IFCSIMPLEPROPERTYTEMPLATE('01i4Ji85bDVvnweOITQLkt',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#100,$,$,$,.READWRITE.);
-#100=IFCPROPERTYENUMERATION('PEnum_ProportionalControlType',(IFCLABEL('Proportional'),IFCLABEL('ProportionalIntegral'),IFCLABEL('ExponentialDelay'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#101=IFCSIMPLEPROPERTYTEMPLATE('07VfaUeGn7AQV7cdu4Ku1s',$,'SignalFactor1','Factor (Kp)',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#102=IFCSIMPLEPROPERTYTEMPLATE('3tZOK5tdv68R4Lqf7qkzRR',$,'SignalFactor2','Factor (Ki)',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#103=IFCSIMPLEPROPERTYTEMPLATE('3ezfn5UJ1AhgL4RTjk9Xtc',$,'SignalTime1','Time factor used for exponential increase.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
-#104=IFCSIMPLEPROPERTYTEMPLATE('2dyjxb_7fE$RWUp9ILGXA9',$,'SignalTime2','Time factor used for exponential decrease.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
-#105=IFCPROPERTYSETTEMPLATE('1ci2jcWiHC1xakH7jF4wH5',$,'Pset_ControllerTypeTwoPosition','Definition from IAI: Properties for signal handling for an analog controller taking disparate valued multiple inputs and creating a single valued binary output.',$,'IfcControllerType',(#106,#108));
-#106=IFCSIMPLEPROPERTYTEMPLATE('2xMxVrliz2K9nCd6bd$9DV',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#107,$,$,$,.READWRITE.);
-#107=IFCPROPERTYENUMERATION('PEnum_TwoPositionControlType',(IFCLABEL('Not'),IFCLABEL('And'),IFCLABEL('Or'),IFCLABEL('Xor'),IFCLABEL('LowerLimitSwitch'),IFCLABEL('UpperLimitSwitch'),IFCLABEL('LowerBandSwitch'),IFCLABEL('UpperBandSwitch'),IFCLABEL('Average'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#108=IFCSIMPLEPROPERTYTEMPLATE('3V_iYB9uD9EgcQFSPldJgx',$,'BandWidth','Dead band for controller',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#109=IFCPROPERTYSETTEMPLATE('1DL_BPQ1f7yRE8tt2Eiqri',$,'Pset_FlowInstrumentTypePressureGauge','Definition from IAI: A device that reads and displays a pressure value at a point or the pressure difference between two points.',$,'IfcFlowInstrumentType',(#110,#112));
-#110=IFCSIMPLEPROPERTYTEMPLATE('0nS_NXLSb83gfpYz_oGSwf',$,'PressureGaugeType','Identifies the means by which pressure is displayed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#111,$,$,$,.READWRITE.);
-#111=IFCPROPERTYENUMERATION('PEnum_PressureGaugeType',(IFCLABEL('Dial'),IFCLABEL('Digital'),IFCLABEL('Manometer'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#112=IFCSIMPLEPROPERTYTEMPLATE('0H5hoV9rDBh8irf3X2bjoV',$,'DisplaySize','The physical size of the display. For a dial pressure gauge it will be the diameter of the dial.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#113,$,$,.READWRITE.);
-#113=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#114=IFCPROPERTYSETTEMPLATE('2l8UtKODjFWfPXDg8aZHdy',$,'Pset_FlowInstrumentTypeThermometer','Definition from IAI: A device that reads and displays a temperature value at a point.',$,'IfcFlowInstrumentType',(#115,#117));
-#115=IFCSIMPLEPROPERTYTEMPLATE('3zt2wXCP1AdwCaYfijEsNp',$,'ThermometerType','Identifies the means by which temperature is displayed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#116,$,$,$,.READWRITE.);
-#116=IFCPROPERTYENUMERATION('PEnum_ThermometerType',(IFCLABEL('Dial'),IFCLABEL('Digital'),IFCLABEL('Stem'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#117=IFCSIMPLEPROPERTYTEMPLATE('2iPomMuon9IRMDpAgZ38pS',$,'DisplaySize','The physical size of the display. In the case of a stem thermometer, this will be the length of the stem. For a dial thermometer, it will be the diameter of the dial.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#118,$,$,.READWRITE.);
-#118=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#119=IFCPROPERTYSETTEMPLATE('37KHu0AarBBu_kcHLBfSZe',$,'Pset_MultiStateInput','Definition from IAI: Defines the characteristics of a multi-state input.',$,'IfcDistributionControlElement',(#120,#121,#122,#123,#125));
-#120=IFCSIMPLEPROPERTYTEMPLATE('2MzTOkN4f9uueH7yi$2Ji1',$,'NumberOfStates','Number of states for the multi-state Input.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#121=IFCSIMPLEPROPERTYTEMPLATE('1BWZpGiMD9aeV_H0TtCtfA',$,'StateText','String values to identify the state condition. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#122=IFCSIMPLEPROPERTYTEMPLATE('1GoFnNksfC2OloZpWLMiYw',$,'AlarmValues','Specifies any states the present value must equal before an EventEnable shall occur. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#123=IFCSIMPLEPROPERTYTEMPLATE('0MqO6su0XFyB0ZOMkDVHbQ',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#124,$,$,$,.READWRITE.);
-#124=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#125=IFCSIMPLEPROPERTYTEMPLATE('2PXvQeGpXEuwH23lZ_pT5L',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#126,$,$,$,.READWRITE.);
-#126=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#127=IFCPROPERTYSETTEMPLATE('1T2yI8FtbC9R_E7Mci3RiL',$,'Pset_MultiStateOutput','Definition from IAI: Defines the characteristics of a multi-state output.',$,'IfcDistributionControlElement',(#128,#129,#130,#131,#133));
-#128=IFCSIMPLEPROPERTYTEMPLATE('2175OIH8PCNxivaVHvpa80',$,'NumberOfStates','Number of states for the multi-state Input.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#129=IFCSIMPLEPROPERTYTEMPLATE('0332Sd7z97LRmai1fguLQh',$,'StateText','String values to identify the state condition. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#130=IFCSIMPLEPROPERTYTEMPLATE('2Pfa_OTyHFmBpMzJrrV$wk',$,'AlarmValues','Specifies any states the present value must equal before an EventEnable shall occur. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#131=IFCSIMPLEPROPERTYTEMPLATE('3eipqexp16HRRrx2TQVW$s',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#132,$,$,$,.READWRITE.);
-#132=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#133=IFCSIMPLEPROPERTYTEMPLATE('01VxBkdTPDRexcqF9XMDvn',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#134,$,$,$,.READWRITE.);
-#134=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#135=IFCPROPERTYSETTEMPLATE('2VrEKUTH11GAVnunvh0zro',$,'Pset_SensorTypeCO2Sensor','Definition from IAI: A device that senses or detects carbon dioxide.',$,'IfcSensorType',(#136,#138,#139,#140,#141));
-#136=IFCSIMPLEPROPERTYTEMPLATE('1leHOyhKz8cPlu2GaXu1nt',$,'CoverageArea','The floor area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#137,$,$,.READWRITE.);
-#137=IFCNAMEDUNIT($,.AREAUNIT.);
-#138=IFCSIMPLEPROPERTYTEMPLATE('08SV8Z2yj928ThxA32ZB7M',$,'WashHandBasinSetPoint','The CO2 value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#139=IFCSIMPLEPROPERTYTEMPLATE('0pgKyyOcf6Gf4Zf8phCbkx',$,'CO2SensorRange','The upper and lower bounds for operation of the CO2 sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#140=IFCSIMPLEPROPERTYTEMPLATE('3_kvE6pG50CwDTqTiN4vfR',$,'AccuracyOfCO2Sensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#141=IFCSIMPLEPROPERTYTEMPLATE('2EUazSuaD1hgo_7H9dvqQF',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#142,$,$,.READWRITE.);
-#142=IFCNAMEDUNIT($,.TIMEUNIT.);
-#143=IFCPROPERTYSETTEMPLATE('0n7clg_FT7zwT_SPlZJzFv',$,'Pset_SensorTypeFireSensor','Definition from IAI: A device that senses or detects the presence of fire.',$,'IfcSensorType',(#144,#146,#148));
-#144=IFCSIMPLEPROPERTYTEMPLATE('2oNgDK5uvB8fWlAdhOrmqR',$,'FireSensorSetPoint','The temperature value to be sensed to indicate the presence of fire.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#145,$,$,.READWRITE.);
-#145=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#146=IFCSIMPLEPROPERTYTEMPLATE('2_wR9f1tP369PSZXqm9Oiy',$,'AccuracyOfFireSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#147,$,$,.READWRITE.);
-#147=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#148=IFCSIMPLEPROPERTYTEMPLATE('32JhnzVYXDMwxoCGyLiABM',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#149,$,$,.READWRITE.);
-#149=IFCNAMEDUNIT($,.TIMEUNIT.);
-#150=IFCPROPERTYSETTEMPLATE('0DSUND_GXCexUOKvimUJbe',$,'Pset_SensorTypeGasSensor','Definition from IAI: A device that senses or detects gas.',$,'IfcSensorType',(#151,#152,#153,#154,#155));
-#151=IFCSIMPLEPROPERTYTEMPLATE('05ELPogkb5Wv69N1Vb0Na3',$,'GasDetected','Identification of the gas that is being detected.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#152=IFCSIMPLEPROPERTYTEMPLATE('1VaSgF1QnDyRuMi4o2zyC7',$,'GasSensorSetPoint','The gas concentration value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#153=IFCSIMPLEPROPERTYTEMPLATE('3dWmX0bQ92SOSRqwGluJ$o',$,'GasSensorRange','The upper and lower bounds of gas concentration for operation of the gas sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#154=IFCSIMPLEPROPERTYTEMPLATE('01TRKxDN558Pv93fWNSHBR',$,'AccuracyOfGasSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#155=IFCSIMPLEPROPERTYTEMPLATE('1YnZKq_lzBU8IiUUVqUzB0',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#156,$,$,.READWRITE.);
-#156=IFCNAMEDUNIT($,.TIMEUNIT.);
-#157=IFCPROPERTYSETTEMPLATE('3kFZvsQKfFTgP0W2prNR_R',$,'Pset_SensorTypeHeatSensor','Definition from IAI: A device that senses or detects heat.',$,'IfcSensorType',(#158,#160,#162,#164,#166));
-#158=IFCSIMPLEPROPERTYTEMPLATE('2u5gzCLJX2HRXvqFShfo4P',$,'CoverageArea','The area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#159,$,$,.READWRITE.);
-#159=IFCNAMEDUNIT($,.AREAUNIT.);
-#160=IFCSIMPLEPROPERTYTEMPLATE('2msrJyjqz3nQF33ezWLLgm',$,'HeatSensorSetPoint','The temperature value to be sensed.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#161,$,$,.READWRITE.);
-#161=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#162=IFCSIMPLEPROPERTYTEMPLATE('0Hb2r4rEvB5hp2PY0WXLmQ',$,'HeatSensorRange','The upper and lower bounds for operation of the heat sensor.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#163,$,$,.READWRITE.);
-#163=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#164=IFCSIMPLEPROPERTYTEMPLATE('0ScFZ20DnEZxMm50o_y7q9',$,'HeatSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#165,$,$,.READWRITE.);
-#165=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#166=IFCSIMPLEPROPERTYTEMPLATE('3kNdCQMTX1vwFDmkDSHUCL',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#167,$,$,.READWRITE.);
-#167=IFCNAMEDUNIT($,.TIMEUNIT.);
-#168=IFCPROPERTYSETTEMPLATE('2ef_UXm1vE6R2if7LG2DiT',$,'Pset_SensorTypeHumiditySensor','Definition from IAI: A device that senses or detects humidity. ',$,'IfcSensorType',(#169,#170,#171,#172));
-#169=IFCSIMPLEPROPERTYTEMPLATE('0cqTkXxiPFphZQK3RZ8jFY',$,'HumiditySetPoint','The humidity value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#170=IFCSIMPLEPROPERTYTEMPLATE('3vaFZj6695TRP3M4nAAkuS',$,'HumiditySensorRange','The upper and lower bounds for operation of the humidity sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#171=IFCSIMPLEPROPERTYTEMPLATE('0T5wmOJSL1eAYzweUSVcaO',$,'AccuracyOfHumiditySensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#172=IFCSIMPLEPROPERTYTEMPLATE('0MIDJ7iILFYR$fOOwnD93n',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#173,$,$,.READWRITE.);
-#173=IFCNAMEDUNIT($,.TIMEUNIT.);
-#174=IFCPROPERTYSETTEMPLATE('1b9w8y9$P5bwIv2iJWkXMN',$,'Pset_SensorTypeLightSensor','Definition from IAI: A device that senses or detects light.',$,'IfcSensorType',(#175,#177,#179,#181));
-#175=IFCSIMPLEPROPERTYTEMPLATE('1MTpB66rT25xY7RilDH3Uj',$,'LightSensorSetPoint','The illuminance value to be sensed.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,#176,$,$,.READWRITE.);
-#176=IFCNAMEDUNIT($,.ILLUMINANCEUNIT.);
-#177=IFCSIMPLEPROPERTYTEMPLATE('0D_O8OzW56VhIb9X1iBfCD',$,'LightSensorRange','The upper and lower bounds for operation of the light sensor.',.P_BOUNDEDVALUE.,'IfcIlluminanceMeasure',$,$,#178,$,$,.READWRITE.);
-#178=IFCNAMEDUNIT($,.ILLUMINANCEUNIT.);
-#179=IFCSIMPLEPROPERTYTEMPLATE('1tIIhwzfbA5eVm7Ho6D1r$',$,'LightSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,#180,$,$,.READWRITE.);
-#180=IFCNAMEDUNIT($,.ILLUMINANCEUNIT.);
-#181=IFCSIMPLEPROPERTYTEMPLATE('0M2LFQeG16lBmpf_7jNY7A',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#182,$,$,.READWRITE.);
-#182=IFCNAMEDUNIT($,.TIMEUNIT.);
-#183=IFCPROPERTYSETTEMPLATE('0vZAKVZPD1dAG36sjcQ9A2',$,'Pset_SensorTypeMovementSensor','Definition from IAI: A device that senses or detects movement.',$,'IfcSensorType',(#184,#186));
-#184=IFCSIMPLEPROPERTYTEMPLATE('0azvySYR58neUVFbGy5XFd',$,'MovementSensingType','Enumeration that identifies the type of movement sensing mechanism.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#185,$,$,$,.READWRITE.);
-#185=IFCPROPERTYENUMERATION('PEnum_MovementSensingType',(IFCLABEL('PhotoElectricCell'),IFCLABEL('PressurePad'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#186=IFCSIMPLEPROPERTYTEMPLATE('0ZBemj4gj6GwqF90QPt14m',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#187,$,$,.READWRITE.);
-#187=IFCNAMEDUNIT($,.TIMEUNIT.);
-#188=IFCPROPERTYSETTEMPLATE('335ldsOv5DRfZbPSFMYZKX',$,'Pset_SensorTypePressureSensor','Definition from IAI: A device that senses or detects pressure.',$,'IfcSensorType',(#189,#191,#193,#195,#197));
-#189=IFCSIMPLEPROPERTYTEMPLATE('16MdSYJG51LPmRKvsC8hcL',$,'PressureSensorSetPoint','The pressure value to be sensed.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#190,$,$,.READWRITE.);
-#190=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#191=IFCSIMPLEPROPERTYTEMPLATE('1t4z2RYsb1gBemtj96bYGW',$,'PressureSensorRange','The upper and lower bounds of pressure value for operation of the pressure sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#192,$,$,.READWRITE.);
-#192=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#193=IFCSIMPLEPROPERTYTEMPLATE('1ICuneFcH70vlN$0DZHFKC',$,'AccuracyOfPressureSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#194,$,$,.READWRITE.);
-#194=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#195=IFCSIMPLEPROPERTYTEMPLATE('2TeOpe05X3Zv0zfgi8AzTq',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#196,$,$,.READWRITE.);
-#196=IFCNAMEDUNIT($,.TIMEUNIT.);
-#197=IFCSIMPLEPROPERTYTEMPLATE('1GfEAWx_vF$eyfThQ_GjuI',$,'IsSwitch','Identifies if the sensor also functions as a switch at the set point (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#198=IFCPROPERTYSETTEMPLATE('22fMoxIPbD9gnvFhDBJlvn',$,'Pset_SensorTypeSmokeSensor','Definition from IAI: A device that senses or detects smoke.',$,'IfcSensorType',(#199,#201,#202,#203,#204,#206));
-#199=IFCSIMPLEPROPERTYTEMPLATE('1Dnc9jkY51BvFRI2okyGif',$,'CoverageArea','The floor area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#200,$,$,.READWRITE.);
-#200=IFCNAMEDUNIT($,.AREAUNIT.);
-#201=IFCSIMPLEPROPERTYTEMPLATE('23xGBgitv2uh6ApuIOV6z8',$,'PressureSensorSetPoint','The smoke concentration value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#202=IFCSIMPLEPROPERTYTEMPLATE('0RDrjhJkn2D8Xy8wEuMdjn',$,'SmokeSensorRange','The upper and lower bounds of smoke concentration for operation of the smoke sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#203=IFCSIMPLEPROPERTYTEMPLATE('2VIi$aRFT9GQWxRjnDOAAT',$,'AccuracyOfSmokeSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#204=IFCSIMPLEPROPERTYTEMPLATE('0A$OsGWxj1jR5mykX2UYYq',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#205,$,$,.READWRITE.);
-#205=IFCNAMEDUNIT($,.TIMEUNIT.);
-#206=IFCSIMPLEPROPERTYTEMPLATE('2grLvz6$TB48b7SXo04U58',$,'HasBuiltInAlarm','Indicates whether the smoke sensor is included as an element within a smoke alarm/sensor unit (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#207=IFCPROPERTYSETTEMPLATE('30_La_V_f9QRfKoKC7fd0U',$,'Pset_SensorTypeSoundSensor','Definition from IAI: A device that senses or detects sound.',$,'IfcSensorType',(#208,#210,#212,#214));
-#208=IFCSIMPLEPROPERTYTEMPLATE('2wnbltH_58SAmjpWwyqPEx',$,'SoundSensorSetPoint','The sound pressure value to be sensed.',.P_SINGLEVALUE.,'IfcSoundPressureMeasure',$,$,#209,$,$,.READWRITE.);
-#209=IFCDERIVEDUNIT($,.SOUNDPRESSUREUNIT.,$,$);
-#210=IFCSIMPLEPROPERTYTEMPLATE('0TKW8cmDD5dR6ZXMtpNq2t',$,'SoundSensorRange','The upper and lower bounds for operation of the sound sensor.',.P_BOUNDEDVALUE.,'IfcSoundPressureMeasure',$,$,#211,$,$,.READWRITE.);
-#211=IFCDERIVEDUNIT($,.SOUNDPRESSUREUNIT.,$,$);
-#212=IFCSIMPLEPROPERTYTEMPLATE('0WNzAjXRb09QC9iSAEzTle',$,'SoundSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcSoundPressureMeasure',$,$,#213,$,$,.READWRITE.);
-#213=IFCDERIVEDUNIT($,.SOUNDPRESSUREUNIT.,$,$);
-#214=IFCSIMPLEPROPERTYTEMPLATE('1wlplZxYv4vwOG$t5SmfAI',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#215,$,$,.READWRITE.);
-#215=IFCNAMEDUNIT($,.TIMEUNIT.);
-#216=IFCPROPERTYSETTEMPLATE('11ZIYubCbFHOenhz2y8i_p',$,'Pset_SensorTypeTemperatureSensor','Definition from IAI: A device that senses or detects temperature.',$,'IfcSensorType',(#217,#219,#221,#223,#225));
-#217=IFCSIMPLEPROPERTYTEMPLATE('3n7Mx5KZr32g_o6e9MFaSL',$,'TemperatureSensorType','Enumeration that Identifies the types of temperature sensor that can be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#218,$,$,$,.READWRITE.);
-#218=IFCPROPERTYENUMERATION('PEnum_TemperatureSensorType',(IFCLABEL('HighLimit'),IFCLABEL('LowLimit'),IFCLABEL('OutsideTemperature'),IFCLABEL('OperatingTemperature'),IFCLABEL('RoomTemperature'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#219=IFCSIMPLEPROPERTYTEMPLATE('3bndIGUyL9Z9J5C1K4iOSx',$,'TemperatureSensorSetPoint','The temperature value to be sensed.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#220,$,$,.READWRITE.);
-#220=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#221=IFCSIMPLEPROPERTYTEMPLATE('3yM7Udn4X0nPKsd72cfCuu',$,'TemperatureSensorRange','The upper and lower bounds for operation of the temperature sensor.\X2\000A\X0\May also be termed ''deadband''',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#222,$,$,.READWRITE.);
-#222=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#223=IFCSIMPLEPROPERTYTEMPLATE('27T_QXdnv1t97qGPIxSuHT',$,'AccuracyOfTemperatureSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#224,$,$,.READWRITE.);
-#224=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#225=IFCSIMPLEPROPERTYTEMPLATE('1nWP$g_Sb6NehO8mc0VNaV',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#226,$,$,.READWRITE.);
-#226=IFCNAMEDUNIT($,.TIMEUNIT.);
-#227=IFCPROPERTYSETTEMPLATE('04MvqY5azAPfJ5Z4dlZo$i',$,'Pset_CableCarrierSegmentTypeCableLadderSegment','Definition from IAI: An open carrier segment on which cables are carried on a ladder structure.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#228,#230,#232,#234));
-#228=IFCSIMPLEPROPERTYTEMPLATE('1Y7Ynita5FGA3ByVAai05T',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#229,$,$,.READWRITE.);
-#229=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#230=IFCSIMPLEPROPERTYTEMPLATE('1EtNkv1XXAeOycdzW8mZP2',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#231,$,$,.READWRITE.);
-#231=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#232=IFCSIMPLEPROPERTYTEMPLATE('0wQrm4GZ9C3fZDK5Sti9EY',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#233,$,$,.READWRITE.);
-#233=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#234=IFCSIMPLEPROPERTYTEMPLATE('3Leyhi$GXD6hzcEu122OSP',$,'LadderConfiguration','Description of the configuration of the ladder structure used.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#235=IFCPROPERTYSETTEMPLATE('23uo9fwcH6kgeiKTgyXXOc',$,'Pset_CableCarrierSegmentTypeCableTraySegment','Definition from IAI: An (typically) open carrier segment onto which cables are laid.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#236,#238,#240,#242));
-#236=IFCSIMPLEPROPERTYTEMPLATE('0J2wv3$PfD2OiKlc72Afk1',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#237,$,$,.READWRITE.);
-#237=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#238=IFCSIMPLEPROPERTYTEMPLATE('2t38eJDGn0Yh6AxS17ZFqB',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#239,$,$,.READWRITE.);
-#239=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#240=IFCSIMPLEPROPERTYTEMPLATE('3jbZ4234T0nPOCCj_SuJjR',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#241,$,$,.READWRITE.);
-#241=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#242=IFCSIMPLEPROPERTYTEMPLATE('38u6FRGVPCLg9ZyW92g4xZ',$,'HasCover','Indication of whether the cable tray has a cover (=TRUE) or not (= FALSE). By default, this value should be set to FALSE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#243=IFCPROPERTYSETTEMPLATE('2IoJssgID2Zw0Ews6BanjH',$,'Pset_CableCarrierSegmentTypeCableTrunkingSegment','Definition from IAI: An enclosed carrier segment with one or more compartments into which cables are placed.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#244,#246,#248,#250));
-#244=IFCSIMPLEPROPERTYTEMPLATE('0L4JJL0HL5M86ta_rTpi4M',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#245,$,$,.READWRITE.);
-#245=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#246=IFCSIMPLEPROPERTYTEMPLATE('2MD2T0SsL69v52EhCaDzAO',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#247,$,$,.READWRITE.);
-#247=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#248=IFCSIMPLEPROPERTYTEMPLATE('0H2wJFXzH5D9n5wXuVZKLN',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#249,$,$,.READWRITE.);
-#249=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#250=IFCSIMPLEPROPERTYTEMPLATE('3DeSnTSGf6BgY3VAgkltIl',$,'NumberOfCompartments','The number of separate internal compartments within the trunking',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#251=IFCPROPERTYSETTEMPLATE('1sSyZq3G1CAuomK0tIIdBe',$,'Pset_CableCarrierSegmentTypeConduitSegment','Definition from IAI: An enclosed tubular carrier segment through which cables are pulled.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#252,#254,#256,#258,#260));
-#252=IFCSIMPLEPROPERTYTEMPLATE('1_zyEaunv8BfNRKkqYNFRV',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#253,$,$,.READWRITE.);
-#253=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#254=IFCSIMPLEPROPERTYTEMPLATE('1yEDn9w5zFhx2HKDDhkeoQ',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#255,$,$,.READWRITE.);
-#255=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#256=IFCSIMPLEPROPERTYTEMPLATE('3b85CeM$r50Oj4Gw7diEig',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#257,$,$,.READWRITE.);
-#257=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#258=IFCSIMPLEPROPERTYTEMPLATE('0_sSdlOE56peYKKHiufmIq',$,'ConduitShapeType','The shape of the conduit segment',.P_ENUMERATEDVALUE.,'IfcLabel',$,#259,$,$,$,.READWRITE.);
-#259=IFCPROPERTYENUMERATION('PEnum_ConduitShapeType',(IFCLABEL('Circular'),IFCLABEL('Oval'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#260=IFCSIMPLEPROPERTYTEMPLATE('38VRRCCG92xQAsvG7ScHHv',$,'IsRigid','Indication of whether the conduit is rigid (= TRUE) or flexible (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#261=IFCPROPERTYSETTEMPLATE('2HFgkSScf6AByZwmq3bAxi',$,'Pset_CableSegmentTypeCableSegment','Definition from IAI: Electrical cable with a specific purpose to lead electric current within a circuit or any other electric construction. Includes all types of electric cables, mainly several electrical segments wrapped together, e.g. cable, tube, busbar. Note that the number of conductors within a cable is determined by an aggregation mechanism that aggregates the conductors within the cable.\X2\000A\X0\',$,'IfcCableSegmentType',(#262,#264,#266,#268,#270,#272,#274,#275));
-#262=IFCSIMPLEPROPERTYTEMPLATE('2D3zYLBWL0Qvoev_ywKOLk',$,'CrossSectionalArea','Cross section area of the cable',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#263,$,$,.READWRITE.);
-#263=IFCNAMEDUNIT($,.AREAUNIT.);
-#264=IFCSIMPLEPROPERTYTEMPLATE('2qc7et3tn6Fexf5I36l7Fj',$,'NominalLength','The nominal length of a cable, busbar or tube.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#265,$,$,.READWRITE.);
-#265=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#266=IFCSIMPLEPROPERTYTEMPLATE('1$gmmw2dz9Yf8XuGcN24xk',$,'NominalWidthOrDiameter','The nominal width of a cable, busbar or tube or, in the case of a circular cross section, the diameter. Note that this value may be used for larger sized cables whose dimensions are explicitly given.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#267,$,$,.READWRITE.);
-#267=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#268=IFCSIMPLEPROPERTYTEMPLATE('2f0gRCKMj0s8XwuQi_dPbU',$,'NominalHeight','The nominal height of a cable, busbar or tube or, in the case of a circular cross section, the height is not asserted. Note that this value may be used for larger sized cables whose dimensions are explicitly given.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#269,$,$,.READWRITE.);
-#269=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#270=IFCSIMPLEPROPERTYTEMPLATE('0_q2i0ldj57BpofFihgT7$',$,'NormalOperatingTemperature','Normal operating temperature for the cable, busbar.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#271,$,$,.READWRITE.);
-#271=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#272=IFCSIMPLEPROPERTYTEMPLATE('3IWvHYV7r0jhIOmQP5mX0i',$,'MaxOperatingTemperature','Maximum operating temperature for the cable.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#273,$,$,.READWRITE.);
-#273=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#274=IFCSIMPLEPROPERTYTEMPLATE('36oPE5kynDgxcIaxsGpCWb',$,'CableInsulationMaterial','The material from which the insulation is constructed. Such as PVC, PEX, EPR,...',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#275=IFCSIMPLEPROPERTYTEMPLATE('07cM9dkf9E6g9gx0kUtQKY',$,'SheathColor','Colour code on cable, conductor. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#276=IFCPROPERTYSETTEMPLATE('3pVJz0x1T3kfCFBhBItROc',$,'Pset_CableSegmentTypeConductorSegment','Definition from IAI: An electrical conductor is a single linear element with the specific purpose to lead electric current. The core of one lead is normally single wired or multiwired which are intertwined. ',$,'IfcCableSegmentType',(#277,#279,#281,#283,#284,#285,#286,#288,#289));
-#277=IFCSIMPLEPROPERTYTEMPLATE('1pNVu24u5E69WKL950pXpF',$,'CrossSectionalArea','Cross section area of the phase(s) lead(s)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#278,$,$,.READWRITE.);
-#278=IFCNAMEDUNIT($,.AREAUNIT.);
-#279=IFCSIMPLEPROPERTYTEMPLATE('0S6ALTpAb5IhD_btczxlxb',$,'NominalLength','The nominal length of a conductor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#280,$,$,.READWRITE.);
-#280=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#281=IFCSIMPLEPROPERTYTEMPLATE('1VOZKXutH8uhPa5EgBWfmU',$,'ElectricalConductorFunction','Type of function for which the conductor is intended. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#282,$,$,$,.READWRITE.);
-#282=IFCPROPERTYENUMERATION('PEnum_ConductorFunction',(IFCLABEL('Phase'),IFCLABEL('Neutral'),IFCLABEL('ProtectiveGround'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#283=IFCSIMPLEPROPERTYTEMPLATE('1Bs9GCvK53nfQTFLrkY4Pe',$,'PhaseReference','The phase identification used when the function of the conductor is a phase. In general, it is recommended that IEC recommendations for phase identification are used (L1, L2 etc.). However, other phase identifiers may be used such as by color (Red, Blue, Yellow) or by number (1, 2, 3) etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#284=IFCSIMPLEPROPERTYTEMPLATE('0F_ClT8$j8T9ncEoHWGW4f',$,'ConductorMaterial','Type of material from which the conductor is constructed. Such as Aluminium or Copper',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#285=IFCSIMPLEPROPERTYTEMPLATE('1PNLGFp915ig3c$buwOKKA',$,'ConductorSheathMaterial','The material from which the sheath or insulation is constructed. Such as EPR, Copper, MICC, PVC, PEX, Rubber, XPLE, XPLE_LS. Note that materials used should be agreed between exchange participants before use.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#286=IFCSIMPLEPROPERTYTEMPLATE('3WgRe_UaD4Fx$rPKk3$_I9',$,'MaximumOperatingTemperature','The maximum temperature at which the sheath retains its integrity.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#287,$,$,.READWRITE.);
-#287=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#288=IFCSIMPLEPROPERTYTEMPLATE('3edx_6hQTAcQZ9L1f3h5Zp',$,'IsFireResistant','Indication of whether the sheath is fire resistant (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#289=IFCSIMPLEPROPERTYTEMPLATE('0FzPV4s_H1sw$0mM16MX5f',$,'SheathColor','Colour code on cable, conductor. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#290=IFCPROPERTYSETTEMPLATE('3qq5suInT41AX9$AO_DwFw',$,'Pset_ElectricalCircuit','Definition from IAI: A circuit supplies electrical devices with voltage and current.\X2\000A\X0\',$,'IfcElectricalCircuit',(#291,#292,#293,#295));
-#291=IFCSIMPLEPROPERTYTEMPLATE('3XFtU6vmf4ZvgFLWjDJMIC',$,'Diversity','A factor that is a means of reducing the cable size on the basis that not all the connected load will be drawing current simultaneously.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#292=IFCSIMPLEPROPERTYTEMPLATE('3VUzvAEzPE7QV9dWIcJJyv',$,'NumberOfPhases','Number of phases within this circuit.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#293=IFCSIMPLEPROPERTYTEMPLATE('05oUeA0BT20QNo5COPmkbA',$,'MaximumAllowedVoltageDrop','The maximum voltage drop across the circuit that must not be exceeded.',.P_SINGLEVALUE.,'IfcElectricVoltageMeasure',$,$,#294,$,$,.READWRITE.);
-#294=IFCNAMEDUNIT($,.ELECTRICVOLTAGEUNIT.);
-#295=IFCSIMPLEPROPERTYTEMPLATE('0DAlEflFDBTh3t_f9tCUKm',$,'NetImpedance','The maximum earth loop impedance of a circuit (typically stated as the variable Zs)',.P_SINGLEVALUE.,'IfcElectricResistanceMeasure',$,$,#296,$,$,.READWRITE.);
-#296=IFCNAMEDUNIT($,.ELECTRICRESISTANCEUNIT.);
-#297=IFCPROPERTYSETTEMPLATE('1$YGjOTEn6pf50SJk6Jo5_',$,'Pset_ElectricalDeviceCommon','Definition from IAI: A means of collecting together all properties that are commonly used by electrical devices.',$,'IfcDistributionElement',(#298,#300,#302,#304,#306,#307,#308,#310,#312,#313,#315));
-#298=IFCSIMPLEPROPERTYTEMPLATE('0apF7qto96UvYx2CR2E6HV',$,'NominalCurrent','The maximum allowed current that a device is certified to handle.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,#299,$,$,.READWRITE.);
-#299=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#300=IFCSIMPLEPROPERTYTEMPLATE('1SAkIUznvAlQINXHdTyhPK',$,'UsageCurrent','The current that a device is actually handling or is calculated to be handling at a point in time.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,#301,$,$,.READWRITE.);
-#301=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#302=IFCSIMPLEPROPERTYTEMPLATE('2N7epvzRr1RRlv5aKkMF1W',$,'NominalVoltage','The range of allowed voltage that a device is certified to handle. The upper bound of this value is the maximum.',.P_BOUNDEDVALUE.,'IfcElectricVoltageMeasure',$,$,#303,$,$,.READWRITE.);
-#303=IFCNAMEDUNIT($,.ELECTRICVOLTAGEUNIT.);
-#304=IFCSIMPLEPROPERTYTEMPLATE('0ODetFpnv978m37oyHs_gu',$,'ElectricalDeviceNominalPower','The output power rating that is certified for a device.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#305,$,$,.READWRITE.);
-#305=IFCNAMEDUNIT($,.POWERUNIT.);
-#306=IFCSIMPLEPROPERTYTEMPLATE('1dngRNVTH6vx1BpwNJ_Tt$',$,'NumberOfPoles','The number of logical connections that can be made on an electrical device.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#307=IFCSIMPLEPROPERTYTEMPLATE('12c4$sC7rBoBFAAY7L6Lk4',$,'HasProtectiveEarth','Indicates whether the electrical device has a protective earth connection (=TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#308=IFCSIMPLEPROPERTYTEMPLATE('1ih$oDZHLBG9Sx26MPBklR',$,'NominalFrequencyRange','The upper and lower limits of frequency for which the operation of the device is certified.',.P_BOUNDEDVALUE.,'IfcFrequencyMeasure',$,$,#309,$,$,.READWRITE.);
-#309=IFCNAMEDUNIT($,.FREQUENCYUNIT.);
-#310=IFCSIMPLEPROPERTYTEMPLATE('0aXHVbN_n2NfmoC72abvAN',$,'PhaseAngle','The angular difference between two waveforms of the same frequency',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure',$,$,#311,$,$,.READWRITE.);
-#311=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#312=IFCSIMPLEPROPERTYTEMPLATE('3tpR9IYsr5RBo14Byvbqz7',$,'IP_Code','IEC 529 (1989) Classification of degrees of protection provided by enclosures (IP Code)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#313=IFCSIMPLEPROPERTYTEMPLATE('19hZWxIVL2heMphFpSzxU1',$,'InsulationStandardClass','Insulation standard classes provides basic protection information against electric shock. Defines levels of insulation required in terms of constructional requirements (creepage and clearance distances) and electrical requirements (compliance with electric strength tests). Basic insulation is considered to be shorted under single fault conditions. The actual values required depend on the working voltage to which the insulation is subjected, as well as other factors. Also indicates whether the electrical device has a protective earth connection.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#314,$,$,$,.READWRITE.);
-#314=IFCPROPERTYENUMERATION('PEnum_InsulationStandardClass',(IFCLABEL('Class0Appliance'),IFCLABEL('Class0IAppliance'),IFCLABEL('ClassIAppliance'),IFCLABEL('ClassIIAppliance'),IFCLABEL('ClassIIIAppliance'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#315=IFCSIMPLEPROPERTYTEMPLATE('2Zug$UU$5FqPCWyruYXthb',$,'PhaseReference','The phase identification used for the device electrical input. This should be the same phase identifier that is used for the conductor segment providing the electrical service to the device. In general, it is recommended that IEC recommendations for phase identification are used (L1, L2 etc.). However, other phase identifiers may be used such as by color (Red, Blue, Yellow) or by number (1, 2, 3) etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#316=IFCPROPERTYSETTEMPLATE('0TTbqk$dr749kWxouzdXw7',$,'Pset_ElectricDistributionPointCommon','Definition from IAI: A room or a place or a box where an electrical supply enters and is then further distributed via electrical circuits. A distribution point may be a main distribution point or a sub-main distribution point.\X2\000A\X0\',$,'IfcElectricDistributionPoint',(#317,#318,#319,#320,#322));
-#317=IFCSIMPLEPROPERTYTEMPLATE('2TPNwkv0jBHPZ$QEec$bVS',$,'IsMain','Identifies if the current instance is a main distribution point or topmost level in an electrical distribution hierarchy (= TRUE) or a sub-main distribution point (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#318=IFCSIMPLEPROPERTYTEMPLATE('2tsT0rB_P8PwztZOaXw9xb',$,'NumberOfDoors','Number of doors',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#319=IFCSIMPLEPROPERTYTEMPLATE('2lXa$k17rC_fswKVRB50k0',$,'CaseMaterial','Material from which the casing surrounding the distribution point is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#320=IFCSIMPLEPROPERTYTEMPLATE('15qmjtgrT3nBsrTqPoGQH4',$,'CaseWeight','Weight of case',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#321,$,$,.READWRITE.);
-#321=IFCNAMEDUNIT($,.MASSUNIT.);
-#322=IFCSIMPLEPROPERTYTEMPLATE('0TK1HhBer2iAK2cujhe91x',$,'NumberOfOpenings','Maximum number of openings that can fit with the case for normal use. In the openings there must be nipples, so cable may run through.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#323=IFCPROPERTYSETTEMPLATE('2c6VG3pDL9RxNT9rp4BW$B',$,'Pset_ElectricGeneratorTypeCommon','Definition from IAI: Defines a particular type of engine that is a machine for converting mechanical energy into electrical energy.',$,'IfcElectricGeneratorType',(#324,#325,#326));
-#324=IFCSIMPLEPROPERTYTEMPLATE('1O6j8U4C9EwOtRcX5tWjMT',$,'ElectricGeneratorEfficiency','The ratio of output capacity to intake capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#325=IFCSIMPLEPROPERTYTEMPLATE('0YQA2iP61BROk1aiWS1kRU',$,'StartCurrentFactor','IEC. Start current factor defines how large the peek starting current will become on the engine. StartCurrentFactor is multiplied to NominalCurrent and we get the start current. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#326=IFCSIMPLEPROPERTYTEMPLATE('1$oyXue8zCqBmta2YGre6I',$,'MaximumPowerOutput','The maximum output power rating of the engine.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#327,$,$,.READWRITE.);
-#327=IFCNAMEDUNIT($,.POWERUNIT.);
-#328=IFCPROPERTYSETTEMPLATE('19pe8T4U13igkenEkR7_qx',$,'Pset_ElectricHeaterTypeElectricalCableHeater','Definition from IAI: An electrical device that outputs heat uniformly along its path.',$,'IfcElectricHeaterType',(#329));
-#329=IFCSIMPLEPROPERTYTEMPLATE('0OdV1PnL191BDjfUU52U0g',$,'HeatOutputPerUnitLength','The amount of heat output per unit length of heat emitter.',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#330,$,$,.READWRITE.);
-#330=IFCNAMEDUNIT($,.POWERUNIT.);
-#331=IFCPROPERTYSETTEMPLATE('3jjTWFRED2DfYki1OFAgrq',$,'Pset_ElectricHeaterTypeElectricalMatHeater','Definition from IAI: An electrical device that outputs heat uniformly across its surface area.',$,'IfcElectricHeaterType',(#332));
-#332=IFCSIMPLEPROPERTYTEMPLATE('3ufQwIyfL7TQ5UoKhbbwOr',$,'HeatOutputPerUnitArea','The amount of heat output per unit area of heat emitter.',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#333,$,$,.READWRITE.);
-#333=IFCNAMEDUNIT($,.POWERUNIT.);
-#334=IFCPROPERTYSETTEMPLATE('1fJYK4tKj91AETVKWzLn0g',$,'Pset_ElectricHeaterTypeElectricalPointHeater','Definition from IAI: An electrical device that outputs heat as a total quantity from a point or restricted area that can be considered as a point.',$,'IfcElectricHeaterType',(#335));
-#335=IFCSIMPLEPROPERTYTEMPLATE('3lG$VB0dL7vQ1GGUzpXsrT',$,'HeatOutput','The total amount of heat output by the heat emitter.',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#336,$,$,.READWRITE.);
-#336=IFCNAMEDUNIT($,.POWERUNIT.);
-#337=IFCPROPERTYSETTEMPLATE('0rF5$QpfX1Rw3c3_LVobdK',$,'Pset_ElectricMotorTypeCommon','Definition from IAI: Defines a particular type of engine that is a machine for converting electrical energy into mechanical energy. Note that in cases where a close coupled or monobloc pump or close coupled fan is being driven by the motor, the motor may itself be considered to be directly part of the pump or fan. In this case , motor information may need to be specified directly at the pump or fan and not througfh separate motor/motor connection entities.',$,'IFCELECTRICALDOMAIN/IfcElectricMotorType,IFCHVACDOMAIN/IfcFanType,IFCHVACDOMAIN/IfcPumpType',(#338,#340,#341,#342,#343,#344,#345,#347));
-#338=IFCSIMPLEPROPERTYTEMPLATE('0QPa1crRb7t9FVWdpMXxvE',$,'MotorEnclosureType','A list of the available types of motor enclosure from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#339,$,$,$,.READWRITE.);
-#339=IFCPROPERTYENUMERATION('PEnum_MotorEnclosureType',(IFCLABEL('OpenDripProof'),IFCLABEL('TotallyEnclosedAirOver'),IFCLABEL('TotallyEnclosedFanCooled'),IFCLABEL('TotallyEnclosedNonVentilated'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#340=IFCSIMPLEPROPERTYTEMPLATE('27rljhq4XE3v57bn3sMCvI',$,'IsGuarded','Indication of whether the motor enclosure is guarded (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#341=IFCSIMPLEPROPERTYTEMPLATE('2VQm0WXwzAuhjU9AsiK6c7',$,'HasPartWinding','Indication of whether the motor is single speed, i.e. has a single winding (= FALSE) or multi-speed i.e.has part winding (= TRUE) ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#342=IFCSIMPLEPROPERTYTEMPLATE('2va1cM12n4Fe2AINZp8w_S',$,'FrameSize','Designation of the frame size according to the named range of frame sizes designated at the place of use or according to a given standard.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#343=IFCSIMPLEPROPERTYTEMPLATE('2wA0Fhpaj2RgwaFxq3Mva_',$,'ElectricMotorEfficiency','The ratio of output capacity to intake capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#344=IFCSIMPLEPROPERTYTEMPLATE('2$H8G7Wb9DxeE3a84_RDqi',$,'StartCurrentFactor','IEC. Start current factor defines how large the peak starting current will become on the engine. StartCurrentFactor is multiplied to NominalCurrent and to give the start current. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#345=IFCSIMPLEPROPERTYTEMPLATE('2m6fN0vwTEcAa76rq2Swu4',$,'LockedRotorCurrent','Input current when a motor armature is energized but not rotating.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,#346,$,$,.READWRITE.);
-#346=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#347=IFCSIMPLEPROPERTYTEMPLATE('3_py1uMcv9nBBpndXq5OTL',$,'MaximumPowerOutput','The maximum output power rating of the engine.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#348,$,$,.READWRITE.);
-#348=IFCNAMEDUNIT($,.POWERUNIT.);
-#349=IFCPROPERTYSETTEMPLATE('3M_YTF0NHAavCNfjpvr3$t',$,'Pset_LampTypeCommon','Definition from IAI: A lamp is a component within a light fixture that is designed to emit light. \X2\000A000A\X0\History: Name changed from Pset_LampEmitterTypeCommon in IFC 2x3.\X2\000A\X0\',$,'IfcLampType',(#350,#352,#354,#355,#357,#359,#360,#361,#363));
-#350=IFCSIMPLEPROPERTYTEMPLATE('3SC9Uo40n3QwXuXxMn_2EA',$,'ContributedLuminousFlux','Luminous flux is a photometric measure of radiant flux, i.e. the volume of light emitted from a light source. Luminous flux is measured either for the interior as a whole or for a part of the interior (partial luminous flux for a solid angle). All other photometric parameters are derivatives of luminous flux. Luminous flux is measured in lumens (lm). The luminous flux is given as a nominal value for each lamp.',.P_SINGLEVALUE.,'IfcLuminousFluxMeasure',$,$,#351,$,$,.READWRITE.);
-#351=IFCNAMEDUNIT($,.LUMINOUSFLUXUNIT.);
-#352=IFCSIMPLEPROPERTYTEMPLATE('3pSCXyid51WAJsox3eX2_r',$,'LightEmitterNominalPower','Light emitter nominal power.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#353,$,$,.READWRITE.);
-#353=IFCNAMEDUNIT($,.POWERUNIT.);
-#354=IFCSIMPLEPROPERTYTEMPLATE('1J4b0Qr$978hBebhHImuuV',$,'LampMaintenanceFactor','Non recoverable losses of luminous flux of a lamp due to lamp depreciation; i.e. the decreasing of light output of a luminaire due to aging and dirt. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#355=IFCSIMPLEPROPERTYTEMPLATE('32nA$FhFzBvR1ykucr_kym',$,'LampBallastType','The type of ballast used to stabilise gas discharge by limiting the current during operation and to deliver the necessary striking voltage for starting. Ballasts are needed to operate Discharge Lamps such as Fluorescent, Compact Fluorescent, High-pressure Mercury, Metal Halide and High-pressure Sodium Lamps. \X2\000A\X0\Magnetic ballasts are chokes which limit the current passing through a lamp connected in series on the principle of self-induction. The resultant current and power are decisive for the efficient operation of the lamp. A specially designed ballast is required for every type of lamp to comply with lamp rating in terms of Luminous Flux, Color Appearance and service life. The two types of magnetic ballasts for fluorescent lamps are KVG Conventional (EC-A series) and VVG Low-loss ballasts (EC-B series). Low-loss ballasts have a higher efficiency, which means reduced ballast losses and a lower thermal load. Electronic ballasts are used to run fluorescent lamps at high frequencies (approx. 35 - 40 kHz).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#356,$,$,$,.READWRITE.);
-#356=IFCPROPERTYENUMERATION('PEnum_LampBallastType',(IFCLABEL('Conventional'),IFCLABEL('Electronic'),IFCLABEL('LowLoss'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#357=IFCSIMPLEPROPERTYTEMPLATE('3CSOk_$XP9Mw7q_1jJw3Jg',$,'LampCompensationType','Identifies the form of compensation used for power factor correction and radio suppression.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#358,$,$,$,.READWRITE.);
-#358=IFCPROPERTYENUMERATION('PEnum_LampCompensationType',(IFCLABEL('Capacitive'),IFCLABEL('Inductive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#359=IFCSIMPLEPROPERTYTEMPLATE('0jLV4WJD99F9y2_jG0WXHw',$,'ColorAppearance','In both the DIN and CIE standards, artificial light sources are classified in terms of their color appearance. To the human eye they all appear to be white; the difference can only be detected by direct comparison. Visual performance is not directly affected by differences in color appearance.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#360=IFCSIMPLEPROPERTYTEMPLATE('2iDD8xEnz6ru3m_eGPd118',$,'Spectrum','The spectrum of radiation describes its composition with regard to wavelength. Light, for example, as the portion of electromagnetic radiation that is visible to the human eye, is radiation with wavelengths in the range of approx. 380 to 780 nm (1 nm = 10 m). The corresponding range of colours varies from violet to indigo, blue, green, yellow, orange, and red. These colours form a continuous spectrum, in which the various spectral sectors merge into each other.',.P_TABLEVALUE.,'IfcNumericMeasure','IfcNumericMeasure',$,$,$,$,.READWRITE.);
-#361=IFCSIMPLEPROPERTYTEMPLATE('24QO1hcnn1I8OiG_E9egb$',$,'ColorTemperature','The color temperature of any source of radiation is defined as the temperature (in Kelvin) of a black-body or Planckian radiator whose radiation has the same chromaticity as the source of radiation. Often the values are only approximate color temperatures as the black-body radiator cannot emit radiation of every chromaticity value. The color temperatures of the commonest artificial light sources range from less than 3000K (warm white) to 4000K (intermediate) and over 5000K (daylight).',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#362,$,$,.READWRITE.);
-#362=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#363=IFCSIMPLEPROPERTYTEMPLATE('1u99KwJrP6Thj7PWeIRq4Y',$,'ColorRenderingIndex','The CRI indicates how well a light source renders eight standard colors compared to perfect reference lamp with the same color temperature. The CRI scale ranges from 1 to 100, with 100 representing perfect rendering properties.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#364=IFCPROPERTYSETTEMPLATE('1zqRcLYBX1v9rlc24idw4D',$,'Pset_LightFixtureTypeCommon','Definition from IAI: Common data for light fixtures.',$,'IfcLightFixtureType',(#365,#366,#368,#370,#372,#373,#374));
-#365=IFCSIMPLEPROPERTYTEMPLATE('3j8VSa5H5CER0lELxJ_oD3',$,'NumberOfSources','Number of sources ',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#366=IFCSIMPLEPROPERTYTEMPLATE('2RsPnyZKH97PTSlLfEJFYq',$,'TotalWattage','Wattage on whole lightfitting device with all sources intact.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#367,$,$,.READWRITE.);
-#367=IFCNAMEDUNIT($,.POWERUNIT.);
-#368=IFCSIMPLEPROPERTYTEMPLATE('3LBVeAXhD9UfSFm6y2OM8L',$,'LightFixtureMountingType','A list of the available types of mounting for light fixtures from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#369,$,$,$,.READWRITE.);
-#369=IFCPROPERTYENUMERATION('PEnum_LightFixtureMountingType',(IFCLABEL('CableSpanned'),IFCLABEL('FreeStanding'),IFCLABEL('Pole_Side'),IFCLABEL('Pole_Top'),IFCLABEL('Recessed'),IFCLABEL('Surface'),IFCLABEL('Suspended'),IFCLABEL('TrackMounted'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#370=IFCSIMPLEPROPERTYTEMPLATE('37IQRRSATCMvdtv324ahxY',$,'LightFixturePlacingType','A list of the available types of placing specification for light fixtures from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#371,$,$,$,.READWRITE.);
-#371=IFCPROPERTYENUMERATION('PEnum_LightFixturePlacingType',(IFCLABEL('Ceiling'),IFCLABEL('Floor'),IFCLABEL('Furniture'),IFCLABEL('Pole'),IFCLABEL('Wall'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#372=IFCSIMPLEPROPERTYTEMPLATE('04vGMokdLCP9jJ88zNDcXF',$,'MaintenanceFactor','Maintenance factor.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#373=IFCSIMPLEPROPERTYTEMPLATE('2EvsDj4J52CA2h4lDI2F78',$,'ManufacturersSpecificInformation','Manufacturer specific information.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#374=IFCSIMPLEPROPERTYTEMPLATE('2$0hjX2tj2WAHVqZRKPgRd',$,'ArticleNumber','The article number.',.P_REFERENCEVALUE.,'IfcClassificationReference',$,$,$,$,$,.READWRITE.);
-#375=IFCPROPERTYSETTEMPLATE('2EKQhYMq5BewE_k5CiRoZI',$,'Pset_LightFixtureTypeExitSign','Definition from IAI: Properties that characterize an illuminated exit sign\X2\000A\X0\',$,'IfcLightFixtureType',(#376,#378,#380,#382,#384));
-#376=IFCSIMPLEPROPERTYTEMPLATE('2Zytqe8nTD5R3qqG8uZZ5$',$,'MinimumTextHeight','The minlimum height of this type.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#377,$,$,.READWRITE.);
-#377=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#378=IFCSIMPLEPROPERTYTEMPLATE('2$K6ijSnHAHhqcjr7$IkP5',$,'SelfTestFunction','The type of self test function.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#379,$,$,$,.READWRITE.);
-#379=IFCPROPERTYENUMERATION('PEnum_SelfTestType',(IFCLABEL('Central'),IFCLABEL('Local'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#380=IFCSIMPLEPROPERTYTEMPLATE('2iz1xkWdP7hOaEpbZibVjE',$,'BackupSupplySystem','The type of backup supply system.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#381,$,$,$,.READWRITE.);
-#381=IFCPROPERTYENUMERATION('PEnum_BackupSupplySystemType',(IFCLABEL('LocalBattery'),IFCLABEL('CentralBattery'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#382=IFCSIMPLEPROPERTYTEMPLATE('0JRvDHdD52JvuEktQ6vqR8',$,'PictogramEscapeDirection','The direction of escape pictogram.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#383,$,$,$,.READWRITE.);
-#383=IFCPROPERTYENUMERATION('PEnum_PictogramEscapeDirectionType',(IFCLABEL('RightArrow'),IFCLABEL('LeftArrow'),IFCLABEL('DownArrow'),IFCLABEL('UpArrow'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#384=IFCSIMPLEPROPERTYTEMPLATE('2UacIowYXCdwJZHcB$gC_y',$,'Addressablility','The type of addressability.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#385,$,$,$,.READWRITE.);
-#385=IFCPROPERTYENUMERATION('PEnum_AddressabilityType',(IFCLABEL('Implemented'),IFCLABEL('UpgradeableTo'),IFCLABEL('NotImplemented'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#386=IFCPROPERTYSETTEMPLATE('2cpdPvfcL9sOZ44qQorLlI',$,'Pset_LightFixtureTypeThermal','Definition from IAI: Heat load data for a light fixture.',$,'IfcLightFixtureType',(#387,#389,#391));
-#387=IFCSIMPLEPROPERTYTEMPLATE('1ZXHgkU_P9JfBCxn_6633d',$,'MaximumPlenumSensibleLoad','Maximum or Peak sensible thermal load contributed to the conditioned space by the light fixture. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#388,$,$,.READWRITE.);
-#388=IFCNAMEDUNIT($,.POWERUNIT.);
-#389=IFCSIMPLEPROPERTYTEMPLATE('1SQpauS7D9xANrDk4eW_OP',$,'MaximumSpaceSensibleLoad','Maximum or Peak sensible thermal load contributed to return air plenum by the light fixture.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#390,$,$,.READWRITE.);
-#390=IFCNAMEDUNIT($,.POWERUNIT.);
-#391=IFCSIMPLEPROPERTYTEMPLATE('3iBe18g5n32RluhdTkucFy',$,'SensibleLoadToRadiant','Percent of sensible thermal load to radiant heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#392=IFCPROPERTYSETTEMPLATE('1PFZqAsOT6PO9ZtmApbs8h',$,'Pset_OutletTypeCommon','Definition from IAI: Common properties for different outlet types.',$,'IfcOutletType',(#393));
-#393=IFCSIMPLEPROPERTYTEMPLATE('1gO2J9JCn73h7iwYix_ikf',$,'IsPluggableOutlet','Indication of whether the outlet accepts a loose plug connection (= TRUE) or whether it is directly connected (= FALSE) or whether the form of connection has not yet been determined (= UNKNOWN)',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
-#394=IFCPROPERTYSETTEMPLATE('32k8dgwTr4TQQhXdBOTP1$',$,'Pset_ProtectiveDeviceTypeCircuitBreaker','Definition from IEC 441-14-20: A circuit breaker is a mechanical switching device capable of making, carrying, and breaking currents under normal circuit conditions and also making, carrying for a specified time and breaking, current under specified abnormal circuit conditions such as those of short circuit.',$,'IfcProtectiveDeviceType',(#395));
-#395=IFCSIMPLEPROPERTYTEMPLATE('3u7Z21w2rEeho16H5avCp8',$,'CircuitBreakerType','A list of the available types of circuit breaker from which that required may be selected where:\X2\000A000A\X0\ACB - Air Circuit Breaker;\X2\000A\X0\MCB - Miniature Circuit Breaker (up to 125A);\X2\000A\X0\MCCB - Moulded Case Circuit Breaker (40A - 1600A);\X2\000A\X0\Vacuum - Generally used for high voltage (> 1000V) but may be used for installations close to/up to 1000V.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#396,$,$,$,.READWRITE.);
-#396=IFCPROPERTYENUMERATION('PEnum_CircuitBreakerType',(IFCLABEL('ACB'),IFCLABEL('MCB'),IFCLABEL('MCCB'),IFCLABEL('Vacuum'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#397=IFCPROPERTYSETTEMPLATE('20tl1gjwf34xEJl2F1Mn_i',$,'Pset_ProtectiveDeviceTypeCommon','Definition from IAI: Common properties for different protective device types.',$,'IfcProtectiveDeviceType',(#398,#400,#402,#404,#406,#407,#408,#409));
-#398=IFCSIMPLEPROPERTYTEMPLATE('24K48adhPEyxx_rJSxtKTi',$,'RatedShortCircuitCurrent','An overcurrent resulting from a fault of negligible impedance between live conductors having a difference in potential under normal operating conditions. (IEC 826-05-08)',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#399,$,$,.READWRITE.);
-#399=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#400=IFCSIMPLEPROPERTYTEMPLATE('3K7n3slpv13wuKxxFs33b9',$,'CutOffCurrent','The maximum instantaneous value of current attained during the breaking operation of a protective device. (IEC 441-17-12)',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#401,$,$,.READWRITE.);
-#401=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#402=IFCSIMPLEPROPERTYTEMPLATE('1Cg9adzxf3ohRBZu3K5Yhs',$,'MaximumRatedVoltage','Maximum rated voltage',.P_SINGLEVALUE.,' IfcElectricVoltageMeasure',$,$,#403,$,$,.READWRITE.);
-#403=IFCNAMEDUNIT($,.ELECTRICVOLTAGEUNIT.);
-#404=IFCSIMPLEPROPERTYTEMPLATE('1v9z8KUOH6kuqCJlBhFkd8',$,'LimitingTerminalSize','The maximum terminal size capacity of the device.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#405,$,$,.READWRITE.);
-#405=IFCNAMEDUNIT($,.AREAUNIT.);
-#406=IFCSIMPLEPROPERTYTEMPLATE('2toAKkPZD3rO4Nysv23CEU',$,'SwitchingDuty','The maximum number of operations for the device at the rated making and breaking capacity.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#407=IFCSIMPLEPROPERTYTEMPLATE('2qOazAbFf53PSsyUJwhrPG',$,'CharacteristicTripCurve','A curve giving the time, e.g. prearcing time or operating time, as a function of the protective current under stated conditions of operation. ',.P_TABLEVALUE.,' IfcElectricCurrentMeasure','IfcTimeMeasure',$,$,$,'a = b + c',.READWRITE.);
-#408=IFCSIMPLEPROPERTYTEMPLATE('3SaTQ8BRr5Vh4eXCayD_9T',$,'ProtectiveTagType','The breaking capacity value of the device. Note: This may be expressed as a code or a value depending on standard and/or source.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#409=IFCSIMPLEPROPERTYTEMPLATE('3681IPxh10Xwab3s6tJjjN',$,'StandardUsed','The electrical standard used as a reference when preparing data for the device.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#410=IFCPROPERTYSETTEMPLATE('3u2rMHxGr9WBfIwh07SKNZ',$,'Pset_ProtectiveDeviceTypeEarthFailureDevice','Definition from IAI: An earth failure device acts to protect people and equipment from the effects of current leakage.',$,'IfcProtectiveDeviceType',(#411,#413));
-#411=IFCSIMPLEPROPERTYTEMPLATE('20NqMt0556yQFm5xWzobSM',$,'EarthFailureDeviceType','A list of the available types of circuit breaker from which that required may be selected where:\X2\000A000A\X0\Standard - Device that operates without a time delay;\X2\000A\X0\TimeDelayed - Device that operates after a time delay.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#412,$,$,$,.READWRITE.);
-#412=IFCPROPERTYENUMERATION('PEnum_EarthFailureDeviceType',(IFCLABEL('Standard'),IFCLABEL('TimeDelayed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#413=IFCSIMPLEPROPERTYTEMPLATE('2Aqsw2NCz3nOrxXB31_2w8',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#414,$,$,.READWRITE.);
-#414=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#415=IFCPROPERTYSETTEMPLATE('0ku1i7Ms5AjPkzHj$2i5NW',$,'Pset_ProtectiveDeviceTypeFuseDisconnector','Definition from IAI: A device that will electrically open the circuit after a period of prolonged, abnormal current flow.',$,'IfcProtectiveDeviceType',(#416));
-#416=IFCSIMPLEPROPERTYTEMPLATE('21qPMnb7n92OML_CksH1cg',$,'FuseDisconnectorType','A list of the available types of fuse disconnector from which that required may be selected where:\X2\000A000A\X0\EngineProtectionDevice - A fuse whose characteristic is specifically designed for the protection of a motor or generator.\X2\000A\X0\FuseSwitchDisconnector - A switch disconnector in which a fuse link or a fuse carrier with fuse link forms the moving contact,\X2\000A\X0\HRC - A standard fuse (High Rupturing Capacity)\X2\000A\X0\OverloadProtectionDevice - A device that disconnects the supply when the operating conditions in an electrically undamaged circuit causes an overcurrent,\X2\000A\X0\SemiconductorFuse - A fuse whose characteristic is specifically designed for the protection of sem-conductor devices.\X2\000A\X0\SwitchDisconnectorFuse - A switch disconnector in which one or more poles have a fuse in series in a composite unit.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#417,$,$,$,.READWRITE.);
-#417=IFCPROPERTYENUMERATION('PEnum_FuseDisconnectorType',(IFCLABEL('EngineProtectionDevice'),IFCLABEL('FusedSwitch'),IFCLABEL('HRC'),IFCLABEL('OverloadProtectionDevice'),IFCLABEL('SwitchDisconnectorFuse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#418=IFCPROPERTYSETTEMPLATE('3CRkBrSQ587fH2rMd2_e9Z',$,'Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker','Definition from IAI: A residual current circuit breaker opens, closes or isolates a circuit and has short circuit and overload protection.',$,'IfcProtectiveDeviceType',(#419));
-#419=IFCSIMPLEPROPERTYTEMPLATE('0Nk1j45XL6bwB_kQTEhMyy',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#420,$,$,.READWRITE.);
-#420=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#421=IFCPROPERTYSETTEMPLATE('0czsw9iizD4AtC8xNokPjj',$,'Pset_ProtectiveDeviceTypeResidualCurrentSwitch','Definition from IAI: A residual current switch opens, closes or isolates a circuit and has no short circuit or overload protection.',$,'IfcProtectiveDeviceType',(#422));
-#422=IFCSIMPLEPROPERTYTEMPLATE('0yIQTABIXBWOcfcAJ7aVNx',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#423,$,$,.READWRITE.);
-#423=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#424=IFCPROPERTYSETTEMPLATE('1a$Q$HYSH4TPptspxjJSyB',$,'Pset_ProtectiveDeviceTypeVaristor','Definition from IAI: A high voltage surge protection device.',$,'IfcProtectiveDeviceType',(#425));
-#425=IFCSIMPLEPROPERTYTEMPLATE('1H_VAT7sP2nv80JNv9JwgY',$,'VaristorType','A list of the available types of varistor from which that required may be selected.\X2\000A000A000A000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#426,$,$,$,.READWRITE.);
-#426=IFCPROPERTYENUMERATION('PEnum_VaristorType',(IFCLABEL('MetalOxide'),IFCLABEL('ZincOxide'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#427=IFCPROPERTYSETTEMPLATE('3qxcL38396VvN5nHBXZlmK',$,'Pset_SwitchingDeviceTypeCommon','Definition from IEC 441-14-01: A switching device is a device designed to make or break the current in one or more electric circuits.',$,'IfcSwitchingDeviceType',(#428,#429,#431));
-#428=IFCSIMPLEPROPERTYTEMPLATE('0G853EHGf9DfMS4DkWhVRz',$,'NumberOfGangs','Number of gangs/buttons on this switch',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#429=IFCSIMPLEPROPERTYTEMPLATE('2R68Gns35A$P67mpzTUujO',$,'SwitchFunction','Indicates types of switches which differs in functionality',.P_ENUMERATEDVALUE.,'IfcLabel',$,#430,$,$,$,.READWRITE.);
-#430=IFCPROPERTYENUMERATION('PEnum_SwitchFunctionType',(IFCLABEL('OnOffSwitch'),IFCLABEL('IntermediateSwitch'),IFCLABEL('DoubleThrowSwitch'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#431=IFCSIMPLEPROPERTYTEMPLATE('0CTlxhrgP2Kh_C1FoFo_jt',$,'HasLock','Indication of whether a switching device has a key operated lock (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#432=IFCPROPERTYSETTEMPLATE('3kmiqw6xX5fx74OmQkMeuy',$,'Pset_SwitchingDeviceTypeContactor','Definition from IAI: An electrical device used to control the flow of power in a circuit on or off.',$,'IfcSwitchingDeviceType',(#433));
-#433=IFCSIMPLEPROPERTYTEMPLATE('3Swd1F0z1BOeuXtVvJaRKR',$,'ContactorType','A list of the available types of contactor from which that required may be selected where:\X2\000A000A\X0\CapacitorSwitching - for switching 3 phase single or multi-step capacitor banks\X2\000A\X0\LowCurrent - requires the use of low resistance contacts\X2\000A\X0\MagneticLatching - enables the contactor to remain in the on position when the coil is no longer energized\X2\000A\X0\MechanicalLatching - requires that the contactor is mechanically retained in the on position\X2\000A\X0\Modular - are totally enclosed and self contained\X2\000A\X0\Reversing - has a double set of contactors that are prewired\X2\000A\X0\Standard - is a generic device that controls the flow of power in a circuit on or off\X2\000A000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#434,$,$,$,.READWRITE.);
-#434=IFCPROPERTYENUMERATION('PEnum_ContactorType',(IFCLABEL('CapacitorSwitching'),IFCLABEL('LowCurrent'),IFCLABEL('MagneticLatching'),IFCLABEL('MechanicalLatching'),IFCLABEL('Modular'),IFCLABEL('Reversing'),IFCLABEL('Standard'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#435=IFCPROPERTYSETTEMPLATE('2XPLUp1Q52VOnXgLgiwzwv',$,'Pset_SwitchingDeviceTypeEmergencyStop','Definition from IEC 826-08-03: An emergency stop device acts to remove as quickly as possible any danger that may have arisen unexpectedly.',$,'IfcSwitchingDeviceType',(#436));
-#436=IFCSIMPLEPROPERTYTEMPLATE('36vIEoXrv4YgWhAXjjJWAz',$,'SwitchOperation','Indicates operation of emergency stop switch.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#437,$,$,$,.READWRITE.);
-#437=IFCPROPERTYENUMERATION('PEnum_SwitchFunctionType',(IFCLABEL('Mushroom'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#438=IFCPROPERTYSETTEMPLATE('2fggBLHNnEC8kds542dKiV',$,'Pset_SwitchingDeviceTypeStarter','Definition from IAI: A starter is a switch which in the closed position controls the application of power to an electrical device.',$,'IfcSwitchingDeviceType',(#439));
-#439=IFCSIMPLEPROPERTYTEMPLATE('2gu3b7OZz1qBtEB4RjsqmA',$,'StarterType','A list of the available types of starter from which that required may be selected where:\X2\000A000A\X0\AutoTransformer - A starter for an induction motor which uses for starting one or more reduced voltages derived from an auto transformer. (IEC 441-14-45)\X2\000A\X0\Manual - A starter in which the force for closing the main contacts is provided exclusively by manual energy. (IEC 441-14-39)\X2\000A\X0\DirectOnLine - A starter which connects the line voltage across the motor terminals in one step. (IEC 441-14-40)\X2\000A\X0\Frequency - A starter in which the frequency of the power supply is progressively increased until the normal operation frequency is attained.\X2\000A\X0\nStep - A starter in which there are (n-1) intermediate accelerating positions between the off and full on positions. (IEC 441-14-41)\X2\000A\X0\Rheostatic - A starter using one or several resistors for obtaining, during starting, stated motor torque characteristics and for limiting the current. (IEC 441-14-425)\X2\000A\X0\StarDelta - A starter for a 3 phase induction motor such that in the starting position the stator windings are connected in star and in the final running position they are connected in delta. (IEC 441-14-44)\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#440,$,$,$,.READWRITE.);
-#440=IFCPROPERTYENUMERATION('PEnum_StarterType',(IFCLABEL('AutoTransformer'),IFCLABEL('Manual'),IFCLABEL('DirectOnLine'),IFCLABEL('Frequency'),IFCLABEL('nStep'),IFCLABEL('Rheostatic'),IFCLABEL('StarDelta'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#441=IFCPROPERTYSETTEMPLATE('1GJy5AYDP8jxPrmlwJWJEA',$,'Pset_SwitchingDeviceTypeSwitchDisconnector','Definition from IEC 441-14-12: A switch disconnector is a switch which in the open position satisfies the isolating requirements specified for a disconnector.',$,'IfcSwitchingDeviceType',(#442,#444,#446));
-#442=IFCSIMPLEPROPERTYTEMPLATE('0XaLrSHdzA4RbadPl4N6lH',$,'SwitchDisconnectorType','A list of the available types of switch disconnector from which that required may be selected where:\X2\000A000A\X0\CenterBreak - A disconnector in which both contacts of each pole are movable and engage at a point substantially midway between their supports. (IEC 441-14-08)\X2\000A\X0\DividedSupport - A disconnector in which the fixed and moving contacts of each pole are not supported by a common base or frame. (IEC 441-14-06)\X2\000A\X0\DoubleBreak - A disconnector that opens a circuit at two points. (IEC 441-14-09)\X2\000A\X0\EarthingSwitch - A disconnector in which the fixed and moving contacts of each pole are not supported by a common base or frame. (IEC 441-14-07)\X2\000A\X0\Isolator - A disconnector which in the open position satisfies isolating requirements. (IEC 441-14-12)',.P_ENUMERATEDVALUE.,'IfcLabel',$,#443,$,$,$,.READWRITE.);
-#443=IFCPROPERTYENUMERATION('PEnum_SwitchDisconnectorType',(IFCLABEL('CenterBreak'),IFCLABEL('DividedSupport'),IFCLABEL('DoubleBreak'),IFCLABEL('EarthingSwitch'),IFCLABEL('Isolator'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#444=IFCSIMPLEPROPERTYTEMPLATE('3WPuBXtonAvAEvTxq$X0Of',$,'LoadDisconnectionType','A list of the available types of load disconnection from which that required may be selected.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#445,$,$,$,.READWRITE.);
-#445=IFCPROPERTYENUMERATION('PEnum_LoadDisconnectionType',(IFCLABEL('OffLoad'),IFCLABEL('OnLoad'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#446=IFCSIMPLEPROPERTYTEMPLATE('2RNeYYsjP20wLT5Rjfs6Gp',$,'HasVisualIndication','Indicates whether a means of being to visually ascertain whether the contacts are open or closed is fitted (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#447=IFCPROPERTYSETTEMPLATE('1zlMF79rv0Dhzdu2nQnXfI',$,'Pset_SwitchingDeviceTypeToggleSwitch','Definition from IAI: A toggle switch is a switch that enables or isolates electrical power through a two position on/off action..',$,'IfcSwitchingDeviceType',(#448,#450,#452,#454,#455));
-#448=IFCSIMPLEPROPERTYTEMPLATE('1cITedBRD1jfjHo3roeCEO',$,'ToggleSwitchType','A list of the available types of toggle switch from which that required may be selected.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#449,$,$,$,.READWRITE.);
-#449=IFCPROPERTYENUMERATION('PEnum_ToggleSwitchType',(IFCLABEL('BreakGlass'),IFCLABEL('Changeover'),IFCLABEL('Dimmer'),IFCLABEL('KeyOperated'),IFCLABEL('ManualPull'),IFCLABEL('PushButton'),IFCLABEL('Pullcord'),IFCLABEL('Rocker'),IFCLABEL('Selector'),IFCLABEL('Twist'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#450=IFCSIMPLEPROPERTYTEMPLATE('3bKxeL$Gj9PujeG3ntRp6t',$,'SwitchUsage','A list of the available usages for toggle switches from which that required may be selected\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#451,$,$,$,.READWRITE.);
-#451=IFCPROPERTYENUMERATION('PEnum_SwitchUsage',(IFCLABEL('Emergency'),IFCLABEL('Guard'),IFCLABEL('Limit'),IFCLABEL('Start'),IFCLABEL('Stop'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#452=IFCSIMPLEPROPERTYTEMPLATE('2qRq4oVrzDThI0DD4grNds',$,'SwitchActivation','A list of the available activations for toggle switches from which that required may be selected\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#453,$,$,$,.READWRITE.);
-#453=IFCPROPERTYENUMERATION('PEnum_SwitchActivation',(IFCLABEL('Actuator'),IFCLABEL('Foot'),IFCLABEL('Hand'),IFCLABEL('Proximity'),IFCLABEL('Sound'),IFCLABEL('TwoHand'),IFCLABEL('Wire'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#454=IFCSIMPLEPROPERTYTEMPLATE('0IL4y5K4vBqOmEBiMLE3Qq',$,'IsIlluminated','An indication of whether there is an illuminated indicator to show that the switch is on (=TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#455=IFCSIMPLEPROPERTYTEMPLATE('2vnOWffGf7BgeUuKV8NG36',$,'Legend','A text inscribed or applied to the switch as a legend to indicate purpose or function.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#456=IFCPROPERTYSETTEMPLATE('3DdsLDQqDDvACoAXGkVuJQ',$,'Pset_TransformerTypeCommon','Definition from IAI: An inductive stationary device that transfers electrical energy from one circuit to another.',$,'IfcTransformerType',(#457,#459,#461,#463,#465,#467,#469,#471,#473,#475));
-#457=IFCSIMPLEPROPERTYTEMPLATE('2KusfDHzD2GvoHpNc1evIY',$,'PrimaryVoltage','The voltage that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,' IfcElectricVoltageMeasure',$,$,#458,$,$,.READWRITE.);
-#458=IFCNAMEDUNIT($,.ELECTRICVOLTAGEUNIT.);
-#459=IFCSIMPLEPROPERTYTEMPLATE('1C07$vlN1D3wfIGygcut5A',$,'SecondaryVoltage','The voltage that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,' IfcElectricVoltageMeasure',$,$,#460,$,$,.READWRITE.);
-#460=IFCNAMEDUNIT($,.ELECTRICVOLTAGEUNIT.);
-#461=IFCSIMPLEPROPERTYTEMPLATE('3MYAKyHhD718kbIHDrChtT',$,'PrimaryCurrent','The current that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#462,$,$,.READWRITE.);
-#462=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#463=IFCSIMPLEPROPERTYTEMPLATE('3EZ7$0d915cRFrLMHea8Ro',$,'SecondaryCurrent','The current that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,' IfcElectricCurrentMeasure',$,$,#464,$,$,.READWRITE.);
-#464=IFCNAMEDUNIT($,.ELECTRICCURRENTUNIT.);
-#465=IFCSIMPLEPROPERTYTEMPLATE('1SL7ChpRv1UB4Ln5gA7ybm',$,'PrimaryFrequency','The frequency that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,'IfcFrequencyMeasure',$,$,#466,$,$,.READWRITE.);
-#466=IFCNAMEDUNIT($,.FREQUENCYUNIT.);
-#467=IFCSIMPLEPROPERTYTEMPLATE('2t5QurO8b1tBfkYKu_1xin',$,'SecondaryFrequency','The frequency that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,'IfcFrequencyMeasure',$,$,#468,$,$,.READWRITE.);
-#468=IFCNAMEDUNIT($,.FREQUENCYUNIT.);
-#469=IFCSIMPLEPROPERTYTEMPLATE('0utLonbDb8yOdHqskQcyhm',$,'PrimaryApparentPower','The power in VA (volt ampere) that has been transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#470,$,$,.READWRITE.);
-#470=IFCNAMEDUNIT($,.POWERUNIT.);
-#471=IFCSIMPLEPROPERTYTEMPLATE('10R3cySRjAyf9FhfwqZOVd',$,'SecondaryApparentPower','The power in VA (volt ampere) that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#472,$,$,.READWRITE.);
-#472=IFCNAMEDUNIT($,.POWERUNIT.);
-#473=IFCSIMPLEPROPERTYTEMPLATE('3g1j5a0qLB5uxfQkXAmdBN',$,'MaximumApparentPower','Maximum apparent power/capacity in VA (volt ampere).',.P_SINGLEVALUE.,' IfcPowerMeasure',$,$,#474,$,$,.READWRITE.);
-#474=IFCNAMEDUNIT($,.POWERUNIT.);
-#475=IFCSIMPLEPROPERTYTEMPLATE('1UAtYQu0X1gx97wYdWmRie',$,'SecondaryCurrentType','A list of the secondary current types that can result from transformer output',.P_ENUMERATEDVALUE.,'IfcLabel',$,#476,$,$,$,.READWRITE.);
-#476=IFCPROPERTYENUMERATION('PEnum_SecondaryCurrentType',(IFCLABEL('AC'),IFCLABEL('DC'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#477=IFCPROPERTYSETTEMPLATE('3ExrKMTOnFrPSDWSLjH2ty',$,'Pset_ActionRequest','Definition from IAI: An action request is a request for an action to fulfill a need.\X2\000A\X0\',$,'IfcActionRequest',(#478,#480,#481,#482,#483,#484));
-#478=IFCSIMPLEPROPERTYTEMPLATE('3rpbOafEXAxu$k$wMy4zqk',$,'RequestSourceType','Identifies the predefined types of sources through which a request can be made.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#479,$,$,$,.READWRITE.);
-#479=IFCPROPERTYENUMERATION('PEnum_RequestSourceType',(IFCLABEL('Email'),IFCLABEL('Fax'),IFCLABEL('Phone'),IFCLABEL('Post'),IFCLABEL('Verbal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#480=IFCSIMPLEPROPERTYTEMPLATE('3uKA$jFujBxgV95N67bQNY',$,'RequestSourceLabel','A specific name or label that further qualifies the identity of a request source. In the event of an email, this may be the email address.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#481=IFCSIMPLEPROPERTYTEMPLATE('01LtMfZaT9mP9bkF6OG8jx',$,'RequestSourceName','The person making the request, where known.',.P_REFERENCEVALUE.,'IfcPerson',$,$,$,$,$,.READWRITE.);
-#482=IFCSIMPLEPROPERTYTEMPLATE('0QZ2YkF2f4991WbRqB7b0v',$,'RequestDescription','The request description as provided.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#483=IFCSIMPLEPROPERTYTEMPLATE('3AUul9o6XFgvmuVAa3u_H$',$,'RequestComments','Comments that may be made on the request.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#484=IFCSIMPLEPROPERTYTEMPLATE('2kea99VVPBHxGsPmMmHCV5',$,'Status','The status currently assigned to the request where:\X2\000A\X0\Hold = wait to see if further requests are received before deciding on action,\X2\000A\X0\NoAction = no action is required on this request,\X2\000A\X0\Schedule = plan action to take place as part of maintenance or other task planning/scheduling,\X2\000A\X0\Urgent = take action immediately.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#485,$,$,$,.READWRITE.);
-#485=IFCPROPERTYENUMERATION('PEnum_RequestStatus',(IFCLABEL('Hold'),IFCLABEL('NoAction'),IFCLABEL('Schedule'),IFCLABEL('Urgent'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#486=IFCPROPERTYSETTEMPLATE('2YplRjJFrAGu_vVyhmiPRv',$,'Pset_PackingInstructions','Definition from IAI: Packing instructions are specific instructions relating to the packing that is required for an artefact (instance of IfcProduct) in the event of a move (where the product is related to an instance of IfcMove). \X2\000A\X0\',$,'IfcProduct',(#487,#489,#490,#491));
-#487=IFCSIMPLEPROPERTYTEMPLATE('0VBeevoAv5CPntBVeSwtlZ',$,'PackingCareType','Identifies the predefined types of care that may be required when handling the artefact during a move where:\X2\000A000A\X0\Fragile = artefact may be broken during a move through careless handling.\X2\000A\X0\HandleWithCare = artefact may be damaged during a move through careless handling.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#488,$,$,$,.READWRITE.);
-#488=IFCPROPERTYENUMERATION('PEnum_PackingCareType',(IFCLABEL('Fragile'),IFCLABEL('HandleWithCare'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#489=IFCSIMPLEPROPERTYTEMPLATE('31QfhYn2jD9wnWKK$Ujvc2',$,'WrappingMaterial','Special requirements for material used to wrap an artefact.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#490=IFCSIMPLEPROPERTYTEMPLATE('07sgzGvr91MAc4PIZXawZO',$,'ContainerMaterial','Special requirements for material used to contain an artefact.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#491=IFCSIMPLEPROPERTYTEMPLATE('1AuHEc1WL4GhIHk9kUaPiV',$,'SpecialInstructions','Special instructions for packing.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#492=IFCPROPERTYSETTEMPLATE('07wZLfLfL3pe52oysDZluL',$,'Pset_Permit','Definition from IAI: A permit is a document that allows permission to gain access to an area or carry out work in a situation where security or other access restrictions apply.\X2\000A\X0\',$,'IfcPermit',(#493,#495,#496,#497,#498,#499,#500));
-#493=IFCSIMPLEPROPERTYTEMPLATE('3DLUeTuh530PeS6rGXamnV',$,'PermitType','Identifies the predefined types of permits that can be granted where:\X2\000A000A\X0\Access = enables access to an identified area,\X2\000A\X0\Work = enables work to be carried out in an identified area',.P_ENUMERATEDVALUE.,'IfcLabel',$,#494,$,$,$,.READWRITE.);
-#494=IFCPROPERTYENUMERATION('PEnum_PermitType',(IFCLABEL('Access'),IFCLABEL('Work'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#495=IFCSIMPLEPROPERTYTEMPLATE('0mjGDuf_f0pQkbMq7ePsW1',$,'EscortRequirement','Indicates whether or not an escort is required to accompany persons carrying out a work order at or to/from the place of work (= TRUE) or not (= FALSE).\X2\000A000A\X0\NOTE - There are many instances where escorting is required, particularly in a facility that has a high security rating. Escorting may require that persons are escorted to and from the place of work. Alternatively, it may involve the escort remaining at the place of work at all times.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#496=IFCSIMPLEPROPERTYTEMPLATE('3GEhY6etX64wMWPuNQGZCk',$,'StartDate','Start date.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#497=IFCSIMPLEPROPERTYTEMPLATE('2sNDORW8XCaB0H4MBahT4Q',$,'PermitDuration','Permit duration.',.P_REFERENCEVALUE.,'IfcDateAndTime',$,$,$,$,$,.READWRITE.);
-#498=IFCSIMPLEPROPERTYTEMPLATE('0ZAjindLT1PAUkKamCeANG',$,'StartTime','Start time.',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
-#499=IFCSIMPLEPROPERTYTEMPLATE('2dVgBPIz97fOUbgNrpdvkc',$,'EndTime','End time.',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
-#500=IFCSIMPLEPROPERTYTEMPLATE('0HoEqZNX1B4xI5ty_9Urvz',$,'SpecialRequirements','Any additional special requirements that need to be included in the permit to work.\X2\000A000A\X0\NOTE - Additional permit requirements may be imposed according to the nature of the facility at which the work is carried out. For instance, in clean areas, special clothing may be required whilst in corrective institutions, it may be necessary to check in and check out tools that will be used for work as a safety precaution.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#501=IFCPROPERTYSETTEMPLATE('25tIsg43v2WfzelYv$ZxVv',$,'Pset_AirTerminalBoxPHistory','Definition from IAI: Air terminal box performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#502,#503,#504,#505));
-#502=IFCSIMPLEPROPERTYTEMPLATE('0mxnvktFL8DQveOsUo_luz',$,'DamperPosition','Control damper position, ranging from 0 to 1.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOSITIVERATIOMEASURE($),$,$,.READWRITE.);
-#503=IFCSIMPLEPROPERTYTEMPLATE('21ur1BMeTECfFj9_FHXS8P',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#504=IFCSIMPLEPROPERTYTEMPLATE('2M_fERC9b9cvEXtrD$B34e',$,'Sound','Sound performance.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#505=IFCSIMPLEPROPERTYTEMPLATE('3EaYsC5HbFKQiinCYVeUqv',$,'AirflowCurve','Air flowrate versus damper position relationship;airflow = f ( valve position).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#506=IFCPROPERTYSETTEMPLATE('2GEPREgTj6tuyeGeM5xIaP',$,'Pset_AirTerminalBoxTypeCommon','Definition from IAI: Air terminal box type common attributes.\X2\000A\X0\',$,'IfcAirTerminalBoxType',(#507,#509,#511,#513,#515,#517,#518,#519,#520,#522,#524,#525,#527,#529,#530));
-#507=IFCSIMPLEPROPERTYTEMPLATE('1rKmXrzH5AjABk0RfbKYxy',$,'AirflowRateRange','Range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#508,$,$,.READWRITE.);
-#508=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#509=IFCSIMPLEPROPERTYTEMPLATE('2O9zm96pb6Ivb7dzORpfUW',$,'AirPressureRange','Allowable air static pressure range at the entrance of the air terminal box.',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#510,$,$,.READWRITE.);
-#510=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#511=IFCSIMPLEPROPERTYTEMPLATE('1i7KJWHfP7Bwd4ObhgQkqu',$,'NominalAirFlowRate','Nominal airflow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#512,$,$,.READWRITE.);
-#512=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#513=IFCSIMPLEPROPERTYTEMPLATE('2S3WmqgUTEyAqo_efpqcoO',$,'ArrangementType','Terminal box arrangement.\X2\000A\X0\SingleDuct: Terminal box receives warm or cold air from a single air supply duct.\X2\000A\X0\DualDuct: Terminal box receives warm and cold air from separate air supply ducts.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#514,$,$,$,.READWRITE.);
-#514=IFCPROPERTYENUMERATION('PEnum_AirTerminalBoxArrangementType',(IFCLABEL('SINGLEDUCT'),IFCLABEL('DUALDUCT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#515=IFCSIMPLEPROPERTYTEMPLATE('268V$T4UX8pBZvmLn1dyv$',$,'ReheatType','Terminal box reheat type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#516,$,$,$,.READWRITE.);
-#516=IFCPROPERTYENUMERATION('PEnum_AirTerminalBoxReheatType',(IFCLABEL('ELECTRICALREHEAT'),IFCLABEL('WATERCOILREHEAT'),IFCLABEL('STEAMCOILREHEAT'),IFCLABEL('GASREHEAT'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#517=IFCSIMPLEPROPERTYTEMPLATE('0ODFbvaQz7Z9aiFVh2XzJJ',$,'HasSoundAttenuator','Terminal box has a sound attenuator.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#518=IFCSIMPLEPROPERTYTEMPLATE('2rUfShbqD3bPUwTcxYXfGF',$,'HasReturnAir','Terminal box has return air mixed with supply air from duct work.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#519=IFCSIMPLEPROPERTYTEMPLATE('2to$fY_dz6ahquORvXGucQ',$,'HasFan','Terminal box has a fan inside (fan powered box).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#520=IFCSIMPLEPROPERTYTEMPLATE('1RfXs5OojCm8t8Hbn9_lPK',$,'NominalInletAirPressure','Nominal airflow inlet static pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#521,$,$,.READWRITE.);
-#521=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#522=IFCSIMPLEPROPERTYTEMPLATE('351JyOHYLFRx$bKeKmiIn_',$,'NominalDamperDiameter','Nominal damper diameter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#523,$,$,.READWRITE.);
-#523=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#524=IFCSIMPLEPROPERTYTEMPLATE('3r7$p5Rg1By8wzyIr9k3j4',$,'Material','The primary material used to construct the air terminal box.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#525=IFCSIMPLEPROPERTYTEMPLATE('0Jj7mCrSn5kgNyyBmT1X5a',$,'HousingThickness','Air terminal box housing material thickness.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#526,$,$,.READWRITE.);
-#526=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#527=IFCSIMPLEPROPERTYTEMPLATE('0h2B6clb514Rr9$X9lY$Er',$,'OperationTemperatureRange','Allowable operational range of the ambient air temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#528,$,$,.READWRITE.);
-#528=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#529=IFCSIMPLEPROPERTYTEMPLATE('1kq0c7cgDBXRLNfTyEhzfO',$,'ReturnAirFractionRange','Allowable return air fraction range as a fraction of discharge airflow.',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#530=IFCSIMPLEPROPERTYTEMPLATE('2ua1J3MO9AFhejr44cRXeA',$,'Weight','Weight of the air terminal box.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#531,$,$,.READWRITE.);
-#531=IFCNAMEDUNIT($,.MASSUNIT.);
-#532=IFCPROPERTYSETTEMPLATE('3uzsIVRgb9BOUxB27zZCNs',$,'Pset_AirTerminalPHistory','Definition from IAI: Air terminal performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#533,#535,#537,#539,#541,#543,#544));
-#533=IFCSIMPLEPROPERTYTEMPLATE('35CN5eV097HRmThXNeKcZp',$,'AirFlowRate','Volumetric flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,#534,$,$,.READWRITE.);
-#534=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#535=IFCSIMPLEPROPERTYTEMPLATE('3xc5c2RbHBUu_x6RT9oKyL',$,'NeckAirVelocity','Air velocity at the neck.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,#536,$,$,.READWRITE.);
-#536=IFCDERIVEDUNIT($,.LINEARVELOCITYUNIT.,$,$);
-#537=IFCSIMPLEPROPERTYTEMPLATE('2j37M5RTzDaxKw9_9tsX8d',$,'SupplyAirTemperatureHeating','Supply air temperature in heating mode ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,#538,$,$,.READWRITE.);
-#538=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#539=IFCSIMPLEPROPERTYTEMPLATE('0MQEqBXZjFgvonEQswlUDd',$,'SupplyAirTemperatureCooling','Supply air temperature in cooling mode ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,#540,$,$,.READWRITE.);
-#540=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#541=IFCSIMPLEPROPERTYTEMPLATE('13mVTkOtT5V8zICFULHiZz',$,'PressureDrop','Drop in total pressure between inlet and outlet at nominal air-flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,#542,$,$,.READWRITE.);
-#542=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#543=IFCSIMPLEPROPERTYTEMPLATE('3TNlqAQfjBbv06ksevUJCf',$,'InductionRatio','Induction ratio versus distance from the diffuser and its discharge direction; induction ratio (or entrainment ratio) is the ratio of the volumetric flow rate in the jet to the volumetric flow rate at the air terminal',.P_TABLEVALUE.,'IfcReal','IfcLengthMeasure',$,$,$,$,.READWRITE.);
-#544=IFCSIMPLEPROPERTYTEMPLATE('1$ZqvJ3t55SQyhioHCKn_8',$,'CenterlineAirVelocity','Centerline air velocity versus distance from the diffuser and temperature differential; a function of distance from diffuser and temperature difference between supply air and room air.',.P_TABLEVALUE.,'IfcLinearVelocityMeasure','IfcLengthMeasure',$,$,$,$,.READWRITE.);
-#545=IFCPROPERTYSETTEMPLATE('0vJQXIUxjA8vDN5y9cORlS',$,'Pset_AirTerminalTypeCommon','Definition from IAI: Air terminal type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.\X2\000A\X0\',$,'IfcAirTerminalType',(#546,#548,#550,#552,#554,#556,#558,#560,#561,#563,#564,#566,#568,#570,#572,#573,#575,#576,#577,#579,#581,#583));
-#546=IFCSIMPLEPROPERTYTEMPLATE('1njYL1Yv9AgBbmJMCim_cf',$,'Shape','Shape of the air terminal. Slot is typically a long narrow supply device with an aspect ratio generally greater than 10 to 1.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#547,$,$,$,.READWRITE.);
-#547=IFCPROPERTYENUMERATION('PEnum_AirTerminalShape',(IFCLABEL('ROUND'),IFCLABEL('RECTANGULAR'),IFCLABEL('SQUARE'),IFCLABEL('SLOT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#548=IFCSIMPLEPROPERTYTEMPLATE('3tGMZxe9z2ZexKFURCVzds',$,'FlowPattern','Flow pattern',.P_ENUMERATEDVALUE.,'IfcLabel',$,#549,$,$,$,.READWRITE.);
-#549=IFCPROPERTYENUMERATION('PEnum_AirTerminalFlowPattern',(IFCLABEL('LINEARSINGLE'),IFCLABEL('LINEARDOUBLE'),IFCLABEL('LINEARFOURWAY'),IFCLABEL('RADIAL'),IFCLABEL('SWIRL'),IFCLABEL('DISPLACMENT'),IFCLABEL('COMPACTJET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#550=IFCSIMPLEPROPERTYTEMPLATE('0dDM95KXj5huL$3UTdBMEb',$,'AirFlowrateRange','Air flowrate range within which the air terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#551,$,$,.READWRITE.);
-#551=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#552=IFCSIMPLEPROPERTYTEMPLATE('1jv_3NORH5Deo_w4ovH3I1',$,'TemperatureRange','Temperature range within which the air terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#553,$,$,.READWRITE.);
-#553=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#554=IFCSIMPLEPROPERTYTEMPLATE('3biopPxD9EuQOa$C5p1wAC',$,'DischargeDirection','Discharge direction of the air terminal.\X2\000A\X0\Parallel: discharges parallel to mounting surface designed so that flow attaches to the surface.\X2\000A\X0\Perpendicular: discharges away from mounting surface.\X2\000A\X0\Adjustable: both parallel and perpendicular discharge.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#555,$,$,$,.READWRITE.);
-#555=IFCPROPERTYENUMERATION('PEnum_AirTerminalDischargeDirection',(IFCLABEL('PARALLEL'),IFCLABEL('PERPENDICULAR'),IFCLABEL('ADJUSTABLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#556=IFCSIMPLEPROPERTYTEMPLATE('0gJ5vntv5Cox7lmMUR34CQ',$,'ThrowLength','The horizontal or vertical axial distance an airstream travels after leaving an AirTerminal before the maximum stream velocity is reduced to a specified terminal velocity under isothermal conditions at the upper value of the AirFlowrateRange.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#557,$,$,.READWRITE.);
-#557=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#558=IFCSIMPLEPROPERTYTEMPLATE('0qj571a811PBASExg4Hrf2',$,'AirDiffusionPerformanceIndex','The Air Diffusion Performance Index (ADPI) is used for cooling mode conditions. If several measurements of air velocity and air temperature are made throughout the occupied zone of a space, the ADPI is the percentage of locations where measurements were taken that meet the specifications for effective draft temperature and air velocity.',.P_SINGLEVALUE.,'IfcReal',$,$,#559,$,$,.READWRITE.);
-#559=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#560=IFCSIMPLEPROPERTYTEMPLATE('1YamFKrvP7tPZYmJHi9zpM',$,'Material','The primary material used to construct the air terminal.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#561=IFCSIMPLEPROPERTYTEMPLATE('09atbt04bFBxIe47Z5rpWV',$,'FinishType','The type of finish for the air terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#562,$,$,$,.READWRITE.);
-#562=IFCPROPERTYENUMERATION('PEnum_AirTerminalFinishType',(IFCLABEL('ANNODIZED'),IFCLABEL('PAINTED'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#563=IFCSIMPLEPROPERTYTEMPLATE('0IgLjpCLr8fwew45rK9XvI',$,'FinishColor','The finish color for the air terminal.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#564=IFCSIMPLEPROPERTYTEMPLATE('1kHMO70iv4ugzwWZ2FvTPT',$,'MountingType','The way the air terminal is mounted to the ceiling, wall, etc.\X2\000A\X0\Surface type is mounted to the surface of something (e.g., wall, duct, etc.).\X2\000A\X0\Flat flush type is mounted flat and flush with a surface.\X2\000A\X0\Lay-in type is mounted in a lay-in type ceiling (e.g., a dropped ceiling grid).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#565,$,$,$,.READWRITE.);
-#565=IFCPROPERTYENUMERATION('PEnum_AirTerminalMountingType',(IFCLABEL('SURFACE'),IFCLABEL('FLATFLUSH'),IFCLABEL('LAYIN'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#566=IFCSIMPLEPROPERTYTEMPLATE('3UpUch1s5E5gPSFhzKiMNP',$,'CoreType','Identifies the way the core of the AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#567,$,$,$,.READWRITE.);
-#567=IFCPROPERTYENUMERATION('PEnum_AirTerminalCoreType',(IFCLABEL('SHUTTERBLADE'),IFCLABEL('CURVEDBLADE'),IFCLABEL('REMOVABLE'),IFCLABEL('REVERSIBLE'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#568=IFCSIMPLEPROPERTYTEMPLATE('0fSypq9bP7FfJ4$2LEZtQM',$,'CoreSetHorizontal','Degree of horizontal (in the X-axis of the LocalPlacement) blade set from the centerline.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#569,$,$,.READWRITE.);
-#569=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#570=IFCSIMPLEPROPERTYTEMPLATE('08w5JdAADADAaG2xqZ4xZA',$,'CoreSetVertical','Degree of vertical (in the Y-axis of the LocalPlacement) blade set from the centerline.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#571,$,$,.READWRITE.);
-#571=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#572=IFCSIMPLEPROPERTYTEMPLATE('3X5HE5G3H6mvPRnewKRvUE',$,'HasIntegralControl','If TRUE, a self powered temperature control is included in the AirTerminal.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#573=IFCSIMPLEPROPERTYTEMPLATE('2jbqNe8AjCu8__Oh3bTllK',$,'FlowControlType','Type of flow control element that may be included as a part of the construction of the air terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#574,$,$,$,.READWRITE.);
-#574=IFCPROPERTYENUMERATION('PEnum_AirTerminalFlowControlType',(IFCLABEL('DAMPER'),IFCLABEL('BELLOWS'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#575=IFCSIMPLEPROPERTYTEMPLATE('00d2r2Ie17b9ofa8a_HxBG',$,'HasSoundAttenuator','If TRUE, the air terminal has sound attenuation.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#576=IFCSIMPLEPROPERTYTEMPLATE('0P$V8i_bzDQOqkC5LRQ$Pl',$,'HasThermalInsulation','If TRUE, the air terminal has thermal insulation.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#577=IFCSIMPLEPROPERTYTEMPLATE('1E1HYtJcP4$wBr4iXi437p',$,'NeckArea','Neck area of the air terminal.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#578,$,$,.READWRITE.);
-#578=IFCNAMEDUNIT($,.AREAUNIT.);
-#579=IFCSIMPLEPROPERTYTEMPLATE('2dNLAJgWX3HQ9RHRHE0guh',$,'EffectiveArea','Effective discharge area of the air terminal.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#580,$,$,.READWRITE.);
-#580=IFCNAMEDUNIT($,.AREAUNIT.);
-#581=IFCSIMPLEPROPERTYTEMPLATE('33Gnj5BO5EiOSg9AgHzt1E',$,'Weight','Weight of the air terminal.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#582,$,$,.READWRITE.);
-#582=IFCNAMEDUNIT($,.MASSUNIT.);
-#583=IFCSIMPLEPROPERTYTEMPLATE('3Cm3k8bvT9yhEcX3Q1sV0A',$,'AirFlowrateVersusFlowControlElement','Air flowrate versus flow control element position at nominal pressure drop.',.P_TABLEVALUE.,'IfcVolumetricFlowRateMeasure','IfcPositiveRatioMeasure',$,$,$,$,.READWRITE.);
-#584=IFCPROPERTYSETTEMPLATE('10TqJ7HO5D6hghzGXJ0RQm',$,'Pset_AirTerminalTypeRectangular','Definition from IAI: Rectangular air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#585));
-#585=IFCSIMPLEPROPERTYTEMPLATE('2yq1JEGUzEMRDWAd7K3lth',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#586,$,$,$,.READWRITE.);
-#586=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#587=IFCPROPERTYSETTEMPLATE('3JyokmEEnBGBjpCgcwYBTu',$,'Pset_AirTerminalTypeRound','Definition from IAI: Round air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#588));
-#588=IFCSIMPLEPROPERTYTEMPLATE('0M3EGRnEXAaQ84GoAeanbo',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#589,$,$,$,.READWRITE.);
-#589=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#590=IFCPROPERTYSETTEMPLATE('1fNrqTWmvCp9uBOeljUUaR',$,'Pset_AirTerminalTypeSlot','Definition from IAI: Slot air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#591,#593,#595));
-#591=IFCSIMPLEPROPERTYTEMPLATE('34Cbclbof4FO3lzZoiT166',$,'SlotWidth','Slot width.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#592,$,$,.READWRITE.);
-#592=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#593=IFCSIMPLEPROPERTYTEMPLATE('1Ah7Lq_GD1AelQhc4m3GWp',$,'SlotLength','Slot length.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#594,$,$,.READWRITE.);
-#594=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#595=IFCSIMPLEPROPERTYTEMPLATE('1_5YntKWz33B1dEViDcsy0',$,'NumberOfSlots','Number of slots.',.P_SINGLEVALUE.,'IfcInteger',$,$,#596,$,$,.READWRITE.);
-#596=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#597=IFCPROPERTYSETTEMPLATE('26Q1FaLWT46AmwI6OfTQuD',$,'Pset_AirTerminalTypeSquare','Definition from IAI: Square air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#598));
-#598=IFCSIMPLEPROPERTYTEMPLATE('2pO4GSBfb3rB408Pb6BcPT',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#599,$,$,$,.READWRITE.);
-#599=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#600=IFCPROPERTYSETTEMPLATE('0nXevTlL580BLowzK6igGe',$,'Pset_AirToAirHeatRecoveryPHist','Definition from IAI: Air to Air Heat Recovery performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611));
-#601=IFCSIMPLEPROPERTYTEMPLATE('3r3Gjer751$gdk0DHVKLGi',$,'SensibleEffectiveness','Sensible heat transfer effectiveness, where effectiveness is defined as the ratio of heat transfer to maximum possible heat transfer.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#602=IFCSIMPLEPROPERTYTEMPLATE('3kYHZj4d9C$xMwva0WSav3',$,'TotalEffectiveness','Total heat transfer effectiveness: The ratio of heat transfer to the maximum possible heat transfer.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#603=IFCSIMPLEPROPERTYTEMPLATE('0epM96WxnDWBgFdXSeAPgt',$,'TemperatureEffectiveness','Temperature heat transfer effectiveness: The ratio of primary airflow temperature changes to maximum possible temperature changes.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#604=IFCSIMPLEPROPERTYTEMPLATE('2nX_1E$2bFywlboJOp7c4S',$,'DefrostTemperatureEffectiveness','Temperature heat transfer effectiveness when defrosting is active.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#605=IFCSIMPLEPROPERTYTEMPLATE('03p310iRv6yBboceztAOV4',$,'HumidityEffectiveness','Humidity heat transfer effectiveness: The ratio of primary airflow absolute humidity changes to maximum possible absolute humidity changes.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#606=IFCSIMPLEPROPERTYTEMPLATE('2LKfA037LDFgLL$NEd_Ucs',$,'SensibleHeatTransferRate','Sensible heat transfer rate',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#607=IFCSIMPLEPROPERTYTEMPLATE('0k7B6k6NnAZgU_KW__h2r5',$,'LatentHeatTransferRate','Latent heat transfer rate ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#608=IFCSIMPLEPROPERTYTEMPLATE('3Fl5htRMb7B9qD95MSy_q8',$,'TotalHeatTransferRate','Total heat transfer rate ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#609=IFCSIMPLEPROPERTYTEMPLATE('1yydf3mMPDUOOC5bZ0Kxim',$,'SensibleEffectivenessTable','Sensible heat transfer effectiveness curve as a function of the primary and secondary air flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#610=IFCSIMPLEPROPERTYTEMPLATE('36zJOoyKbBzP1WhBiEUm80',$,'TotalEffectivenessTable','Total heat transfer effectiveness curve as a function of the primary and secondary air flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#611=IFCSIMPLEPROPERTYTEMPLATE('2pqAy5jKfD6veByECFOsrN',$,'AirPressureDropCurves','Air pressure drop as function of air flow rate',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#612=IFCPROPERTYSETTEMPLATE('0JcyrKF6rEvBoV4w$1sAyD',$,'Pset_AirToAirHeatRecoveryTypeCommon','Definition from IAI: Air to Air Heat Recovery type common attributes.\X2\000A\X0\',$,'IfcAirToAirHeatRecoveryType',(#613,#615,#616,#617,#619,#621,#623));
-#613=IFCSIMPLEPROPERTYTEMPLATE('3cDmaAaK16UgzKwbQnfoRX',$,'HeatTransferTypeEnum','Type of heat transfer between the two air streams.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#614,$,$,$,.READWRITE.);
-#614=IFCPROPERTYENUMERATION('PEnum_AirToAirHeatTransferHeatTransferType',(IFCLABEL('SENSIBLE'),IFCLABEL('LATENT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#615=IFCSIMPLEPROPERTYTEMPLATE('1$PQfLNRz1C9yTakF7ROdN',$,'MediaMaterial','The primary media material used for heat transfer.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#616=IFCSIMPLEPROPERTYTEMPLATE('3Zf35407P0JgiMzNIMW86G',$,'HasDefrost','has the heat exchanger has defrost function or not',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#617=IFCSIMPLEPROPERTYTEMPLATE('1sGUg_qGX7XBsBvriJJPpi',$,'OperationalTemperatureRange','Allowable operation ambient air temperature range',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#618,$,$,.READWRITE.);
-#618=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#619=IFCSIMPLEPROPERTYTEMPLATE('0UYpTYGHr3vfG0fnb5PT8a',$,'PrimaryAirflowRateRange','possible range of primary airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#620,$,$,.READWRITE.);
-#620=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#621=IFCSIMPLEPROPERTYTEMPLATE('1njVSHNDDAqgTmwWLH7Xc$',$,'SecondaryAirflowRateRange','possible range of secondary airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#622,$,$,.READWRITE.);
-#622=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#623=IFCSIMPLEPROPERTYTEMPLATE('02Tn9RAb1C2gjQJ1QlQpjx',$,'Weight',$,.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#624,$,$,.READWRITE.);
-#624=IFCNAMEDUNIT($,.MASSUNIT.);
-#625=IFCPROPERTYSETTEMPLATE('2cn6W0SLP6Rf1EyJ4wvm61',$,'Pset_BoilerPHistory','Definition from IAI: Boiler performance history common attributes.\X2\000A\X0\WaterQuality attribute deleted in IFC2x2 Pset Addendum: Use IfcWaterProperties instead. CombustionProductsMaximulLoad and CombustionProductsPartialLoad attributes deleted in IFC2x2 Pset Addendum: Use IfcProductsOfCombustionProperties instead.',$,'IfcPerformanceHistory',(#626,#627,#628,#629,#630,#631,#632,#633,#634));
-#626=IFCSIMPLEPROPERTYTEMPLATE('3gqbzaHUD1UfFEsW3Aq8u6',$,'EnergySourceConsumption','Energy consumption.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#627=IFCSIMPLEPROPERTYTEMPLATE('2hSz97evjDYP1w6cbUWKam',$,'OperationalEfficiency','Operational efficiency: boiler output divided by total energy input (electrical and fuel)',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#628=IFCSIMPLEPROPERTYTEMPLATE('3DDIfd75T3reTtG5gFxOcN',$,'CombustionEfficiency','Combustion efficiency under nominal condition',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#629=IFCSIMPLEPROPERTYTEMPLATE('2Zt$UboK5CbhW11LMdxOAU',$,'WorkingPressure','Boiler working pressure',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#630=IFCSIMPLEPROPERTYTEMPLATE('373xwBC3L0CQaV4guI7clx',$,'CombustionTemperature','Average combustion chamber temperature.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#631=IFCSIMPLEPROPERTYTEMPLATE('3gNza8$p93cAoQe98EaVg4',$,'PartLoadRatio','Ratio of the real to the nominal capacity.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#632=IFCSIMPLEPROPERTYTEMPLATE('2JqJYtY$b839_UlkDWz3C4',$,'Load','Boiler real load',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#633=IFCSIMPLEPROPERTYTEMPLATE('0xpiLgN$XCWv4mfZFEf0ox',$,'PrimaryEnergyConsumption','Boiler primary energy source consumption (i.e., the fuel consumed for changing the thermodynamic state of the fluid).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#634=IFCSIMPLEPROPERTYTEMPLATE('3XzFkXBXvEFwzJQD4aYXti',$,'AuxiliaryEnergyConsumption','Boiler secondary energy source consumption (i.e., the electricity consumed by electrical devices such as fans and pumps).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#635=IFCPROPERTYSETTEMPLATE('09K9qeWaDEy9psg$GGAUFr',$,'Pset_BoilerTypeCommon','Definition from IAI: Boiler type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead. PrimaryEnergySource and AuxiliaryEnergySource attributes deleted in IFC2x2 Pset Addendum: Use IfcEnergyProperties, IfcFuelProperties, etc. instead.',$,'IfcBoilerType',(#636,#638,#640,#641,#643,#645,#647,#649,#650,#652,#653,#654,#655,#657));
-#636=IFCSIMPLEPROPERTYTEMPLATE('0FaaYkswT6FvMBrHJ8YU_s',$,'PressureRating','Nominal pressure rating of the boiler as rated by ASME Boiler and Pressure Vessel Code Section IV, Rules for Construction of Heating Boilers, and Section I, Rules for Construction of Power Boilers',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#637,$,$,.READWRITE.);
-#637=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#638=IFCSIMPLEPROPERTYTEMPLATE('3bLCtClDrBDhryY4X41ExI',$,'OperatingMode','Identifies the operating mode of the boiler.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#639,$,$,$,.READWRITE.);
-#639=IFCPROPERTYENUMERATION('PEnum_BoilerOperatingMode',(IFCLABEL('FIXED'),IFCLABEL('TWOSTEP'),IFCLABEL('MODULATING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#640=IFCSIMPLEPROPERTYTEMPLATE('3_GqTuJlbFT9cnO4ggdcBo',$,'Material','The primary material used to construct the boiler''s heat transfer vessel.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#641=IFCSIMPLEPROPERTYTEMPLATE('0TpOQD6jb4rPG4eH$H2sgi',$,'HeatTransferSurfaceArea','Total heat transfer area of the vessel.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#642,$,$,.READWRITE.);
-#642=IFCNAMEDUNIT($,.AREAUNIT.);
-#643=IFCSIMPLEPROPERTYTEMPLATE('2GuDzX$LT8Bwr2G0yt4FUB',$,'NominalPartLoadRatio','Allowable part load ratio range.',.P_BOUNDEDVALUE.,'IfcReal',$,$,#644,$,$,.READWRITE.);
-#644=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#645=IFCSIMPLEPROPERTYTEMPLATE('3rXy5a3NLBYPysCpSDOCYi',$,'WaterInletTemperatureRange','Allowable water inlet temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#646,$,$,.READWRITE.);
-#646=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#647=IFCSIMPLEPROPERTYTEMPLATE('143gH65Vz01PwlGbZx8dzL',$,'WaterStorageCapacity','Water storage capacity.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#648,$,$,.READWRITE.);
-#648=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#649=IFCSIMPLEPROPERTYTEMPLATE('0RoorJpMX0VP01c0fl1YuM',$,'IsWaterStorageHeater','This is used to identify if the boiler has storage capacity (TRUE). If FALSE, then there is no storage capacity built into the boiler, such as an instantaneous hot water heater.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#650=IFCSIMPLEPROPERTYTEMPLATE('03GIB1yf14AuzV5UzJ0XyT',$,'Weight','Weight of the boiler.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#651,$,$,.READWRITE.);
-#651=IFCNAMEDUNIT($,.MASSUNIT.);
-#652=IFCSIMPLEPROPERTYTEMPLATE('2r5FKGZWP8eBjNGTXDTas5',$,'PartialLoadEfficiencyCurves','Boiler efficiency as a function of the partial load factor; E = f (partialLaodfactor).',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#653=IFCSIMPLEPROPERTYTEMPLATE('04SK$zPPXAm9ruLNctYlkO',$,'NominalEfficiency','The nominal efficiency of the boiler as defined by the manufacturer. For water boilers, a function of inlet versus outlet temperature. For steam boilers, a function of inlet temperature versus steam pressure.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#654=IFCSIMPLEPROPERTYTEMPLATE('2bFULvEUHDNwSoom_c7aGr',$,'HeatOutput','Total nominal heat output as listed by the Boiler manufacturer. For water boilers, it is a function of inlet versus outlet temperature. For steam boilers, it is a function of inlet temperature versus steam pressure.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#655=IFCSIMPLEPROPERTYTEMPLATE('1Dl48UFcH1KeSxefMJoZEs',$,'OutletTemperatureRange','Allowable outlet temperature of either the water or the steam.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#656,$,$,.READWRITE.);
-#656=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#657=IFCSIMPLEPROPERTYTEMPLATE('2jx_F7f7zD$wml5W3MOpHe',$,'NominalEnergyConsumption','Nominal fuel consumption rate required to produce the total boiler heat output.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#658,$,$,.READWRITE.);
-#658=IFCNAMEDUNIT($,.POWERUNIT.);
-#659=IFCPROPERTYSETTEMPLATE('0CEqOAlrLC7Pt_HpVWbIAm',$,'Pset_BoilerTypeSteam','Definition from IAI: Steam boiler type common attributes.\X2\000A\X0\',$,'IfcBoilerType',(#660));
-#660=IFCSIMPLEPROPERTYTEMPLATE('0Do9BSbYv2799yBO0pyuSE',$,'MaximumOutletPressure','Maximum steam outlet pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#661,$,$,.READWRITE.);
-#661=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#662=IFCPROPERTYSETTEMPLATE('0ks70YY8D7hPhCpDJx8Y3c',$,'Pset_ChillerPHistory','Definition from IAI: Chiller performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#663,#664,#665,#666,#668,#670));
-#663=IFCSIMPLEPROPERTYTEMPLATE('2GlTrUuxn7rwIySfKh2Tve',$,'Capacity','The product of the ideal capacity and the overall volumetric efficiency of the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#664=IFCSIMPLEPROPERTYTEMPLATE('1$1AKPtEv1ZP1T7Nrx6Lkx',$,'EnergyEfficiencyRatio','Energy efficiency ratio (EER).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#665=IFCSIMPLEPROPERTYTEMPLATE('3z598abVP0Lfw$Ay_ctncA',$,'CoefficientOfPerformance','Coefficient of performance (COP).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#666=IFCSIMPLEPROPERTYTEMPLATE('2zCOr$$_rDe82bL$t0XMS_',$,'CapacityCurve','Chiller cooling capacity is a function of condensing temperature and evaporating temperature, data is in table form, Capacity = f (TempCon, TempEvp), capacity = a1+b1*Tei+c1*Tei^2+d1*Tci+e1*Tci^2+f1*Tei*Tci.',.P_SINGLEVALUE.,'IfcReal',$,$,#667,$,$,.READWRITE.);
-#667=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#668=IFCSIMPLEPROPERTYTEMPLATE('22WbmqpM19MQV0dkl9i9pn',$,'CoefficientOfPerformanceCurve','Chiller coefficient of performance (COP) is function of condensing temperature and evaporating temperature, data is in table form, COP= f (TempCon, TempEvp), COP = a2+b2*Tei+c2*Tei^2+d2*Tci+e2*Tci^2+f2*Tei*Tci',.P_SINGLEVALUE.,'IfcReal',$,$,#669,$,$,.READWRITE.);
-#669=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#670=IFCSIMPLEPROPERTYTEMPLATE('0McT8hvYDDMuK4RJuz1jMp',$,'FullLoadRatioCurve','Ratio of actual power to full load power as a quadratic function of part load, at certain condensing and evaporating temperature, FracFullLoadPower = f ( PartLoadRatio).',.P_SINGLEVALUE.,'IfcReal',$,$,#671,$,$,.READWRITE.);
-#671=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#672=IFCPROPERTYSETTEMPLATE('2d3dWvRN90vgJdR0GXR0xz',$,'Pset_ChillerTypeCommon','Definition from IAI: Chiller type common attributes.\X2\000A\X0\',$,'IfcChillerType',(#673,#675,#677,#679,#681,#683));
-#673=IFCSIMPLEPROPERTYTEMPLATE('2RkB$HBUb4Hu77y1GR6deb',$,'NominalCapacity','Nominal cooling capacity of chiller at standardized conditions per ARI Standards 550-92, Centrifugal and Rotary Screw Water-Chilling Packages, and ARI Standards 590-92, Positive Displacement Compressor.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#674,$,$,.READWRITE.);
-#674=IFCNAMEDUNIT($,.POWERUNIT.);
-#675=IFCSIMPLEPROPERTYTEMPLATE('0vvI$CLUz8gRxpHcwoz8HV',$,'NominalEfficiency','Nominal chiller efficiency under nominal conditions.',.P_SINGLEVALUE.,'IfcReal',$,$,#676,$,$,.READWRITE.);
-#676=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#677=IFCSIMPLEPROPERTYTEMPLATE('3zzKF3O0T3seveOX_DGQWm',$,'NominalCondensingTemperature','Chiller condensing temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#678,$,$,.READWRITE.);
-#678=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#679=IFCSIMPLEPROPERTYTEMPLATE('3RJge_6eH7V9nXET8hi5kT',$,'NominalEvaporatingTemperature','Chiller evaporating temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#680,$,$,.READWRITE.);
-#680=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#681=IFCSIMPLEPROPERTYTEMPLATE('2Xqt2Giej7ZPvxHA$bD5WG',$,'NominalHeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#682,$,$,.READWRITE.);
-#682=IFCNAMEDUNIT($,.POWERUNIT.);
-#683=IFCSIMPLEPROPERTYTEMPLATE('3XJdyGkf903AaXMh5oNKm6',$,'NominalPowerConsumption','Nominal total power consumption.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#684,$,$,.READWRITE.);
-#684=IFCNAMEDUNIT($,.POWERUNIT.);
-#685=IFCPROPERTYSETTEMPLATE('1s6kzM_wrBdfs0j2gB7ul_',$,'Pset_CoilPHistory','Definition from IAI: Coil performance history common attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#686,#687,#688,#689));
-#686=IFCSIMPLEPROPERTYTEMPLATE('14HyVmIo92MBcq9ZKUgV3E',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#687=IFCSIMPLEPROPERTYTEMPLATE('1cC_q_AWL8q91rYc8tNtwk',$,'AirPressureDropCurve','Air pressure drop curve, pressure drop \X2\2013\X0\ flow rate curve, AirPressureDrop = f (AirflowRate).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#688=IFCSIMPLEPROPERTYTEMPLATE('1cy0DqOsfF4wMQkvEYnQon',$,'SoundCurve','Regenerated sound versus air-flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#689=IFCSIMPLEPROPERTYTEMPLATE('0V_Ne6skr3o88R36LchQlK',$,'FaceVelocity','Air velocity through the coil.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCLINEARVELOCITYMEASURE($),$,$,.READWRITE.);
-#690=IFCPROPERTYSETTEMPLATE('11GjT70WLBkBvxr2UcPUT$',$,'Pset_CoilTypeCommon','Definition from IAI: Coil type common attributes.\X2\000A\X0\',$,'IfcCoilType',(#691,#693,#695,#697,#699));
-#691=IFCSIMPLEPROPERTYTEMPLATE('19r090Kq155OX1lQGCBJt6',$,'OperationalTemperatureRange','Allowable operational air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#692,$,$,.READWRITE.);
-#692=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#693=IFCSIMPLEPROPERTYTEMPLATE('2$Q$MIknLFcBXkRLFgdGhF',$,'AirflowRateRange','Possible range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#694,$,$,.READWRITE.);
-#694=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#695=IFCSIMPLEPROPERTYTEMPLATE('0KCdwzZQ12TPIxBhOJIA$W',$,'NominalSensibleCapacity','Nominal sensible capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#696,$,$,.READWRITE.);
-#696=IFCNAMEDUNIT($,.POWERUNIT.);
-#697=IFCSIMPLEPROPERTYTEMPLATE('27FFtgZZX44x8sdoyLkZsW',$,'NominalLatentCapacity','Nominal latent capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#698,$,$,.READWRITE.);
-#698=IFCNAMEDUNIT($,.POWERUNIT.);
-#699=IFCSIMPLEPROPERTYTEMPLATE('0HdSmW1YzDAQFnhu6LKZ3m',$,'NominalUA','Nominal UA value.',.P_SINGLEVALUE.,'IfcReal',$,$,#700,$,$,.READWRITE.);
-#700=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#701=IFCPROPERTYSETTEMPLATE('2lY06XCUDE1hYR2fo43yBN',$,'Pset_CoilTypeHydronic','Definition from IAI: Hydronic coil type attributes.\X2\000A\X0\',$,'IfcCoilType',(#702,#704,#706,#708,#710,#712,#714,#716,#718,#719,#720,#721,#722,#724));
-#702=IFCSIMPLEPROPERTYTEMPLATE('0wtXWaYvPDNQDS2E7iqJU1',$,'FluidPressureRange','Allowable water working pressure range inside the tube',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#703,$,$,.READWRITE.);
-#703=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#704=IFCSIMPLEPROPERTYTEMPLATE('1FFOG5Hgb2v9nY6xVcKcSY',$,'CoilCoolant','The fluid used for heating or cooling used by the hydronic coil.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#705,$,$,$,.READWRITE.);
-#705=IFCPROPERTYENUMERATION('PEnum_CoilCoolant',(IFCLABEL('WATER'),IFCLABEL('BRINE'),IFCLABEL('GLYCOL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#706=IFCSIMPLEPROPERTYTEMPLATE('3YPZGmknr8UgVZvhj3o0PL',$,'CoilConnectionDirection','Coil connection direction (facing into the air stream).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#707,$,$,$,.READWRITE.);
-#707=IFCPROPERTYENUMERATION('PEnum_CoilConnectionDirection',(IFCLABEL('LEFT'),IFCLABEL('RIGHT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#708=IFCSIMPLEPROPERTYTEMPLATE('3yQvmgMMDE5u7ENBpBSfMe',$,'CoilFluidArrangement','Fluid flow arrangement of the coil.\X2\000A\X0\CrossCounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\CrossParallelFlow: Air and water flow enter in same directions',.P_ENUMERATEDVALUE.,'IfcLabel',$,#709,$,$,$,.READWRITE.);
-#709=IFCPROPERTYENUMERATION('PEnum_CoilFluidArrangement',(IFCLABEL('CROSSFLOW'),IFCLABEL('CROSSCOUNTERFLOW'),IFCLABEL('CROSSPARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#710=IFCSIMPLEPROPERTYTEMPLATE('2cQX1hJAP7jumJ1HRSBqpw',$,'CoilFaceArea','Coil face area in the direction against air the flow.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#711,$,$,.READWRITE.);
-#711=IFCNAMEDUNIT($,.AREAUNIT.);
-#712=IFCSIMPLEPROPERTYTEMPLATE('2LoHc5JA90AP7qIRJ1plv3',$,'HeatExchangeSurfaceArea','Heat exchange surface area associated with U-value.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#713,$,$,.READWRITE.);
-#713=IFCNAMEDUNIT($,.AREAUNIT.);
-#714=IFCSIMPLEPROPERTYTEMPLATE('0W$BTb73X6A8fzZj3AS2Ju',$,'PrimarySurfaceArea','Primary heat transfer surface area of the tubes and headers.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#715,$,$,.READWRITE.);
-#715=IFCNAMEDUNIT($,.AREAUNIT.);
-#716=IFCSIMPLEPROPERTYTEMPLATE('0CgzVFgAD7yfWMwWmPUBh$',$,'SecondarySurfaceArea','Secondary heat transfer surface area created by fins.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#717,$,$,.READWRITE.);
-#717=IFCNAMEDUNIT($,.AREAUNIT.);
-#718=IFCSIMPLEPROPERTYTEMPLATE('2tetaOX$z3svAC6PoeELzv',$,'Fluid','The properties of the hydronic fluid used for heat transfer within the coil tubes.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#719=IFCSIMPLEPROPERTYTEMPLATE('2dr7$713HEiO8hV1L70NSC',$,'TotalUACurves','Total UA curves, UA - air and water velocities, UA = [(C1 * AirFlowRate^0.8)^-1 + (C2 * WaterFlowRate^0.8)^-1]^-1.',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'UA = [(C1 * AirFlowRate^0.8)^-1 + (C2 * WaterFlowRate^0.8)^-1]^-1',.READWRITE.);
-#720=IFCSIMPLEPROPERTYTEMPLATE('27FeE5Ucz8RBG4nUAkpBiH',$,'WaterPressureDropCurve','Water pressure drop curve, pressure drop \X2\2013\X0\ flow rate curve, WaterPressureDrop = f(WaterflowRate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'WaterPressureDrop = f(WaterflowRate).',.READWRITE.);
-#721=IFCSIMPLEPROPERTYTEMPLATE('2VEEYs4q1D9vOlN9Yzosr9',$,'BypassFactor','Fraction of air that is bypassed by the coil (0-1).',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#722=IFCSIMPLEPROPERTYTEMPLATE('09JBY0UInB8e5XfoRsHw8H',$,'SensibleHeatRatio','Air-side sensible heat ratio, or fraction of sensible heat transfer to the total heat transfer.',.P_SINGLEVALUE.,'IfcReal',$,$,#723,$,$,.READWRITE.);
-#723=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#724=IFCSIMPLEPROPERTYTEMPLATE('0Wc$KeG853Zh$yokhfP9wp',$,'WetCoilFraction','Fraction of coil surface area that is wet (0-1).',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#725=IFCPROPERTYSETTEMPLATE('0yaBgOK9n6E94$D64OpnSd',$,'Pset_CompressorPHistory','Definition from IAI: Compressor performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739));
-#726=IFCSIMPLEPROPERTYTEMPLATE('3AKmSG4zv9IPSJA1ngVJ9q',$,'CompressorCapacity','The product of the ideal capacity and the overall volumetric efficiency of the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#727=IFCSIMPLEPROPERTYTEMPLATE('0aEht82lL4DeNzfiwhWxZN',$,'EnergyEfficiencyRatio','Energy efficiency ratio (EER).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#728=IFCSIMPLEPROPERTYTEMPLATE('0VlKdqj0P9ow$ocB0Pnn2C',$,'CoefficientOfPerformance','Coefficient of performance (COP).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#729=IFCSIMPLEPROPERTYTEMPLATE('3_Thyezg53oR$WizymUSEn',$,'VolumetricEfficiency','Ratio of the actual volume of gas entering the compressor to the theoretical displacement of the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#730=IFCSIMPLEPROPERTYTEMPLATE('0eJJZiNxPAJf2TlESBNZFK',$,'CompressionEfficiency','Ratio of the work required for isentropic compression of the gas to the work delivered to the gas within the compression volume (as obtained by measurement).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#731=IFCSIMPLEPROPERTYTEMPLATE('3xwzc2dprBE8Npq$mki8KK',$,'MechanicalEfficiency','Ratio of the work (as measured) delivered to the gas to the work input to the compressor shaft.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#732=IFCSIMPLEPROPERTYTEMPLATE('1oxBsxf_5EIuF3HkzxqSNM',$,'IsentropicEfficiency','Ratio of the work required for isentropic compression of the gas to work input to the compressor shaft.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#733=IFCSIMPLEPROPERTYTEMPLATE('2t9OpS7ZPAIOYNzq8vd4nK',$,'CompressorTotalEfficiency','Ratio of the thermal cooling capacity to electrical input.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#734=IFCSIMPLEPROPERTYTEMPLATE('29NXJoBmHB1OreLTVg3xtB',$,'ShaftPower','The actual shaft power input to the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#735=IFCSIMPLEPROPERTYTEMPLATE('0CKLsQdzb2Qh9KYPaBUGzx',$,'InputPower','Input power to the compressor motor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#736=IFCSIMPLEPROPERTYTEMPLATE('3bocnmjnP4bgsbJ3GQtPjt',$,'LubricantPumpHeatGain','Lubricant pump heat gain.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#737=IFCSIMPLEPROPERTYTEMPLATE('2KHRtU5E5Algdqnfli_4EC',$,'FrictionHeatGain','Friction heat gain.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#738=IFCSIMPLEPROPERTYTEMPLATE('0wo8wXjSbBcghzPcp6ZsLh',$,'CompressorTotalHeatGain','Compressor total heat gain.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#739=IFCSIMPLEPROPERTYTEMPLATE('1U7vetnB59$BlHHIcDEbPf',$,'FullLoadRatioCurve','Ratio of actual power to full load power as a quadratic function of part load, at certain condensing and evaporating temperature, FracFullLoadPower = f ( PartLoadRatio).',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#740=IFCPROPERTYSETTEMPLATE('3lZ2X9_kr95xLCa4YTRlui',$,'Pset_CompressorTypeCommon','Definition from IAI: Compressor type common attributes.\X2\000A\X0\',$,'IfcCompressorType',(#741,#743,#745,#746,#747,#748,#750,#752,#754,#756));
-#741=IFCSIMPLEPROPERTYTEMPLATE('1YbhRcYNT0xvycpx2ljqer',$,'PowerSource','Type of power driving the compressor',.P_ENUMERATEDVALUE.,'IfcLabel',$,#742,$,$,$,.READWRITE.);
-#742=IFCPROPERTYENUMERATION('PEnum_CompressorTypePowerSource',(IFCLABEL('MOTORDRIVEN'),IFCLABEL('ENGINEDRIVEN'),IFCLABEL('GASTURBINE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#743=IFCSIMPLEPROPERTYTEMPLATE('1i4gS_ib93dx3hL06BZKqG',$,'RefrigerantClass','Refrigerant class used by the compressor.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#744,$,$,$,.READWRITE.);
-#744=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#745=IFCSIMPLEPROPERTYTEMPLATE('0vzeqh0zv4LuXld0jkYNHI',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#746=IFCSIMPLEPROPERTYTEMPLATE('3FBSQsT7L3n9HFBk72pzd7',$,'MinimumPartLoadRatio','Minimum part load ratio as a fraction of nominal capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#747=IFCSIMPLEPROPERTYTEMPLATE('0Dk8JEmJn8ORJ6VGx$tBdw',$,'MaximumPartLoadRatio','Maximum part load ratio as a fraction of nominal capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#748=IFCSIMPLEPROPERTYTEMPLATE('05ogIj6JP4lPMI6mHcAc53',$,'CompressorSpeed','Compressor speed',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,#749,$,$,.READWRITE.);
-#749=IFCDERIVEDUNIT($,.ROTATIONALFREQUENCYUNIT.,$,$);
-#750=IFCSIMPLEPROPERTYTEMPLATE('2gMjpcJJn7lAm31CQJa8nD',$,'NominalCapacity','Compressor nameplate capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#751,$,$,.READWRITE.);
-#751=IFCNAMEDUNIT($,.POWERUNIT.);
-#752=IFCSIMPLEPROPERTYTEMPLATE('1rtzxqjkrD4eRfZo$VPwQk',$,'IdealCapacity','Compressor capacity under ideal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#753,$,$,.READWRITE.);
-#753=IFCNAMEDUNIT($,.POWERUNIT.);
-#754=IFCSIMPLEPROPERTYTEMPLATE('1anwnrh$D9JfNeLfpvvRdB',$,'IdealShaftPower','Compressor shaft power under ideal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#755,$,$,.READWRITE.);
-#755=IFCNAMEDUNIT($,.POWERUNIT.);
-#756=IFCSIMPLEPROPERTYTEMPLATE('3R5yE1e8v8fgf1fY5jo$Y$',$,'HasHotGasBypass','Whether or not hot gas bypass is provided for the compressor. TRUE = Yes, FALSE = No.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#757=IFCPROPERTYSETTEMPLATE('1Wn3dsSlf42vGhxRzsZYu1',$,'Pset_CondenserPHistory','Definition from IAI: Condenser performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768));
-#758=IFCSIMPLEPROPERTYTEMPLATE('09EcySdyT6SOeK7RjHp$dd',$,'HeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#759=IFCSIMPLEPROPERTYTEMPLATE('2GwUrblXbE$PDJ9qvNXwg5',$,'ExteriorHeatTransferCoefficient','Exterior heat transfer coefficient associated with exterior surface area.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMALTRANSMITTANCEMEASURE($),$,$,.READWRITE.);
-#760=IFCSIMPLEPROPERTYTEMPLATE('2UDFNVt9D1KfvAzARiVEx2',$,'InteriorHeatTransferCoefficient','Interior heat transfer coefficient associated with interior surface area.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMALTRANSMITTANCEMEASURE($),$,$,.READWRITE.);
-#761=IFCSIMPLEPROPERTYTEMPLATE('3p8Uf_tEnBgQXKODw_gTRH',$,'RefrigerantFoulingResistance','Fouling resistance on the refrigerant side.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#762=IFCSIMPLEPROPERTYTEMPLATE('1jB$JYgdXFr9I6J2bGjKr3',$,'CondensingTemperature','Refrigerant condensing temperature.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#763=IFCSIMPLEPROPERTYTEMPLATE('09ksmtyNfACeZK$LXaPZop',$,'LogarithmicMeanTemperatureDifference','Logarithmic mean temperature difference between refrigerant and water or air.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#764=IFCSIMPLEPROPERTYTEMPLATE('1Xq5Hm_2581xipJ$m2mh2u',$,'UAcurves','UV = f (VExterior, VInterior), UV as a function of interior and exterior fluid flow velocity at the entrance.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#765=IFCSIMPLEPROPERTYTEMPLATE('0WYCkk$BLC8R$fknTkjtdd',$,'CompressorCondenserHeatGain','Heat gain between condenser inlet to compressor outlet.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#766=IFCSIMPLEPROPERTYTEMPLATE('2SLOreX_bFEOza20YS1HCq',$,'CompressorCondenserPressureDrop','Pressure drop between condenser inlet and compressor outlet.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#767=IFCSIMPLEPROPERTYTEMPLATE('31ziR5HbvBlw4AvrS5h_5N',$,'CondenserMeanVoidFraction','Mean void fraction in condenser.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#768=IFCSIMPLEPROPERTYTEMPLATE('38$$5T9NTAvgwqJHv_X5SV',$,'WaterFoulingResistance','Fouling resistance on water/air side.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#769=IFCPROPERTYSETTEMPLATE('1jzWR6RHz6ePyAd2IYqKRe',$,'Pset_CondenserTypeCommon','Definition from IAI: Condenser type common attributes.\X2\000A\X0\',$,'IfcCondenserType',(#770,#772,#773,#775,#777,#779,#781,#783));
-#770=IFCSIMPLEPROPERTYTEMPLATE('1kDBMCGMT429turGdwFzsM',$,'RefrigerantClass','Refrigerant class used by the condenser.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#771,$,$,$,.READWRITE.);
-#771=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#772=IFCSIMPLEPROPERTYTEMPLATE('2y4zGNQ61Fi9_BSXGjP4$a',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#773=IFCSIMPLEPROPERTYTEMPLATE('34$WH9MgvDYveNnT3SaI7P',$,'ExternalSurfaceArea','External surface area (both primary and secondary area).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#774,$,$,.READWRITE.);
-#774=IFCNAMEDUNIT($,.AREAUNIT.);
-#775=IFCSIMPLEPROPERTYTEMPLATE('3aILCbgsr4KgpTnAFIvbSA',$,'InternalSurfaceArea','Internal surface area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#776,$,$,.READWRITE.);
-#776=IFCNAMEDUNIT($,.AREAUNIT.);
-#777=IFCSIMPLEPROPERTYTEMPLATE('0sXvDpgGT7wfoAzBZIPIhR',$,'InternalRefrigerantVolume','Internal volume of condenser (refrigerant side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#778,$,$,.READWRITE.);
-#778=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#779=IFCSIMPLEPROPERTYTEMPLATE('1oZedSRoHDdBibVM8VpK7h',$,'InternalWaterVolume','Internal volume of condenser (water side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#780,$,$,.READWRITE.);
-#780=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#781=IFCSIMPLEPROPERTYTEMPLATE('1YUyyXyfjCNupSno7SUQO2',$,'NominalHeatTransferArea','Nominal heat transfer surface area associated with nominal overall heat transfer coefficient.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#782,$,$,.READWRITE.);
-#782=IFCNAMEDUNIT($,.AREAUNIT.);
-#783=IFCSIMPLEPROPERTYTEMPLATE('1r9yuVcMn8ChnXZQPdyDAo',$,'NominalHeatTransferCoefficient','Nominal overall heat transfer coefficient associated with nominal heat transfer area.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#784,$,$,.READWRITE.);
-#784=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#785=IFCPROPERTYSETTEMPLATE('09Lu7_AVzALeTwZLBzsV_2',$,'Pset_CooledBeamPHistory','Definition from IAI: Common performance history attributes for a cooled beam.\X2\000A\X0\',$,'IfcPerformanceHistory',(#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798));
-#786=IFCSIMPLEPROPERTYTEMPLATE('3v9yOlZzTD8gFHjaUNfZDe',$,'TotalCoolingCapacity','Total cooling capacity. This includes cooling capacity of beam and cooling capacity of supply air',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#787=IFCSIMPLEPROPERTYTEMPLATE('3R73xU2cr72Q9Z_8gg9Z0C',$,'TotalHeatingCapacity','Total heating capacity. This includes heating capacity of beam and heating capacity of supply air',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#788=IFCSIMPLEPROPERTYTEMPLATE('12GCn9ycb6RQiU5pCFVC4x',$,'BeamCoolingCapacity','Cooling capacity of beam. This excludes cooling capacity of supply air',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#789=IFCSIMPLEPROPERTYTEMPLATE('06_U33RsH6ofIkoVwHQDw2',$,'BeamHeatingCapacity','Heating capacity of beam. This excludes heating capacity of supply air',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#790=IFCSIMPLEPROPERTYTEMPLATE('1bCCmdeRv1IPVr9xYHwKL$',$,'CoolingWaterFlowRate','Water flow rate for cooling',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#791=IFCSIMPLEPROPERTYTEMPLATE('1RmRw_WwjCV894CdcOi_VU',$,'HeatingWaterFlowRate','Water flow rate for heating',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#792=IFCSIMPLEPROPERTYTEMPLATE('2Fj9u1DNrDWe_NiyGGkFCi',$,'CorrectionFactorForCooling','Correction factor k as a function of water flow rate (used to calculate cooling capacity)',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#793=IFCSIMPLEPROPERTYTEMPLATE('1Ab7uv0UDAlwYvYJZDxPaP',$,'CorrectionFactorForHeating','Correction factor k as a function of water flow rate (used to calculate heating capacity)',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#794=IFCSIMPLEPROPERTYTEMPLATE('05wakf$cv1tA$3PjlzSF0y',$,'WaterPressureDropCurves','Water pressure drop as function of water flow rate',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#795=IFCSIMPLEPROPERTYTEMPLATE('0pyEbz3uvDrxU5uUVNJAjO',$,'SupplyWaterTemperatureCooling','Supply water temperature in cooling mode',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#796=IFCSIMPLEPROPERTYTEMPLATE('2PqeM1t9v1q8vW42Tu6Ar7',$,'ReturnWaterTemperatureCooling','Return water temperature in cooling mode',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#797=IFCSIMPLEPROPERTYTEMPLATE('1dSDr_WQLA$Owa5pTnLmDX',$,'SupplyWaterTemperatureHeating','Supply water temperature in heating mode',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#798=IFCSIMPLEPROPERTYTEMPLATE('2rB3CDVdD1oOKFovhsYeOn',$,'ReturnWaterTemperatureHeating','Return water temperature in heating mode',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#799=IFCPROPERTYSETTEMPLATE('06$RgHuFH9GeMnRKvCoipS',$,'Pset_CooledBeamPHistoryActive','Definition from IAI: Performance history attributes for an active cooled beam.\X2\000A\X0\',$,'IfcPerformanceHistory',(#800,#801,#802));
-#800=IFCSIMPLEPROPERTYTEMPLATE('2i6XB1NuzB0BTOFWWisayX',$,'AirFlowRate','Air flow rate',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#801=IFCSIMPLEPROPERTYTEMPLATE('39VSj8JVb0vvW$Kge1lWDf',$,'Throw','Distance cooled beam throws the air',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOSITIVELENGTHMEASURE($),$,$,.READWRITE.);
-#802=IFCSIMPLEPROPERTYTEMPLATE('0kBco8m1z94eXHjoCXkHDe',$,'AirPressureDropCurves','Air pressure drop as function of air flow rate',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#803=IFCPROPERTYSETTEMPLATE('1T2VowG7TFvhBpGkx05O8D',$,'Pset_CooledBeamTypeActive','Definition from IAI: Active (ventilated) cooled beam common attributes.\X2\000A\X0\',$,'IfcCooledBeamType',(#804,#806,#808,#810));
-#804=IFCSIMPLEPROPERTYTEMPLATE('1byw6PkyLEtBCM$Qo26EXT',$,'AirFlowConfiguration','Air flow configuration type of cooled beam',.P_ENUMERATEDVALUE.,'IfcLabel',$,#805,$,$,$,.READWRITE.);
-#805=IFCPROPERTYENUMERATION('PEnum_CooledBeamActiveAirFlowConfigurationType',(IFCLABEL('BIDIRECTIONAL'),IFCLABEL('UNIDIRECTIONALRIGHT'),IFCLABEL('UNIDIRECTIONALLEFT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#806=IFCSIMPLEPROPERTYTEMPLATE('1ugS7Wqgr5Z9N58KOHbmOW',$,'AirflowRateRange','Possible range of airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#807,$,$,.READWRITE.);
-#807=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#808=IFCSIMPLEPROPERTYTEMPLATE('0ha$56dvz9Av53T90H7eaq',$,'SupplyAirConnectionType','The manner in which the pipe connection is made to the cooled beam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#809,$,$,$,.READWRITE.);
-#809=IFCPROPERTYENUMERATION('PEnum_CooledBeamSupplyAirConnectionType',(IFCLABEL('STRAIGHT'),IFCLABEL('RIGHT'),IFCLABEL('LEFT'),IFCLABEL('TOP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#810=IFCSIMPLEPROPERTYTEMPLATE('0FdlgH0aPBLAD07jKSfgn_',$,'ConnectionSize','Duct connection diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#811,$,$,.READWRITE.);
-#811=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#812=IFCPROPERTYSETTEMPLATE('239TXt63DEBfy9nFcqf0WG',$,'Pset_CooledBeamTypeCommon','Definition from IAI: Cooled beam common attributes.\X2\000A\X0\SoundLevel and SoundAttenuation attributes deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcCooledBeamType',(#813,#814,#816,#818,#819,#821,#823,#824,#826,#828,#830,#832,#834,#836,#838,#840,#842,#844,#845,#847,#849,#851));
-#813=IFCSIMPLEPROPERTYTEMPLATE('1GSI33X819o8H5VbUBWaJj',$,'IsFreeHanging','Is it free hanging type (not mounted in a false ceiling)?',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#814=IFCSIMPLEPROPERTYTEMPLATE('1Gjc4K2YH2ce9lCK4EFhAk',$,'WaterFlowControlSystemType','Factory fitted waterflow control system',.P_ENUMERATEDVALUE.,'IfcLabel',$,#815,$,$,$,.READWRITE.);
-#815=IFCPROPERTYENUMERATION('PEnum_CooledBeamWaterFlowControlSystemType',(IFCLABEL('NONE'),IFCLABEL('ONOFFVALVE'),IFCLABEL('2WAYVALVE'),IFCLABEL('3WAYVALVE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#816=IFCSIMPLEPROPERTYTEMPLATE('2Fna08a0P6d8Nhp6lSE_PJ',$,'WaterPressureRange','Allowable water circuit working pressure range.',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#817,$,$,.READWRITE.);
-#817=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#818=IFCSIMPLEPROPERTYTEMPLATE('368E27J7v3kRaidhn1qLhX',$,'Material','Primary construction material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#819=IFCSIMPLEPROPERTYTEMPLATE('3cjOY1lmTEfxC4xHw75jO3',$,'NominalCoolingCapacity','Nominal cooling capacity',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#820,$,$,.READWRITE.);
-#820=IFCNAMEDUNIT($,.POWERUNIT.);
-#821=IFCSIMPLEPROPERTYTEMPLATE('0GI1aNB418SwKI3koFf4oM',$,'NominalSurroundingTemperatureCooling','Nominal surrounding temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#822,$,$,.READWRITE.);
-#822=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#823=IFCSIMPLEPROPERTYTEMPLATE('2nOQb$61nEYxsowBBBmYdw',$,'NominalSurroundingHumidityCooling','Nominal surrounding humidity (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#824=IFCSIMPLEPROPERTYTEMPLATE('1sZDyIa7L2Yhq4Fzu9JWUK',$,'NominalSupplyWaterTemperatureCooling','Nominal supply water temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#825,$,$,.READWRITE.);
-#825=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#826=IFCSIMPLEPROPERTYTEMPLATE('2F3UAltOfE2Aeentx7f5iY',$,'NominalReturnWaterTemperatureCooling','Nominal return water temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#827,$,$,.READWRITE.);
-#827=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#828=IFCSIMPLEPROPERTYTEMPLATE('3JHIQugkrERw7$eJZey$QM',$,'NominalWaterFlowCooling','Nominal water flow (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#829,$,$,.READWRITE.);
-#829=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#830=IFCSIMPLEPROPERTYTEMPLATE('0aUKMx00vF7we7qT1hqvoU',$,'NominalHeatingCapacity','Nominal heating capacity',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#831,$,$,.READWRITE.);
-#831=IFCNAMEDUNIT($,.POWERUNIT.);
-#832=IFCSIMPLEPROPERTYTEMPLATE('12F87tnvjDUetpBCntNz8_',$,'NominalSurroundingTemperatureHeating','Nominal surrounding temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#833,$,$,.READWRITE.);
-#833=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#834=IFCSIMPLEPROPERTYTEMPLATE('0ED6raw_T5_eupGMhRwJ4H',$,'NominalSupplyWaterTemperatureHeating','Nominal supply water temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#835,$,$,.READWRITE.);
-#835=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#836=IFCSIMPLEPROPERTYTEMPLATE('01w38xIGjCIOzNmz6$avi8',$,'NominalReturnWaterTemperatureHeating','Nominal return water temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#837,$,$,.READWRITE.);
-#837=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#838=IFCSIMPLEPROPERTYTEMPLATE('2HJJ7_wFX0Q83B27gVLdGC',$,'NominalWaterFlowHeating','Nominal water flow (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#839,$,$,.READWRITE.);
-#839=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#840=IFCSIMPLEPROPERTYTEMPLATE('0RmrY2RmXBUBJz7g2O4$Jx',$,'IntegratedLightingType','Integrated lighting in cooled beam',.P_ENUMERATEDVALUE.,'IfcLabel',$,#841,$,$,$,.READWRITE.);
-#841=IFCPROPERTYENUMERATION('PEnum_CooledBeamIntegratedLightingType',(IFCLABEL('NONE'),IFCLABEL('DIRECT'),IFCLABEL('INDIRECT'),IFCLABEL('DIRECTANDINDIRECT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
-#842=IFCSIMPLEPROPERTYTEMPLATE('1Or0AtLdvAx9Agrsc$UJEy',$,'PipeConnectionEnum','The manner in which the pipe connection is made to the cooled beam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#843,$,$,$,.READWRITE.);
-#843=IFCPROPERTYENUMERATION('PEnum_CooledBeamPipeConnection',(IFCLABEL('STRAIGHT'),IFCLABEL('RIGHT'),IFCLABEL('LEFT'),IFCLABEL('TOP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#844=IFCSIMPLEPROPERTYTEMPLATE('11b8nIm21DifGk3V4dg3Z4',$,'FinishColor','Finish color for cooled beam',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#845=IFCSIMPLEPROPERTYTEMPLATE('35Mm2aKKf9XhOUVxYcXKIX',$,'Weight','Weight of cooled beam',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#846,$,$,.READWRITE.);
-#846=IFCNAMEDUNIT($,.MASSUNIT.);
-#847=IFCSIMPLEPROPERTYTEMPLATE('2aVFix6v53Jwfh2aKsU71Z',$,'CoilLength','Length of coil',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#848,$,$,.READWRITE.);
-#848=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#849=IFCSIMPLEPROPERTYTEMPLATE('2hR2pKViDD093V8AMQZSZL',$,'CoilWidth','Width of coil',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#850,$,$,.READWRITE.);
-#850=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#851=IFCSIMPLEPROPERTYTEMPLATE('09Bdt6EAz6kxeBPbJ9BXXp',$,'ConnectionSize','Pipe connection diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#852,$,$,.READWRITE.);
-#852=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#853=IFCPROPERTYSETTEMPLATE('17UbhebcT46ucgp3fdmU_k',$,'Pset_CoolingTowerPHistory','Definition from IAI: Cooling tower performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#854,#855,#856,#857,#858));
-#854=IFCSIMPLEPROPERTYTEMPLATE('0ARtF7Hq5BUOGK6v$4EFK0',$,'Capacity','Cooling tower capacity in terms of heat transfer rate of the cooling tower between air stream and water stream.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#855=IFCSIMPLEPROPERTYTEMPLATE('2AbgBrcZ13V8HP3y1PELeE',$,'HeatTransferCoefficient','Heat transfer coefficient-area product.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#856=IFCSIMPLEPROPERTYTEMPLATE('1Dvs$C2lzCZQIpehW58Prp',$,'SumpHeaterPower','Electrical heat power of sump heater.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#857=IFCSIMPLEPROPERTYTEMPLATE('1z5HJrAmj6pQYwKWAPGYFl',$,'UACurve','UA value as a function of fan speed at certain water flow rate, UA = f ( fan speed).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#858=IFCSIMPLEPROPERTYTEMPLATE('01hEGvzFz7N9DCyHK8UvtV',$,'Performance','Water temperature change as a function of wet-bulb temperature, water entering temperature, water flow rate, air flow rate, Tdiff = f ( Twet-bulb, Twater,in, mwater, mair).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#859=IFCPROPERTYSETTEMPLATE('0gYHSoLvz7g81TQHxLmTzW',$,'Pset_CoolingTowerTypeCommon','Definition from IAI: Cooling tower type common attributes.\X2\000A\X0\WaterRequirement attribute unit type modified in IFC2x2 Pset Addendum.',$,'IfcCoolingTowerType',(#860,#862,#864,#866,#868,#870,#872,#874,#876,#878,#880,#882,#883,#884,#886,#888));
-#860=IFCSIMPLEPROPERTYTEMPLATE('3z1M76umP7kh5t_il7F0sO',$,'NominalCapacity','Nominal cooling tower capacity in terms of heat transfer rate of the cooling tower between air stream and water stream at nominal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#861,$,$,.READWRITE.);
-#861=IFCNAMEDUNIT($,.POWERUNIT.);
-#862=IFCSIMPLEPROPERTYTEMPLATE('33dgu4wJHAugTaNsC4YXNx',$,'CircuitType','OpenCircuit: Exposes water directly to the cooling atmosphere.\X2\000A\X0\CloseCircuit: The fluid is separated from the atmosphere by a heat exchanger.\X2\000A\X0\Wet: The air stream or the heat exchange surface is evaporatively cooled.\X2\000A\X0\Dry: No evaporation into the air stream.\X2\000A\X0\DryWet: A combination of a dry tower and a wet tower.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#863,$,$,$,.READWRITE.);
-#863=IFCPROPERTYENUMERATION('PEnum_CoolingTowerCircuitType',(IFCLABEL('OPENCIRCUIT'),IFCLABEL('CLOSEDCIRCUITWET'),IFCLABEL('CLOSEDCIRCUITDRY'),IFCLABEL('CLOSEDCIRCUITDRYWET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#864=IFCSIMPLEPROPERTYTEMPLATE('2sMrKLUPTDLgysWk7CPP_E',$,'FlowArrangement','CounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\ParallelFlow: air and water flow enter in same directions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#865,$,$,$,.READWRITE.);
-#865=IFCPROPERTYENUMERATION('PEnum_CoolingTowerFlowArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#866=IFCSIMPLEPROPERTYTEMPLATE('0ZbUlwSgLAlAkB0W0U$VgP',$,'SprayType','SprayFilled: Water is sprayed into airflow.\X2\000A\X0\SplashTypeFill: water cascades over successive rows of splash bars.\X2\000A\X0\FilmTypeFill: water flows in a thin layer over closely spaced sheets.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#867,$,$,$,.READWRITE.);
-#867=IFCPROPERTYENUMERATION('PEnum_CoolingTowerSprayType',(IFCLABEL('SPRAYFILLED'),IFCLABEL('SPLASHTYPEFILL'),IFCLABEL('FILMTYPEFILL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#868=IFCSIMPLEPROPERTYTEMPLATE('1BuUJiY25AKRCXtVs7nDo9',$,'CapacityControl','FanCycling: Fan is cycled on and off to control duty.\X2\000A\X0\TwoSpeedFan: Fan is switched between low and high speed to control duty.\X2\000A\X0\VariableSpeedFan: Fan speed is varied to control duty.\X2\000A\X0\DampersControl: Dampers modulate the air flow to control duty.\X2\000A\X0\BypassValveControl: Bypass valve modulates the water flow to control duty.\X2\000A\X0\MultipleSeriesPumps: Turn on/off multiple series pump to control duty.\X2\000A\X0\TwoSpeedPump: Switch between high/low pump speed to control duty.\X2\000A\X0\VariableSpeedPump: vary pump speed to control duty ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#869,$,$,$,.READWRITE.);
-#869=IFCPROPERTYENUMERATION('PEnum_CoolingTowerCapacityControl',(IFCLABEL('FANCYCLING'),IFCLABEL('TWOSPEEDFAN'),IFCLABEL('VARIABLESPEEDFAN'),IFCLABEL('DAMPERSCONTROL'),IFCLABEL('BYPASSVALVECONTROL'),IFCLABEL('MULTIPLESERIESPUMPS'),IFCLABEL('TWOSPEEDPUMP'),IFCLABEL('VARIABLESPEEDPUMP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#870=IFCSIMPLEPROPERTYTEMPLATE('06Q8EBrlb5bO$7BeJmfbcx',$,'ControlStrategy','FixedExitingWaterTemp: The capacity is controlled to maintain a fixed exiting water temperature.\X2\000A\X0\WetBulbTempReset: The set-point is reset based on the wet-bulb temperature.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#871,$,$,$,.READWRITE.);
-#871=IFCPROPERTYENUMERATION('PEnum_CoolingTowerControlStrategy',(IFCLABEL('FIXEDEXITINGWATERTEMP'),IFCLABEL('WETBULBTEMPRESET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#872=IFCSIMPLEPROPERTYTEMPLATE('0v1nfzAaX7_QazWLMAiSUD',$,'NumberOfCells','Number of cells in one cooling tower unit.',.P_SINGLEVALUE.,'IfcInteger',$,$,#873,$,$,.READWRITE.);
-#873=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#874=IFCSIMPLEPROPERTYTEMPLATE('24ZSsdSxTC2v4seZsLKeLR',$,'BasinReserveVolume','Volume between operating and overflow levels in cooling tower basin.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#875,$,$,.READWRITE.);
-#875=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#876=IFCSIMPLEPROPERTYTEMPLATE('2Vcxs3dpz4k8KDfnWSMkqJ',$,'LiftElevationDifference','Elevation difference between cooling tower sump and the top of the tower.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#877,$,$,.READWRITE.);
-#877=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#878=IFCSIMPLEPROPERTYTEMPLATE('1aRO2QkWD438AgWkkdv6Jj',$,'WaterRequirement','Make-up water requirements.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#879,$,$,.READWRITE.);
-#879=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#880=IFCSIMPLEPROPERTYTEMPLATE('3tSIDqNEL0jOeC9Ig8$4cr',$,'OperationTemperatureRange','Allowable operation ambient air temperature range',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#881,$,$,.READWRITE.);
-#881=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#882=IFCSIMPLEPROPERTYTEMPLATE('0vG7Vzv_L7ZBGSwxclQWVI',$,'CasingMaterial','Casing Material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#883=IFCSIMPLEPROPERTYTEMPLATE('3kyMU8ZK58S9ry8Ejny72O',$,'FillMaterial','Fill Material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#884=IFCSIMPLEPROPERTYTEMPLATE('3bWJZ0aBn16gYwbVRFflTB',$,'Weight','Weight of cooling tower.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#885,$,$,.READWRITE.);
-#885=IFCNAMEDUNIT($,.MASSUNIT.);
-#886=IFCSIMPLEPROPERTYTEMPLATE('16sitrlpr2eOiGzHTTJR4i',$,'AmbientDesignDryBulbTemperature','Ambient design dry bulb temperature used for selecting the cooling tower. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#887,$,$,.READWRITE.);
-#887=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#888=IFCSIMPLEPROPERTYTEMPLATE('2LJ5VSRD99sfeud6IWH2xy',$,'AmbientDesignWetBulbTemperature','Ambient design wet bulb temperature used for selecting the cooling tower. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#889,$,$,.READWRITE.);
-#889=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#890=IFCPROPERTYSETTEMPLATE('2CWg6n$OvEEfLBgp4lZBNU',$,'Pset_DamperPHistory','Definition from IAI: Damper performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#891,#892,#893,#894,#895,#896));
-#891=IFCSIMPLEPROPERTYTEMPLATE('0T7LP_tv589QJXpM29mxDs',$,'AirFlowRate','Air flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#892=IFCSIMPLEPROPERTYTEMPLATE('0U_NMhsx14AOJtliNYrzjO',$,'Leakage','Air leakage rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#893=IFCSIMPLEPROPERTYTEMPLATE('1iBaN33trCCB55MrB7Fs0V',$,'PressureDrop','Pressure drop.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#894=IFCSIMPLEPROPERTYTEMPLATE('0m_liKFOz7MhcsaLHqVMqz',$,'BladePositionAngle','Blade position angle; angle between the blade and flow direction ( 0 - 90).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#895=IFCSIMPLEPROPERTYTEMPLATE('0YcknfXnb06xpiRCJGj16E',$,'DamperPosition','Damper position (0-1); damper position ( 0=closed=90deg position angle, 1=open=0deg position angle.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#896=IFCSIMPLEPROPERTYTEMPLATE('3SVnagbX53rwo8aM_T_CKa',$,'PressureLossCoefficient','Pressure loss coefficient.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#897=IFCPROPERTYSETTEMPLATE('0XWVe2xdz3KRYSm8bkqP_z',$,'Pset_DamperTypeCommon','Definition from IAI: Damper type common attributes.\X2\000A\X0\',$,'IfcDamperType',(#898,#900,#902,#903,#905,#906,#908,#910,#912,#914,#916,#918,#920,#922,#924,#926,#928,#930,#932,#933,#934,#935,#936,#938,#939,#941));
-#898=IFCSIMPLEPROPERTYTEMPLATE('1GgpAguMv0lfTRrzkI$DnS',$,'Operation','The operational mechanism for the damper operation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#899,$,$,$,.READWRITE.);
-#899=IFCPROPERTYENUMERATION('PEnum_DamperOperation',(IFCLABEL('AUTOMATIC'),IFCLABEL('MANUAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#900=IFCSIMPLEPROPERTYTEMPLATE('1XN5hGEez5Ag1sTFWY1iqV',$,'Orientation','The intended orientation for the damper as specified by the manufacturer.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#901,$,$,$,.READWRITE.);
-#901=IFCPROPERTYENUMERATION('PEnum_DamperOrientation',(IFCLABEL('VERTICAL'),IFCLABEL('HORIZONTAL'),IFCLABEL('VERTICALORHORIZONTAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#902=IFCSIMPLEPROPERTYTEMPLATE('07jsEX94f3gerxW7dSri6Q',$,'BladeMaterial','The material from which the damper blades are constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#903=IFCSIMPLEPROPERTYTEMPLATE('0Q2prA_m98rQkC3h4HWmZe',$,'BladeThickness','The thickness of the damper blade.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#904,$,$,.READWRITE.);
-#904=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#905=IFCSIMPLEPROPERTYTEMPLATE('2hlLA6iiH9qOx18UO0196x',$,'SealMaterial','The material from which the damper seals are constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#906=IFCSIMPLEPROPERTYTEMPLATE('2t1bgV05TBJg3fAqHkk3BS',$,'BladeAction','Blade action.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#907,$,$,$,.READWRITE.);
-#907=IFCPROPERTYENUMERATION('PEnum_DamperBladeAction',(IFCLABEL('FOLDINGCURTAIN'),IFCLABEL('PARALLEL'),IFCLABEL('OPPOSED'),IFCLABEL('SINGLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#908=IFCSIMPLEPROPERTYTEMPLATE('3o0bksbpvDrwMe2fwVPqqP',$,'BladeShape','Blade shape. Flat means triple V-groove.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#909,$,$,$,.READWRITE.);
-#909=IFCPROPERTYENUMERATION('PEnum_DamperBladeShape',(IFCLABEL('FLAT'),IFCLABEL('FABRICATEDAIRFOIL'),IFCLABEL('EXTRUDEDAIRFOIL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#910=IFCSIMPLEPROPERTYTEMPLATE('2vt3XByuXF3xS94ip_sO5h',$,'BladeEdge','Blade edge.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#911,$,$,$,.READWRITE.);
-#911=IFCPROPERTYENUMERATION('PEnum_DamperBladeEdge',(IFCLABEL('CRIMPED'),IFCLABEL('UNCRIMPED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#912=IFCSIMPLEPROPERTYTEMPLATE('3P_KEY75b4xx28lzh7oz_r',$,'NumberofBlades','Number of blades.',.P_SINGLEVALUE.,'IfcInteger',$,$,#913,$,$,.READWRITE.);
-#913=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#914=IFCSIMPLEPROPERTYTEMPLATE('1Ik1F7Y_X2awadXuW6CkWd',$,'FaceArea','Face area open to the airstream.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#915,$,$,.READWRITE.);
-#915=IFCNAMEDUNIT($,.AREAUNIT.);
-#916=IFCSIMPLEPROPERTYTEMPLATE('2v2PBJDkPD28y1p690ZGbr',$,'MaximumAirFlowRate','Maximum allowable air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#917,$,$,.READWRITE.);
-#917=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#918=IFCSIMPLEPROPERTYTEMPLATE('2XfUzRGV98eQAFJ0HrImNj',$,'TemperatureRange','Temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#919,$,$,.READWRITE.);
-#919=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#920=IFCSIMPLEPROPERTYTEMPLATE('3hiEjhGFTBlufqRG5qkSTf',$,'MaximumWorkingPressure','Maximum working pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#921,$,$,.READWRITE.);
-#921=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#922=IFCSIMPLEPROPERTYTEMPLATE('28NOA3XWv9Dv8Thh2WOyPG',$,'TemperatureRating','Temperature rating.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#923,$,$,.READWRITE.);
-#923=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#924=IFCSIMPLEPROPERTYTEMPLATE('2WDdJCJHDCkQZvW$xZFmfE',$,'TorqueRange','Torque range.',.P_BOUNDEDVALUE.,'IfcTorqueMeasure',$,$,#925,$,$,.READWRITE.);
-#925=IFCDERIVEDUNIT($,.TORQUEUNIT.,$,$);
-#926=IFCSIMPLEPROPERTYTEMPLATE('2B$q1sJXj4Tgu7l8jYoI4B',$,'NominalAirFlowRate','Nominal air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#927,$,$,.READWRITE.);
-#927=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#928=IFCSIMPLEPROPERTYTEMPLATE('15XThnXNHDyQa2lYPHB9l6',$,'OpenPressureDrop','Total pressure drop across damper.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#929,$,$,.READWRITE.);
-#929=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#930=IFCSIMPLEPROPERTYTEMPLATE('0fU2$WMvv9RR4mJ8TtxUN3',$,'LeakageFullyClosed','Leakage when fully closed.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#931,$,$,.READWRITE.);
-#931=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#932=IFCSIMPLEPROPERTYTEMPLATE('23CzbvEeP8$PO3JJyop9lO',$,'LossCoefficentCurve','Loss coefficient \X2\2013\X0\ blade position angle curve; ratio of pressure drop to velocity pressure versus blade angle; C = f (blade angle position).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'C = f (blade angle position)',.READWRITE.);
-#933=IFCSIMPLEPROPERTYTEMPLATE('25LjehIUnAeQmhwmbTiev8',$,'LeakageCurve','Leakage versus pressure drop; Leakage = f (pressure).',.P_TABLEVALUE.,'IfcVolumetricFlowRateMeasure','IfcPressureMeasure',$,$,$,'Leakage = f (pressure)',.READWRITE.);
-#934=IFCSIMPLEPROPERTYTEMPLATE('2DaxcsEPD9KASP8GaHZWx3',$,'RegeneratedSoundCurve','Regenerated sound versus air flow rate.',.P_TABLEVALUE.,'IfcReal','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
-#935=IFCSIMPLEPROPERTYTEMPLATE('0S1pJ$6O90y9qNyoqyAs0S',$,'FrameType','The type of frame used by the damper (e.g., Standard, Single Flange, Single Reversed Flange, Double Flange, etc.).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#936=IFCSIMPLEPROPERTYTEMPLATE('0Lyrgni$nEhOqfIfRtQlTD',$,'FrameDepth','The length (or depth) of the damper frame.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#937,$,$,.READWRITE.);
-#937=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#938=IFCSIMPLEPROPERTYTEMPLATE('1B0hlcwqn4fuNpL7GiH6bA',$,'FrameMaterial','The material from which the damper frame is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#939=IFCSIMPLEPROPERTYTEMPLATE('2PvMRsDZj5YALoPIOF$X3J',$,'FrameThickness','The thickness of the damper frame material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#940,$,$,.READWRITE.);
-#940=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#941=IFCSIMPLEPROPERTYTEMPLATE('3AfWyOGHD2kgOpvtvtZ6XZ',$,'CloseOffRating','Close off rating. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#942,$,$,.READWRITE.);
-#942=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#943=IFCPROPERTYSETTEMPLATE('1LQ6zWyDX2KQ2oTTBggWtP',$,'Pset_DamperTypeControlDamper','Definition from IAI: Control damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeControl to Pset_DamperTypeControlDamper in IFC2x2 Pset Addendum.\X2\000A\X0\',$,'IfcDamperType',(#944,#946));
-#944=IFCSIMPLEPROPERTYTEMPLATE('3i330kxRTCgOBxltHHL1Wv',$,'TorqueRange','Torque range: minimum operational torque to maximum allowable torque.',.P_BOUNDEDVALUE.,'IfcTorqueMeasure',$,$,#945,$,$,.READWRITE.);
-#945=IFCDERIVEDUNIT($,.TORQUEUNIT.,$,$);
-#946=IFCSIMPLEPROPERTYTEMPLATE('1wGrQohpPE3OvrDL6x8VS0',$,'ControlDamperOperation','The inherent characteristic of the control damper operation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#947,$,$,$,.READWRITE.);
-#947=IFCPROPERTYENUMERATION('PEnum_ControlDamperOperation',(IFCLABEL('LINEAR'),IFCLABEL('EXPONENTIAL'),IFCLABEL('IFCPOLYLINE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#948=IFCPROPERTYSETTEMPLATE('3UEUswk854dw0pnmazCvq1',$,'Pset_DamperTypeFireDamper','Definition from IAI: Fire damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeFire to Pset_DamperTypeFireDamper in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#949,#951,#953,#954));
-#949=IFCSIMPLEPROPERTYTEMPLATE('3UC41MqzD7pffck1NBQPFa',$,'ActuationType','Enumeration that identifies the different types of dampers ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#950,$,$,$,.READWRITE.);
-#950=IFCPROPERTYENUMERATION('PEnum_FireDamperActuationType',(IFCLABEL('GRAVITY'),IFCLABEL('SPRING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#951=IFCSIMPLEPROPERTYTEMPLATE('3sIBvfkDvFHPoVRyYnliYn',$,'ClosureRatingEnum','Enumeration that identifies the closure rating for the damper ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#952,$,$,$,.READWRITE.);
-#952=IFCPROPERTYENUMERATION('PEnum_FireDamperClosureRating',(IFCLABEL('DYNAMIC'),IFCLABEL('STATIC'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#953=IFCSIMPLEPROPERTYTEMPLATE('0qQ06vR8f61QLwxKho1j9_',$,'FireResistanceRating','Measure of the fire resistance rating in hours (e.g., 1.5 hours, 2 hours, etc.). ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#954=IFCSIMPLEPROPERTYTEMPLATE('1YLf$NH6fCTRL1SEWjAh3a',$,'FusibleLinkTemperature','The temperature that the fusible link melts ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#955,$,$,.READWRITE.);
-#955=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#956=IFCPROPERTYSETTEMPLATE('25ZrhTtmPCFulYm34rluuP',$,'Pset_DamperTypeFireSmokeDamper','Definition from IAI: Combination Fire and Smoke damper type attributes.\X2\000A\X0\New Pset in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#957));
-#957=IFCSIMPLEPROPERTYTEMPLATE('3kO4V8tNnFTB9uCm8e$mgG',$,'ControlType','The type of control used to operate the damper (e.g., Open/Closed Indicator, Resetable Temperature Sensor, Temperature Override, etc.) ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#958=IFCPROPERTYSETTEMPLATE('2H33fNKcjBD9tKBpvVQeai',$,'Pset_DamperTypeSmokeDamper','Definition from IAI: Smoke damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeSmoke to Pset_DamperTypeSmokeDamper in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#959));
-#959=IFCSIMPLEPROPERTYTEMPLATE('1r0CQCJ7H1pxbb8CK9mhZv',$,'ControlType','The type of control used to operate the damper (e.g., Open/Closed Indicator, Resetable Temperature Sensor, Temperature Override, etc.) ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#960=IFCPROPERTYSETTEMPLATE('20TYuDhA97BhORO5KDeNVA',$,'Pset_DuctConnection','Definition from IAI: This property set is used to define the various types of duct connections. It is applied to occurrences of duct segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#961));
-#961=IFCSIMPLEPROPERTYTEMPLATE('369pUc4fv93hmBLeNhUWke',$,'ConnectionType','The connection type between duct segments or fittings and other segments or fittings. If the list contains only one value, then this connection type value applies to all ports. For more than one value in the list, the connection type value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No connection type.\X2\000A\X0\NOTDEFINED: Undefined connection type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#962=IFCPROPERTYSETTEMPLATE('3SC0KuyRHDVBSBHxAiAjxt',$,'Pset_DuctDesignCriteria','Definition from IAI: This property set is used to define the general characteristics of the duct design parameters. This property set is typically attached to an instance of an IfcSystem, however, it may also be attached to individual elements within a duct distribution system where individual design parameters overrule those of the system.\X2\000A\X0\HISTORY: New property set in IFC Release 2.0.\X2\000A\X0\',$,'IfcSystem',(#963,#964,#966,#968,#970,#972,#974,#975,#977,#979,#981));
-#963=IFCSIMPLEPROPERTYTEMPLATE('1PGqrsYLH5KBsCoNNiV0tt',$,'DesignName','A name for the design values ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#964=IFCSIMPLEPROPERTYTEMPLATE('1A8Y3t9NP87e7C22edqgKs',$,'DuctSizingMethod','Enumeration that identifies the methodology to be used to size system components ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#965,$,$,$,.READWRITE.);
-#965=IFCPROPERTYENUMERATION('PEnum_DuctSizingMethod',(IFCLABEL('CONSTANTFRICTION'),IFCLABEL('CONSTANTPRESSURE'),IFCLABEL('STATICREGAIN'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#966=IFCSIMPLEPROPERTYTEMPLATE('0zCL07upjE48LCa9KtpAiJ',$,'PressureClass','Nominal pressure rating of the system components. (Data type = PressureMeasure) ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#967,$,$,.READWRITE.);
-#967=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#968=IFCSIMPLEPROPERTYTEMPLATE('0yg4WhF1nCygjWFMxMZQQx',$,'LeakageClass','Nominal leakage rating for the system components. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#969,$,$,.READWRITE.);
-#969=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#970=IFCSIMPLEPROPERTYTEMPLATE('1q7EMj501CYPKhK30TpYvB',$,'FrictionLoss','The pressure loss due to friction per unit length. (Data type = PressureMeasure/LengthMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,#971,$,$,.READWRITE.);
-#971=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#972=IFCSIMPLEPROPERTYTEMPLATE('14kYPXWtn8mgOecNqwQrP1',$,'ScrapFactor','Sheet metal scrap factor ',.P_SINGLEVALUE.,'IfcReal ',$,$,#973,$,$,.READWRITE.);
-#973=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#974=IFCSIMPLEPROPERTYTEMPLATE('1$pLUuJy55AObzaqzQV$il',$,'DuctSealant','Type of sealant used on the duct and fittings ',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#975=IFCSIMPLEPROPERTYTEMPLATE('2mtAyAwAfAL9S18jPkyhxK',$,'MaximumVelocity','The maximum design velocity of the air in the duct or fitting. ',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,#976,$,$,.READWRITE.);
-#976=IFCDERIVEDUNIT($,.LINEARVELOCITYUNIT.,$,$);
-#977=IFCSIMPLEPROPERTYTEMPLATE('1Tp0LrKxX2x9jGFiwaOpXi',$,'AspectRatio','The default aspect ratio ',.P_SINGLEVALUE.,'IfcReal ',$,$,#978,$,$,.READWRITE.);
-#978=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#979=IFCSIMPLEPROPERTYTEMPLATE('0ZZfEFBGT6jgnoo2UHfniF',$,'MinimumHeight','The minimum duct height for rectangular, oval or round duct ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#980,$,$,.READWRITE.);
-#980=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#981=IFCSIMPLEPROPERTYTEMPLATE('0Dh2GtyLnC_e6J6NpkiaQv',$,'MinimumWidth','The minimum duct width for oval or rectangular duct ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#982,$,$,.READWRITE.);
-#982=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#983=IFCPROPERTYSETTEMPLATE('2GvqG21d5808ei$_rFFw3v',$,'Pset_DuctFittingPHistory','Definition from IAI: Duct fitting performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#984,#985,#986));
-#984=IFCSIMPLEPROPERTYTEMPLATE('3ucoAp9TrACx9Izax6wVcV',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#985=IFCSIMPLEPROPERTYTEMPLATE('2SoppObRL2W88pbnT07LGZ',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#986=IFCSIMPLEPROPERTYTEMPLATE('1n$4YrtiDEOeJydNU$L4yw',$,'AirFlowLeakage','Volumetric leakage flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#987=IFCPROPERTYSETTEMPLATE('1EecuC4X554g5qSbOFhApe',$,'Pset_DuctFittingTypeCommon','Definition from IAI: Duct fitting type common attributes.\X2\000A\X0\',$,'IfcDuctFittingType',(#988,#989,#990,#992,#994,#996,#998,#1000,#1001,#1002));
-#988=IFCSIMPLEPROPERTYTEMPLATE('3iscFvDyH2c8qfY6b_jVmG',$,'SubType','Subtype of fitting (I.e., 5-gore, pleated, stamped, etc.) ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#989=IFCSIMPLEPROPERTYTEMPLATE('2JKnKrGJTEjxsX80AuaclZ',$,'Material','The duct fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#990=IFCSIMPLEPROPERTYTEMPLATE('12FeROxQLD89vGFjwfsEIh',$,'MaterialThickness','The thickness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#991,$,$,.READWRITE.);
-#991=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#992=IFCSIMPLEPROPERTYTEMPLATE('3krtOilNnFJBPUsXOsXlEd',$,'PressureClass','Pressure classification as defined by the authority having jurisdiction (e.g., SMACNA, etc.).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#993,$,$,.READWRITE.);
-#993=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#994=IFCSIMPLEPROPERTYTEMPLATE('1TmP1LaPn4YvJqXaG7c59x',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassPerLengthMeasure',$,$,#995,$,$,.READWRITE.);
-#995=IFCDERIVEDUNIT($,.MASSPERLENGTHUNIT.,$,$);
-#996=IFCSIMPLEPROPERTYTEMPLATE('0AmBt2GrH0nxtNiYDeUqyr',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#997,$,$,.READWRITE.);
-#997=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#998=IFCSIMPLEPROPERTYTEMPLATE('3poiqNLBXDweqgK$J2W1RL',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#999,$,$,.READWRITE.);
-#999=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1000=IFCSIMPLEPROPERTYTEMPLATE('0QwabP96P9N9D8sKLGtxoF',$,'NominalDiameterOrWidth','The nominal diameter or width of the duct fitting. If the list contains only one value, then this nominal diameter or width applies to all ports. For more than value in the list, the nominal diameter or width value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1001=IFCSIMPLEPROPERTYTEMPLATE('2DYTdA0DD058pEsKFhbtRr',$,'NominalHeight','The nominal height of the duct fitting. Refer to NominalDiameterOrWidth for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1002=IFCSIMPLEPROPERTYTEMPLATE('0I1Ip36snBNPOWc2MkZ_Vk',$,'EndStyleTreatment','The end-style treatment of the duct fitting manufactured. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No end-style treatment has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1003=IFCPROPERTYSETTEMPLATE('1uZ6Ef8_rAFBXHmVq6NJnA',$,'Pset_DuctSegmentPHistory','Definition from IAI: Duct segment performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1004,#1005,#1006,#1007));
-#1004=IFCSIMPLEPROPERTYTEMPLATE('0ICiXxszv6Sx4tAs6LmjOw',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1005=IFCSIMPLEPROPERTYTEMPLATE('0dKiOQ1q5C8AjeX35BhUrT',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1006=IFCSIMPLEPROPERTYTEMPLATE('0B_g82eE1CPRSw$Ut04WkB',$,'LeakageCurve','Leakage per unit length curve versus working pressure. If a scalar is expressed then it represents LeakageClass which is flowrate per unit area at a specified pressure rating (e.g., ASHRAE Fundamentals 2001 34.16.).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1007=IFCSIMPLEPROPERTYTEMPLATE('2UnTP_IaX8juCdOzvFma0e',$,'FluidFlowLeakage','Volumetric leakage flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1008=IFCPROPERTYSETTEMPLATE('3q4r$u6T9DWPPM9IRo1XG8',$,'Pset_DuctSegmentTypeCommon','Definition from IAI: Duct segment type common attributes.\X2\000A\X0\',$,'IfcDuctSegmentType',(#1009,#1011,#1012,#1014,#1016,#1018,#1020,#1022,#1023,#1025,#1026,#1027,#1028,#1029));
-#1009=IFCSIMPLEPROPERTYTEMPLATE('0EEowUHpP4axdMUs_TwRcm',$,'Shape','Cross sectional shape. Note that this shape is uniform throughout the length of the segment. For nonuniform shapes, a transition fitting should be used instead.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1010,$,$,$,.READWRITE.);
-#1010=IFCPROPERTYENUMERATION('PEnum_DuctSegmentShape',(IFCLABEL('FLATOVAL'),IFCLABEL('RECTANGULAR'),IFCLABEL('ROUND'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1011=IFCSIMPLEPROPERTYTEMPLATE('2dyvQu_sv5$Bhk2YoH4RUc',$,'Material','The duct segment material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1012=IFCSIMPLEPROPERTYTEMPLATE('3sq9rzlrH5LQJyHpV36YKf',$,'MaterialThickness','The thickness of the duct segment material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1013,$,$,.READWRITE.);
-#1013=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1014=IFCSIMPLEPROPERTYTEMPLATE('1iCpIVRIzBphXvPv4HUpCd',$,'WorkingPressure','Pressure classification as defined by the authority having jurisdiction (e.g., SMACNA, etc.).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1015,$,$,.READWRITE.);
-#1015=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1016=IFCSIMPLEPROPERTYTEMPLATE('21p9I8Sc9CXuEqKDtuRbFb',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1017,$,$,.READWRITE.);
-#1017=IFCNAMEDUNIT($,.MASSUNIT.);
-#1018=IFCSIMPLEPROPERTYTEMPLATE('38hz14wUv2uRaFcX94$UCC',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#1019,$,$,.READWRITE.);
-#1019=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1020=IFCSIMPLEPROPERTYTEMPLATE('1w6wBBHezCzAB1XN$chm9a',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1021,$,$,.READWRITE.);
-#1021=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1022=IFCSIMPLEPROPERTYTEMPLATE('1mjS$EzWLEPPNCABj1VFKT',$,'LongitudinalSeam','The type of seam to be used along the longitudinal axis of the duct segment.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1023=IFCSIMPLEPROPERTYTEMPLATE('3MDxhSamL7hfoLN6XNw125',$,'Length','Length of the duct segment. If a Length attribute is provided in the occurrence property set, it supersedes this value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1024,$,$,.READWRITE.);
-#1024=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1025=IFCSIMPLEPROPERTYTEMPLATE('1f2BuxA_5Ckh7uT05uW0uL',$,'NominalDiameterOrWidth','The nominal diameter or width of the duct segment. If the list contains only one value, then this nominal diameter or width applies to all ports. For more than value in the list, the nominal diameter or width value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1026=IFCSIMPLEPROPERTYTEMPLATE('2GiiQeR1DDuAVBRoW0Rk3g',$,'NominalHeight','The nominal height of the duct segment. Refer to NominalDiameterOrWidth for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1027=IFCSIMPLEPROPERTYTEMPLATE('0ddRPJiFz4OgqsnRaq3FWE',$,'EndStyleTreatment','The end-style treatment of the duct segment manufactured. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No end-style treatment has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1028=IFCSIMPLEPROPERTYTEMPLATE('2yMtVp9lD6ZenS5aIDv8$w',$,'Reinforcement','The type of reinforcement, if any, used for the duct segment.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1029=IFCSIMPLEPROPERTYTEMPLATE('2bz_MI_cz27f3ObBBjNGi0',$,'ReinforcementSpacing','The spacing between reinforcing elements.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#1030,$,$,.READWRITE.);
-#1030=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1031=IFCPROPERTYSETTEMPLATE('0c87rP5p94BQ5NY1Jfqbk5',$,'Pset_DuctSilencerPHistory','Definition from IAI: Duct silencer performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1032,#1033));
-#1032=IFCSIMPLEPROPERTYTEMPLATE('3CkJWLnNfEv9lNsoi_lsYU',$,'AirFlowRate','Volumetric air flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1033=IFCSIMPLEPROPERTYTEMPLATE('2zLlv4JDzE4g92PdEIvw6k',$,'AirPressureDropCurve','Air pressure drop as a function of air flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
-#1034=IFCPROPERTYSETTEMPLATE('2t$4btkqbFORHHN_Ku1H$c',$,'Pset_DuctSilencerTypeCommon','Definition from IAI: Duct silencer type common attributes.\X2\000A\X0\InsertionLoss and RegeneratedSound attributes deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcDuctSilencerType',(#1035,#1037,#1039,#1041,#1043,#1045,#1047,#1049));
-#1035=IFCSIMPLEPROPERTYTEMPLATE('1PABGKRu5F59QGqXMyKbRg',$,'Shape','Cross sectional shape.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1036,$,$,$,.READWRITE.);
-#1036=IFCPROPERTYENUMERATION('PEnum_DuctSilencerShape',(IFCLABEL('FLATOVAL'),IFCLABEL('RECTANGULAR'),IFCLABEL('ROUND'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1037=IFCSIMPLEPROPERTYTEMPLATE('1PuQAO1hr8a9f8FK$08ari',$,'HydraulicDiameter','Hydraulic diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1038,$,$,.READWRITE.);
-#1038=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1039=IFCSIMPLEPROPERTYTEMPLATE('0nEu5H3Gv4ZvYAw1eFxdqH',$,'Length','The finished length of the silencer.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1040,$,$,.READWRITE.);
-#1040=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1041=IFCSIMPLEPROPERTYTEMPLATE('2XakoQxLn89QGga5FSvLnC',$,'Weight','The weight of the silencer.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1042,$,$,.READWRITE.);
-#1042=IFCNAMEDUNIT($,.MASSUNIT.);
-#1043=IFCSIMPLEPROPERTYTEMPLATE('0UcVEIuIXBwhaOOZ8NG5Zy',$,'AirFlowrateRange','Possible range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1044,$,$,.READWRITE.);
-#1044=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1045=IFCSIMPLEPROPERTYTEMPLATE('0tNuKqN0H8qR_WcLmUEjVB',$,'WorkingPressureRange','Allowable minimum and maximum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#1046,$,$,.READWRITE.);
-#1046=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1047=IFCSIMPLEPROPERTYTEMPLATE('0GmGG7ri93yAVKzLw9LhSG',$,'TemperatureRange','Allowable minimum and maximum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1048,$,$,.READWRITE.);
-#1048=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1049=IFCSIMPLEPROPERTYTEMPLATE('3gQnh1yFHEOPd1mtR4prLH',$,'HasExteriorInsulation','TRUE if the silencer has exterior insulation. FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1050=IFCPROPERTYSETTEMPLATE('0wsg7OCjLC9hhWOTU_rJqs',$,'Pset_EnergyConsumptionPHistoryElectricity','Definition from IAI: Measured electrical energy consumption properties.',$,'IfcPerformanceHistory',(#1051,#1052,#1053,#1054,#1055,#1056));
-#1051=IFCSIMPLEPROPERTYTEMPLATE('3WRexYQvj3jhWqoWZJtVqN',$,'Voltage','Operating voltage.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCELECTRICVOLTAGEMEASURE($),$,$,.READWRITE.);
-#1052=IFCSIMPLEPROPERTYTEMPLATE('39SmEdk_X4D9bgFu0DfrLw',$,'RealPower','Real power.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1053=IFCSIMPLEPROPERTYTEMPLATE('1xxg$Itpj1XgDRrATQFzFb',$,'ReactivePower','Reactive power.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1054=IFCSIMPLEPROPERTYTEMPLATE('1mHwbVMZn1rwYBlRWwaxzD',$,'ApparentPower','Apparent power.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1055=IFCSIMPLEPROPERTYTEMPLATE('1sAGAhPfT6tB3_MGaMCJY6',$,'PowerFactor','Power factor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCRATIOMEASURE($),$,$,.READWRITE.);
-#1056=IFCSIMPLEPROPERTYTEMPLATE('2kVeDgxML3gRQH0jVPqKuF',$,'Current','Current.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCELECTRICCURRENTMEASURE($),$,$,.READWRITE.);
-#1057=IFCPROPERTYSETTEMPLATE('1lyD4nis9B_R1A4sHCx$1m',$,'Pset_EnergyConsumptionPHistoryFuel','Definition from IAI: Measured fuel energy consumption properties.',$,'IfcPerformanceHistory',(#1058,#1059,#1060));
-#1058=IFCSIMPLEPROPERTYTEMPLATE('1ORxTIQev9wP5K9Lf_ozmr',$,'Temperature','The temperature of the fuel.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1059=IFCSIMPLEPROPERTYTEMPLATE('2aNRODRWn0chIMIbP3WJkf',$,'Pressure','The pressure of the fuel.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1060=IFCSIMPLEPROPERTYTEMPLATE('2CxvL8KJL8dxQi8dTKIXdY',$,'Flowrate','The flowrate of the fuel.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCMASSFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1061=IFCPROPERTYSETTEMPLATE('0yYcKukbjBoOmzaOLnZ$Bu',$,'Pset_EnergyConsumptionPHistorySteam','Definition from IAI: Measured steam energy consumption properties.',$,'IfcPerformanceHistory',(#1062,#1063,#1064,#1065));
-#1062=IFCSIMPLEPROPERTYTEMPLATE('0xskAg_$f1leXeuUFn_TNL',$,'Temperature','Operating steam temperature.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1063=IFCSIMPLEPROPERTYTEMPLATE('0hWqfjn8T5bh2xGACcyczP',$,'Pressure','Operating steam pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1064=IFCSIMPLEPROPERTYTEMPLATE('0TCOuRn2rFDAEiIog6Xlh3',$,'Flowrate','The mass flowrate of the steam.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCMASSFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1065=IFCSIMPLEPROPERTYTEMPLATE('24Wp0U6FLCKPDHbcx_G9lk',$,'Quality','Steam quality.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1066=IFCPROPERTYSETTEMPLATE('3pQyz1iHT8vgXggk_DjCE7',$,'Pset_EvaporativeCoolerPHistory','Definition from IAI: Evaporative cooler performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1067,#1068,#1069,#1070,#1071,#1072,#1073,#1074));
-#1067=IFCSIMPLEPROPERTYTEMPLATE('0_xW8EptzF$OuZk8HdaR6a',$,'WaterSumpTemperature','Water sump temperature.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1068=IFCSIMPLEPROPERTYTEMPLATE('0RB0AWCT90heVzo7UGpRJw',$,'Effectiveness','Ratio of the change in dry bulb temperature of the (primary) air stream to the difference between the entering dry bulb temperature of the (primary) air and the wet-bulb temperature of the (secondary) air.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1069=IFCSIMPLEPROPERTYTEMPLATE('1snSTGV9HAcv5JLmDUAyr0',$,'SensibleHeatTransferRate','Sensible heat transfer rate to primary air flow.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1070=IFCSIMPLEPROPERTYTEMPLATE('3ApjT4z5f7cv2J2f3MibyY',$,'LatentHeatTransferRate','Latent heat transfer rate to primary air flow.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1071=IFCSIMPLEPROPERTYTEMPLATE('0Vrjl4qr91xwGAeZRXmby5',$,'TotalHeatTransferRate','Total heat transfer rate to primary air flow.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1072=IFCSIMPLEPROPERTYTEMPLATE('3nXkUxlOf9xQEn_vwgjZtn',$,'EffectivenessTable','Total heat transfer effectiveness curve as a function of the primary air flow rate.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#1073=IFCSIMPLEPROPERTYTEMPLATE('0dzCT1rnn7Bw69Xs6C7OPu',$,'AirPressureDropCurve','Air pressure drop as function of air flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
-#1074=IFCSIMPLEPROPERTYTEMPLATE('25zHZaWOrAYQb5rnHxdHQc',$,'WaterPressDropCurve','Water pressure drop as function of water flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
-#1075=IFCPROPERTYSETTEMPLATE('2YfgdX9Hj59RdK_COyjmMf',$,'Pset_EvaporativeCoolerTypeCommon','Definition from IAI: Evaporative cooler type common attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead. WaterRequirement attribute unit type modified in IFC2x2 Pset Addendum.',$,'IfcEvaporativeCoolerType',(#1076,#1078,#1080,#1081,#1083,#1085));
-#1076=IFCSIMPLEPROPERTYTEMPLATE('0B$hO6dHb8dhSB_y3yaopG',$,'FlowArrangement','CounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\ParallelFlow: Air and water flow enter in same directions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1077,$,$,$,.READWRITE.);
-#1077=IFCPROPERTYENUMERATION('PEnum_EvaporativeCoolerFlowArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1078=IFCSIMPLEPROPERTYTEMPLATE('3u9d3eO61Ddh0tdrrXxWHF',$,'HeatExchangeArea','Heat exchange area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1079,$,$,.READWRITE.);
-#1079=IFCNAMEDUNIT($,.AREAUNIT.);
-#1080=IFCSIMPLEPROPERTYTEMPLATE('1N_YOCW1rA091_gkQUb932',$,'HeatExchangerMediaMaterials','Heat exchanger media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1081=IFCSIMPLEPROPERTYTEMPLATE('0Y0VLvG9j7JhfiRs35HzuZ',$,'OperationTemperatureRange','Allowable operation ambient air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1082,$,$,.READWRITE.);
-#1082=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1083=IFCSIMPLEPROPERTYTEMPLATE('2aaHo46Pr1UOc6PPLaANpq',$,'Weight','Weight of the evaporative cooler.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1084,$,$,.READWRITE.);
-#1084=IFCNAMEDUNIT($,.MASSUNIT.);
-#1085=IFCSIMPLEPROPERTYTEMPLATE('19ATvaHBD6_AQyEmchkXAd',$,'WaterRequirement','Make-up water requirement.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1086,$,$,.READWRITE.);
-#1086=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1087=IFCPROPERTYSETTEMPLATE('3gAFU3rK10TfBIK40J4Vcs',$,'Pset_EvaporatorPHistory','Definition from IAI: Evaporator performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1088,#1089,#1090,#1091,#1092,#1093,#1094,#1095,#1096,#1097,#1098));
-#1088=IFCSIMPLEPROPERTYTEMPLATE('3Czqn5owvA8QUMXmWrkEWS',$,'HeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1089=IFCSIMPLEPROPERTYTEMPLATE('2eI$cOQYT3FxnGXmX9ivC$',$,'ExteriorHeatTransferCoefficient','Exterior heat transfer coefficient associated with exterior surface area.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMALTRANSMITTANCEMEASURE($),$,$,.READWRITE.);
-#1090=IFCSIMPLEPROPERTYTEMPLATE('2wMBh$v6r6qRXNZr3ZaeVu',$,'InteriorHeatTransferCoefficient','Interior heat transfer coefficient associated with interior surface area.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMALTRANSMITTANCEMEASURE($),$,$,.READWRITE.);
-#1091=IFCSIMPLEPROPERTYTEMPLATE('3Iu6RRJ$b3QeNaaW4S8kKt',$,'RefrigrerantFoulingResistance','Fouling resistance on the refrigerant side.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1092=IFCSIMPLEPROPERTYTEMPLATE('2ug3kaRfn3K9kA1q2Jn_jz',$,'EvaporatingTemperature','Refrigerant evaporating temperature.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1093=IFCSIMPLEPROPERTYTEMPLATE('3Mx4b1_uv3kv1a2otu28P_',$,'LogarithmicMeanTemperatureDifference','Logarithmic mean temperature difference between refrigerant and water or air.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1094=IFCSIMPLEPROPERTYTEMPLATE('1_MYEsXl16Y8bBqrrXOcFi',$,'UAcurves','UV = f (VExterior, VInterior), UV as a function of interior and exterior fluid flow velocity at the entrance.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1095=IFCSIMPLEPROPERTYTEMPLATE('32Xo2Z61zE1xrsxDETINLK',$,'CompressorEvaporatorHeatGain','Heat gain between the evaporator outlet and the compressor inlet.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1096=IFCSIMPLEPROPERTYTEMPLATE('1xfV$tYenCRO0YX3nIXofJ',$,'CompressorEvaporatorPressureDrop','Pressure drop between the evaporator outlet and the compressor inlet.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1097=IFCSIMPLEPROPERTYTEMPLATE('2$4WbRqLj6_9z$UO9EVMuw',$,'EvaporatorMeanVoidFraction','Mean void fraction in evaporator.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1098=IFCSIMPLEPROPERTYTEMPLATE('07q9ufNo12$uNiaPm67T0$',$,'WaterFoulingResistance','Fouling resistance on water/air side.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1099=IFCPROPERTYSETTEMPLATE('2JqOsYhnvEdwZWcqlibDWb',$,'Pset_EvaporatorTypeCommon','Definition from IAI: Evaporator type common attributes.\X2\000A\X0\',$,'IfcEvaporatorType',(#1100,#1102,#1104,#1106,#1107,#1109,#1111,#1113,#1115,#1117));
-#1100=IFCSIMPLEPROPERTYTEMPLATE('3FNVm6DJD378xSuIIFhDTe',$,'EvaporatorMediumType','ColdLiquid: Evaporator is using liquid type of fluid to exchange heat with refrigerant.\X2\000A\X0\ColdAir: Evaporator is using air to exchange heat with refrigerant.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1101,$,$,$,.READWRITE.);
-#1101=IFCPROPERTYENUMERATION('PEnum_EvaporatorMediumType',(IFCLABEL('COLDLIQUID'),IFCLABEL('COLDAIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1102=IFCSIMPLEPROPERTYTEMPLATE('0tMEa9WnD9dPV3BIA3yXF$',$,'EvaporatorCoolant','The fluid used for the coolant in the evaporator.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1103,$,$,$,.READWRITE.);
-#1103=IFCPROPERTYENUMERATION('PEnum_EvaporatorCoolant',(IFCLABEL('WATER'),IFCLABEL('BRINE'),IFCLABEL('GLYCOL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1104=IFCSIMPLEPROPERTYTEMPLATE('2w6aoRLhb248pfl6hVcjua',$,'RefrigerantClass','Refrigerant class used by the compressor.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1105,$,$,$,.READWRITE.);
-#1105=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1106=IFCSIMPLEPROPERTYTEMPLATE('1wG7lc9kH9h8wc4CSQt0oj',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1107=IFCSIMPLEPROPERTYTEMPLATE('0_AL9YDX1CigCeVTSU6khp',$,'ExternalSurfaceArea','External surface area (both primary and secondary area).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1108,$,$,.READWRITE.);
-#1108=IFCNAMEDUNIT($,.AREAUNIT.);
-#1109=IFCSIMPLEPROPERTYTEMPLATE('1o1YZLS0z7PhkoTjWJtOpd',$,'InternalSurfaceArea','Internal surface area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1110,$,$,.READWRITE.);
-#1110=IFCNAMEDUNIT($,.AREAUNIT.);
-#1111=IFCSIMPLEPROPERTYTEMPLATE('0W0O4veaP3aQJl4rKJIH4w',$,'InternalRefrigerantVolume','Internal volume of evaporator (refrigerant side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1112,$,$,.READWRITE.);
-#1112=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1113=IFCSIMPLEPROPERTYTEMPLATE('3db2Odke13kBr7GM3smyir',$,'InternalWaterVolume','Internal volume of evaporator (water side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1114,$,$,.READWRITE.);
-#1114=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1115=IFCSIMPLEPROPERTYTEMPLATE('0mdeR2CKLALeYwHxHmVgsU',$,'NominalHeatTransferArea','Nominal heat transfer surface area associated with nominal overall heat transfer coefficient.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1116,$,$,.READWRITE.);
-#1116=IFCNAMEDUNIT($,.AREAUNIT.);
-#1117=IFCSIMPLEPROPERTYTEMPLATE('2Wzo84yo54bBgjW_lY5NDv',$,'NominalHeatTransferCoefficient','Nominal overall heat transfer coefficient associated with nominal heat transfer area.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#1118,$,$,.READWRITE.);
-#1118=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#1119=IFCPROPERTYSETTEMPLATE('3mdCG_OcvDyfkfcTtQ$LO_',$,'Pset_FanPHistory','Definition from IAI: Fan performance history attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#1120,#1121,#1122,#1123,#1124,#1125,#1126,#1127,#1128,#1129,#1130));
-#1120=IFCSIMPLEPROPERTYTEMPLATE('3qF1S3RVj5vvTAdXn3TzJo',$,'FanRotationSpeed','Fan rotation speed.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCROTATIONALFREQUENCYMEASURE($),$,$,.READWRITE.);
-#1121=IFCSIMPLEPROPERTYTEMPLATE('2_DSm8K8r9khfUUy_$dByS',$,'WheelTipSpeed','Fan blade tip speed, typically defined as the linear speed of the tip of the fan blade furthest from the shaft. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCLINEARVELOCITYMEASURE($),$,$,.READWRITE.);
-#1122=IFCSIMPLEPROPERTYTEMPLATE('05O4NrRfj0aORNy6ANAHfI',$,'FanEfficiency','Fan mechanical efficiency.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1123=IFCSIMPLEPROPERTYTEMPLATE('2wKo7a3Z1A1vrmgDxdZ5g0',$,'OverallEfficiency','Total efficiency of motor and fan.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1124=IFCSIMPLEPROPERTYTEMPLATE('14cqDTdEzBOPvCB2UyAQPq',$,'FanPowerRate','Fan power consumption.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1125=IFCSIMPLEPROPERTYTEMPLATE('0f5JR7QBX1QfCO4Xz5gC20',$,'ShaftPowerRate','Fan shaft power.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1126=IFCSIMPLEPROPERTYTEMPLATE('0o8jUXEE918fWGLzyZuar0',$,'PressureCurve','Pressure rise = f (flow rate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'Pressure rise = f (flow rate)',.READWRITE.);
-#1127=IFCSIMPLEPROPERTYTEMPLATE('0Vkx02DFX7HhHFRIO8XbwX',$,'EfficiencyCurve','Fan efficiency =f (flow rate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'Fan efficiency =f (flow rate)',.READWRITE.);
-#1128=IFCSIMPLEPROPERTYTEMPLATE('3x9yeYuSjAz9M0IGfclA0_',$,'DischargeVelocity','The speed at which air discharges from the fan through the fan housing discharge opening. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCLINEARVELOCITYMEASURE($),$,$,.READWRITE.);
-#1129=IFCSIMPLEPROPERTYTEMPLATE('3NvQ$XecD5ORUdxFiJkLd$',$,'DischargePressureLoss','Fan discharge pressure loss associated with the discharge arrangement.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1130=IFCSIMPLEPROPERTYTEMPLATE('1L1gKqFxf1GueRZBTh82YU',$,'DrivePowerLoss','Fan drive power losses associated with the type of connection between the motor and the fan wheel.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1131=IFCPROPERTYSETTEMPLATE('1Ux0SZ2dHBvPkZdxK87Dcu',$,'Pset_FanTypeCommon','Definition from IAI: Fan type common attributes.\X2\000A\X0\',$,'IfcFanType',(#1132,#1134,#1136,#1138,#1139,#1140,#1142,#1144,#1146,#1148,#1150,#1152));
-#1132=IFCSIMPLEPROPERTYTEMPLATE('2tg3kC1IfBZRJdmBFk4h1U',$,'MotorDriveType','Motor drive type:\X2\000A\X0\DIRECTDRIVE: Direct drive. \X2\000A\X0\BELTDRIVE: Belt drive. \X2\000A\X0\COUPLING: Coupling. \X2\000A\X0\OTHER: Other type of motor drive. \X2\000A\X0\NOTKNOWN: Unknown motor drive type.\X2\000A\X0\UNSET: Unspecified motor drive type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1133,$,$,$,.READWRITE.);
-#1133=IFCPROPERTYENUMERATION('PEnum_FanMotorConnectionType',(IFCLABEL('DIRECTDRIVE'),IFCLABEL('BELTDRIVE'),IFCLABEL('COUPLING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1134=IFCSIMPLEPROPERTYTEMPLATE('3aCYRGlNnAVArO23msvrBf',$,'CapacityControlType','\X2\000A\X0\InletVane: Control by adjusting inlet vane\X2\000A\X0\VariableSpeedDrive: Control by variable speed drive \X2\000A\X0\BladePitchAngle: Control by adjusting blade pitch angle\X2\000A\X0\TwoSpeed: Control by switch between high and low speed\X2\000A\X0\DischargeDamper: Control by modulating discharge damper',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1135,$,$,$,.READWRITE.);
-#1135=IFCPROPERTYENUMERATION('PEnum_FanCapacityControlType',(IFCLABEL('INLETVANE'),IFCLABEL('VARIABLESPEEDDRIVE'),IFCLABEL('BLADEPITCHANGLE'),IFCLABEL('TWOSPEED'),IFCLABEL('DISCHARGEDAMPER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1136=IFCSIMPLEPROPERTYTEMPLATE('3EeQEKL9v8W8HC$IQdh2AX',$,'OperationTemperatureRange','Allowable operation ambient air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1137,$,$,.READWRITE.);
-#1137=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1138=IFCSIMPLEPROPERTYTEMPLATE('3gPL0tq8n9wxkpCwKnNTVe',$,'WheelMaterial','The material used to construct the fan wheel.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1139=IFCSIMPLEPROPERTYTEMPLATE('2P8r_MXAX0iwBpjHw9tV8J',$,'HousingMaterial','The material used to construct the fan housing.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1140=IFCSIMPLEPROPERTYTEMPLATE('1ID_WdCN18QxJKQVn7jpO5',$,'Weight','Weight of the fan.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1141,$,$,.READWRITE.);
-#1141=IFCNAMEDUNIT($,.MASSUNIT.);
-#1142=IFCSIMPLEPROPERTYTEMPLATE('2Nx41W_OPDUOS78y2G4P6n',$,'NominalAirFlowRate','Nominal air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1143,$,$,.READWRITE.);
-#1143=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1144=IFCSIMPLEPROPERTYTEMPLATE('0_6TpNuczBBP6AAfcIU5kj',$,'NominalTotalPressure','Nominal total pressure rise across the fan.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1145,$,$,.READWRITE.);
-#1145=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1146=IFCSIMPLEPROPERTYTEMPLATE('2_5a56_Dn7pReNXEvN7qlp',$,'NominalStaticPressure','The static pressure within the air stream that the fan must overcome to insure designed circulation of air',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1147,$,$,.READWRITE.);
-#1147=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1148=IFCSIMPLEPROPERTYTEMPLATE('1e2r0s4aTA3fiWIJHGn7ag',$,'NominalRotationSpeed','Nominal fan wheel speed.',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,#1149,$,$,.READWRITE.);
-#1149=IFCDERIVEDUNIT($,.ROTATIONALFREQUENCYUNIT.,$,$);
-#1150=IFCSIMPLEPROPERTYTEMPLATE('1k5IbOwS93pgdK8zfvnRTR',$,'NominalPowerRate','Nominal fan power rate.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1151,$,$,.READWRITE.);
-#1151=IFCNAMEDUNIT($,.POWERUNIT.);
-#1152=IFCSIMPLEPROPERTYTEMPLATE('3pw0Y12qv0q82rPpFzCgew',$,'OperationalCriteria','Time of operation at maximum operational ambient air temperature.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#1153,$,$,.READWRITE.);
-#1153=IFCNAMEDUNIT($,.TIMEUNIT.);
-#1154=IFCPROPERTYSETTEMPLATE('0eMSA6RGXBFe7_b4cqEz0a',$,'Pset_FanTypeSmokeControl','Definition from IAI: Smoke control attributes of a fan participating as part of a smoke control system.\X2\000A\X0\',$,'IfcFanType',(#1155,#1157,#1159));
-#1155=IFCSIMPLEPROPERTYTEMPLATE('2mPfKOmQv7sgpjR6cOmWAB',$,'OperationalCriteria','Time of operation at maximum operational ambient air temperature.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#1156,$,$,.READWRITE.);
-#1156=IFCNAMEDUNIT($,.TIMEUNIT.);
-#1157=IFCSIMPLEPROPERTYTEMPLATE('2rqf8BwYH95hOlybmNn6DJ',$,'MaximumDesignTemperature','Maximum design operational temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1158,$,$,.READWRITE.);
-#1158=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1159=IFCSIMPLEPROPERTYTEMPLATE('2aA$cUVoj0xAobg31hzGm9',$,'SmokeControlFlowrate','Flowrate of fan while operating as a part of the smoke control system.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1160,$,$,.READWRITE.);
-#1160=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1161=IFCPROPERTYSETTEMPLATE('0hCwfRH3P4KgI$LEHHs1Tt',$,'Pset_FilterPHistory','Definition from IAI: Filter performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1162,#1163,#1164));
-#1162=IFCSIMPLEPROPERTYTEMPLATE('38q6NsoO95JPmud61ATRMa',$,'CountedEfficiency','Filter efficiency based the particle counts concentration before and after filter against particles with certain size distribution.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1163=IFCSIMPLEPROPERTYTEMPLATE('1BlL5yk8zAoB2fuRGuOvKu',$,'WeightedEfficiency','Filter efficiency based the particle weight concentration before and after filter against particles with certain size distribution.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1164=IFCSIMPLEPROPERTYTEMPLATE('3UvvH0D3XFOx$1RJT6_gA3',$,'ParticleMassHolding','Mass of particle holding in the filter.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCMASSMEASURE($),$,$,.READWRITE.);
-#1165=IFCPROPERTYSETTEMPLATE('0nt34q1KTEuAtO20jvnASE',$,'Pset_FilterTypeAirParticleFilter','Definition from IAI: Air particle filter type attributes.\X2\000A\X0\',$,'IfcFilterType',(#1166,#1168,#1169,#1170,#1172,#1174,#1176,#1178,#1180,#1181,#1182,#1183));
-#1166=IFCSIMPLEPROPERTYTEMPLATE('3yXYGq9gz0qvJy7iReGD3n',$,'AirParticleFilterType','A panel dry type extended surface filter is a dry-type air filter with random fiber mats or blankets in the forms of pockets, V-shaped or radial pleats, and include the following:\X2\000A\X0\CoarseFilter: Filter with a efficiency lower than 30% for atmosphere dust-spot.\X2\000A\X0\CoarseMetalScreen: Filter made of metal screen.\X2\000A\X0\CoarseCellFoams: Filter made of cell foams.\X2\000A\X0\CoarseSpunGlass: Filter made of spun glass.\X2\000A\X0\MediumFilter: Filter with an efficiency between 30-98% for atmosphere dust-spot.\X2\000A\X0\MediumElectretFilter: Filter with fine electret synthetic fibers.\X2\000A\X0\MediumNaturalFiberFilter: Filter with natural fibers.\X2\000A\X0\HEPAFilter: High efficiency particulate air filter.\X2\000A\X0\ULPAFilter: Ultra low penetration air filter.\X2\000A\X0\MembraneFilters: Filter made of membrane for certain pore diameters in flat sheet and pleated form.\X2\000A\X0\A renewable media with a moving curtain viscous filter are random-fiber media coated with viscous substance in roll form or curtain where fresh media is fed across the face of the filter and the dirty media is rewound onto a roll at the bottom or to into a reservoir:\X2\000A\X0\RollForm: Viscous filter used in roll form.\X2\000A\X0\AdhesiveReservoir: Viscous filter used in moving curtain form.\X2\000A\X0\A renewable moving curtain dry media filter is a random-fiber dry media of relatively high porosity used in moving-curtain(roll) filters.\X2\000A\X0\An electrical filter uses electrostatic precipitation to remove and collect particulate contaminants.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1167,$,$,$,.READWRITE.);
-#1167=IFCPROPERTYENUMERATION('PEnum_FilterAirParticleFilterType',(IFCLABEL('COARSEMETALSCREEN'),IFCLABEL('COARSECELLFOAMS'),IFCLABEL('COARSESPUNGLASS'),IFCLABEL('MEDIUMELECTRETFILTER'),IFCLABEL('MEDIUMNATURALFIBERFILTER'),IFCLABEL('HEPAFILTER'),IFCLABEL('ULPAFILTER'),IFCLABEL('MEMBRANEFILTERS'),IFCLABEL('RENEWABLEMOVINGCURTIANDRYMEDIAFILTER'),IFCLABEL('ELECTRICALFILTER'),IFCLABEL('ROLLFORM'),IFCLABEL('ADHESIVERESERVOIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1168=IFCSIMPLEPROPERTYTEMPLATE('34lLzXLLX8dQJyNB9GZ9Zl',$,'FrameMaterial','Filter frame material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1169=IFCSIMPLEPROPERTYTEMPLATE('1q9DTYY4v4efypYrokoCbV',$,'MediaMaterial','Filter media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1170=IFCSIMPLEPROPERTYTEMPLATE('1NYaeM8L53Ge5rjySKwkq$',$,'SeparationType','Air particulate filter media separation type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1171,$,$,$,.READWRITE.);
-#1171=IFCPROPERTYENUMERATION('PEnum_FilterAirParticleFilterSeparationType',(IFCLABEL('BAG'),IFCLABEL('PLEAT'),IFCLABEL('TREADSEPARATION'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1172=IFCSIMPLEPROPERTYTEMPLATE('0zoYrNkPH9jBcjw8wiQmZf',$,'DustHoldingCapacity','Maximum filter dust holding capacity.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1173,$,$,.READWRITE.);
-#1173=IFCNAMEDUNIT($,.MASSUNIT.);
-#1174=IFCSIMPLEPROPERTYTEMPLATE('0ohZtXjtPEzgIiry0IClE0',$,'FaceSurfaceArea','Face area of filter frame.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1175,$,$,.READWRITE.);
-#1175=IFCNAMEDUNIT($,.AREAUNIT.);
-#1176=IFCSIMPLEPROPERTYTEMPLATE('3AwOd3UPr2CeGYdkolnaXE',$,'MediaExtendedArea','Total extended media area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1177,$,$,.READWRITE.);
-#1177=IFCNAMEDUNIT($,.AREAUNIT.);
-#1178=IFCSIMPLEPROPERTYTEMPLATE('0_nf5ogp5E9hlsul7DmCO5',$,'NominalCountedEfficiency','Nominal filter efficiency based the particle count concentration before and after the filter against particles with a certain size distribution.',.P_SINGLEVALUE.,'IfcReal',$,$,#1179,$,$,.READWRITE.);
-#1179=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1180=IFCSIMPLEPROPERTYTEMPLATE('3rKbqO9Db2axZ6EaZrguhF',$,'NominalWeightedEfficiency','Nominal filter efficiency based the particle weight concentration before and after the filter against particles with a certain size distribution.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#1181=IFCSIMPLEPROPERTYTEMPLATE('3nqImUT_XFBus4Tvp3cxC4',$,'PressureDropCurve','Under certain dust holding weight, DelPressure = f (fluidflowRate)',.P_TABLEVALUE.,'IfcPressureMeasure','IfcReal',$,$,$,'DelPressure = f (fluidflowRate)',.READWRITE.);
-#1182=IFCSIMPLEPROPERTYTEMPLATE('1fs084V3n0Af3p2irf2BCF',$,'CountedEfficiencyCurve','Counted efficiency curve as a function of dust holding weight, efficiency = f (dust holding weight).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'efficiency = f (dust holding weight)',.READWRITE.);
-#1183=IFCSIMPLEPROPERTYTEMPLATE('0F9jlJJe17W8ZTlD916whW',$,'WeightedEfficiencyCurve','Weighted efficiency curve as a function of dust holding weight, efficiency = f (dust holding weight).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'efficiency = f (dust holding weight)',.READWRITE.);
-#1184=IFCPROPERTYSETTEMPLATE('0u7DCqzRv4yhmQSKgZlEry',$,'Pset_FilterTypeCommon','Definition from IAI: Filter type common attributes.\X2\000A\X0\',$,'IfcFilterType',(#1185,#1186,#1188,#1190,#1192,#1194,#1196,#1198,#1200,#1202,#1204,#1206));
-#1185=IFCSIMPLEPROPERTYTEMPLATE('1D50JP8Qb1sgR9iJAc7ZJ4',$,'MediaMaterial','Filter media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1186=IFCSIMPLEPROPERTYTEMPLATE('1VjSo22JjCXQ_SQQvY3q7T',$,'Weight','Weight of filter.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1187,$,$,.READWRITE.);
-#1187=IFCNAMEDUNIT($,.MASSUNIT.);
-#1188=IFCSIMPLEPROPERTYTEMPLATE('1_nnY4RDfFAO5VYt_Do4B0',$,'InitialResistance','Initial new filter fluid resistance (i.e., pressure drop at the maximum air flowrate across the filter when the filter is new per ASHRAE Standard 52.1).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1189,$,$,.READWRITE.);
-#1189=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1190=IFCSIMPLEPROPERTYTEMPLATE('3MsHh1Va10T8bVgvbvMa_F',$,'FinalResistance','Filter fluid resistance when replacement is required (i.e., Pressure drop at the maximum air flowrate across the filter when the filter needs replacement per ASHRAE Standard 52.1).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1191,$,$,.READWRITE.);
-#1191=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1192=IFCSIMPLEPROPERTYTEMPLATE('0L9bwQtMr6tPK3Pa9F7Yho',$,'OperationTemperatureRange','Allowable operation ambient fluid temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1193,$,$,.READWRITE.);
-#1193=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1194=IFCSIMPLEPROPERTYTEMPLATE('1FU8$7umH8KRXa7q4GJnhg',$,'FlowRateRange','Possible range of fluid flowrate that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1195,$,$,.READWRITE.);
-#1195=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1196=IFCSIMPLEPROPERTYTEMPLATE('2Fss$VgU9968Bs3WQEQPaL',$,'NominalFilterFaceVelocity','Filter face velocity.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,#1197,$,$,.READWRITE.);
-#1197=IFCDERIVEDUNIT($,.LINEARVELOCITYUNIT.,$,$);
-#1198=IFCSIMPLEPROPERTYTEMPLATE('3MNJJxkFf3kQAS23YL1BQs',$,'NominalMediaSurfaceVelocity','Average fluid velocity at the media surface.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,#1199,$,$,.READWRITE.);
-#1199=IFCDERIVEDUNIT($,.LINEARVELOCITYUNIT.,$,$);
-#1200=IFCSIMPLEPROPERTYTEMPLATE('3NFbJYJbj1khpJv$bFidM2',$,'NominalPressureDrop','Total pressure drop across the filter.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1201,$,$,.READWRITE.);
-#1201=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1202=IFCSIMPLEPROPERTYTEMPLATE('1ljRZtx6XEfe0yDMqEmDbO',$,'NominalFlowrate','Nominal fluid flow rate through the filter.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1203,$,$,.READWRITE.);
-#1203=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1204=IFCSIMPLEPROPERTYTEMPLATE('008JDq0Rj5uARzNZKymt87',$,'NominalParticleGeometricMeanDiameter','Particle geometric mean diameter associated with nominal efficiency.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1205,$,$,.READWRITE.);
-#1205=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1206=IFCSIMPLEPROPERTYTEMPLATE('3LoOzk2s90wvVJ3Io8dYAx',$,'NominalParticleGeometricStandardDeviation','Particle geometric standard deviation associated with nominal efficiency.',.P_SINGLEVALUE.,'IfcReal',$,$,#1207,$,$,.READWRITE.);
-#1207=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1208=IFCPROPERTYSETTEMPLATE('0aIps9UEH6huKhoQr2Qcm7',$,'Pset_FlowMeterTypeCommon','Definition from IAI: Common attributes of a flow meter type',$,'IfcFlowMeterType',(#1209,#1211,#1212));
-#1209=IFCSIMPLEPROPERTYTEMPLATE('3RPKuJB153YeTQZYc_LUwM',$,'ReadOutType','Indication of the form that readout from the meter takes. In the case of a dial read out, this may comprise multiple dials that give a cumulative reading and/or a mechanical odometer.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1210,$,$,$,.READWRITE.);
-#1210=IFCPROPERTYENUMERATION('PEnum_MeterReadOutType',(IFCLABEL('DIAL'),IFCLABEL('DIGITAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1211=IFCSIMPLEPROPERTYTEMPLATE('1IeqvbDxn85hLvCUBa9B$6',$,'RemoteReading','Indicates whether the meter has a connection for remote reading through connection of a communication device (set TRUE) or not (set FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1212=IFCSIMPLEPROPERTYTEMPLATE('14xGOkVBP7SOpVMvLW5cqO',$,'IsMain','Indicates whether the meter is the main meter on the system. If FALSE, it is a submeter. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1213=IFCPROPERTYSETTEMPLATE('2$A9mh7uj7QOpGbEKXmztD',$,'Pset_FlowMeterTypeEnergyMeter','Definition from IAI: Device that measures, indicates and sometimes records, the energy usage in a system.',$,'IfcFlowMeterType',(#1214));
-#1214=IFCSIMPLEPROPERTYTEMPLATE('2Lb3_lqjLCYwCGsMb5gMP4',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1215,$,$,.READWRITE.);
-#1215=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1216=IFCPROPERTYSETTEMPLATE('24YMZhqxL7WQ5Oc$rsg5XN',$,'Pset_FlowMeterTypeGasMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of gas that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#1217,#1219,#1221,#1223));
-#1217=IFCSIMPLEPROPERTYTEMPLATE('12VOp6HE57cuRd3nyE16Cn',$,'GasType','Defines the types of gas that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1218,$,$,$,.READWRITE.);
-#1218=IFCPROPERTYENUMERATION('PEnum_GasType',(IFCLABEL('COMMERCIALBUTANE'),IFCLABEL('COMMERCIALPROPANE'),IFCLABEL('LIQUEFIEDPETROLEUMGAS'),IFCLABEL('NATURALGAS'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1219=IFCSIMPLEPROPERTYTEMPLATE('20XRBiekv4UO1bFLFY6X5e',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1220,$,$,.READWRITE.);
-#1220=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1221=IFCSIMPLEPROPERTYTEMPLATE('18PA08_arA1B4eVCt52RGG',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure ',$,$,#1222,$,$,.READWRITE.);
-#1222=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1223=IFCSIMPLEPROPERTYTEMPLATE('3wS7hLwWb1kAXWU0cYVbnF',$,'MaximumPressureLoss','Pressure loss expected across the meter under conditions of maximum flow.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1224,$,$,.READWRITE.);
-#1224=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1225=IFCPROPERTYSETTEMPLATE('14jJ46CzL7PwvNJq7gtPNP',$,'Pset_FlowMeterTypeOilMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of oil that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#1226,#1228));
-#1226=IFCSIMPLEPROPERTYTEMPLATE('08aCU7zk11MA7a3pvizJ7j',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1227,$,$,.READWRITE.);
-#1227=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1228=IFCSIMPLEPROPERTYTEMPLATE('24SP8RZarEJxNsdz0ifUaT',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure ',$,$,#1229,$,$,.READWRITE.);
-#1229=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1230=IFCPROPERTYSETTEMPLATE('2vdKjBtFD7NOTyA49IAAAz',$,'Pset_FlowMeterTypeWaterMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of water that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#1231,#1233,#1235,#1237,#1239));
-#1231=IFCSIMPLEPROPERTYTEMPLATE('2gIIYIw5LDDxUkktnlPnGQ',$,'Type','Defines the allowed values for selection of the flow meter operation type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1232,$,$,$,.READWRITE.);
-#1232=IFCPROPERTYENUMERATION('PEnum_WaterMeterType',(IFCLABEL('COMPOUND'),IFCLABEL('INFERENTIAL'),IFCLABEL('PISTON'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1233=IFCSIMPLEPROPERTYTEMPLATE('3PnXl3SEDAbgAX2caKjlrM',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1234,$,$,.READWRITE.);
-#1234=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1235=IFCSIMPLEPROPERTYTEMPLATE('1m4sQFkDb9NejXSS2tyo9b',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure ',$,$,#1236,$,$,.READWRITE.);
-#1236=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1237=IFCSIMPLEPROPERTYTEMPLATE('29lik4TGH1WeyAIEa$S0Qf',$,'MaximumPressureLoss','Pressure loss expected across the meter under conditions of maximum flow.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1238,$,$,.READWRITE.);
-#1238=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1239=IFCSIMPLEPROPERTYTEMPLATE('0xAJYrucHAPQw1aVaUKw54',$,'BackflowPreventerType','Identifies the type of backflow preventer installed to prevent the backflow of contaminated or polluted water from an irrigation/reticulation system to a potable water supply.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1240,$,$,$,.READWRITE.);
-#1240=IFCPROPERTYENUMERATION('PEnum_BackflowPreventerType',(IFCLABEL('NONE'),IFCLABEL('ATMOSPHERICVACUUMBREAKER'),IFCLABEL('ANTISIPHONVALVE'),IFCLABEL('DOUBLECHECKBACKFLOWPREVENTER'),IFCLABEL('PRESSUREVACUUMBREAKER'),IFCLABEL('REDUCEDPRESSUREBACKFLOWPREVENTER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1241=IFCPROPERTYSETTEMPLATE('2fHstiwOj1SgKxqiK5V9HZ',$,'Pset_GasTerminalPHistory','Definition from IAI: Gas terminal performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1242));
-#1242=IFCSIMPLEPROPERTYTEMPLATE('3IksAORy54afMNgtSaL$fK',$,'GasFlowRate','The volumetric flowrate of gas to the gas terminal.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1243=IFCPROPERTYSETTEMPLATE('1Es_PA4dbAKfJgOVZ14Ynp',$,'Pset_GasTerminalTypeCommon','Definition from IAI: Common attributes of gas terminal types. \X2\000A\X0\GasProperties attribute deleted in IFC2x2 Pset Addendum: Use IfcFuelProperties instead.',$,'IfcGasTerminalType',(#1244));
-#1244=IFCSIMPLEPROPERTYTEMPLATE('0SveZIn6L4$8n8kWYx_CBA',$,'GasFlowRateRange','Gas volumetric flowrate within which the gas terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1245,$,$,.READWRITE.);
-#1245=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1246=IFCPROPERTYSETTEMPLATE('3$zO8zWOr0WvVRM7DP1gCc',$,'Pset_GasTerminalTypeGasAppliance','Definition from IAI: Piece of equipment for occupants use that is connected to a gas installation (definition is a modification from that found in BS6100).',$,'IfcGasTerminalType',(#1247,#1249));
-#1247=IFCSIMPLEPROPERTYTEMPLATE('1VeDpO$xD1ffJTBFxtRJNY',$,'GasApplianceType','Selection of the type of gas appliance from the enumerated list of types.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1248,$,$,$,.READWRITE.);
-#1248=IFCPROPERTYENUMERATION('PEnum_GasApplianceType',(IFCLABEL('GASFIRE'),IFCLABEL('GASCOOKER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1249=IFCSIMPLEPROPERTYTEMPLATE('09Dx$s0tLAfuxyO4a3gJAn',$,'FlueType','Defines the types of flue that may be specified for connection to gas appliances where:\X2\000A000A\X0\BalancedFlue =\X2\0009\X0\Room sealed appliance that has its inlet for combustion air and its outlet for products of combustion in adjacent external positions, disposed so that wind effects are substantially balanced between them.\X2\000A\X0\Flued =\X2\0009\X0\Gas burning appliance designed for connection to a flue system\X2\000A\X0\Flueless =\X2\0009\X0\Gas burning appliance designed for use without connection to a flue system\X2\000A\X0\OpenFlued =\X2\0009\X0\Gas burning appliance designed to be connected to an open flue system, combustion air being drawn from a room or internal space in which the gas burning appliance is installed\X2\000A\X0\RoomSealed =\X2\0009\X0\Gas burning appliance that has its combustion system, including air inlet and products outlet, isolated from a room or internal space in which the gas burning appliance is installed\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1250,$,$,$,.READWRITE.);
-#1250=IFCPROPERTYENUMERATION('PEnum_FlueType',(IFCLABEL('BALANCEDFLUE'),IFCLABEL('FLUED'),IFCLABEL('FLUELESS'),IFCLABEL('OPENFLUED'),IFCLABEL('ROOMSEALED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1251=IFCPROPERTYSETTEMPLATE('2dEiJctgL18f7diIzBy4Ji',$,'Pset_GasTerminalTypeGasBurner','Definition from IAI: A complete unit on which or in which a flame is maintained through the provision of a gas supply.',$,'IfcGasTerminalType',(#1252));
-#1252=IFCSIMPLEPROPERTYTEMPLATE('3gQ3RgqGP7pQx1CvA8hL_5',$,'GasBurnerType','Selection of the type of gas burner from the enumerated list of types',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1253,$,$,$,.READWRITE.);
-#1253=IFCPROPERTYENUMERATION('PEnum_GasBurnerType',(IFCLABEL('FORCEDDRAFT'),IFCLABEL('NATURALDRAFT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1254=IFCPROPERTYSETTEMPLATE('24j95sf3XBqvkKfrzkgIGX',$,'Pset_HeatExchangerTypeCommon','Definition from IAI: Heat exchanger type common attributes.\X2\000A\X0\',$,'IfcHeatExchangerType',(#1255,#1257));
-#1255=IFCSIMPLEPROPERTYTEMPLATE('3B9hN0z8j4uBZcmVOWxw6x',$,'Arrangement','Defines the basic flow arrangements for the heat exchanger:\X2\000A\X0\COUNTERFLOW: Counterflow heat exchanger arrangement. \X2\000A\X0\CROSSFLOW: Crossflow heat exchanger arrangement. \X2\000A\X0\PARALLELFLOW: Parallel flow heat exchanger arrangement. \X2\000A\X0\MULTIPASS: Multipass flow heat exchanger arrangement. \X2\000A\X0\OTHER: Other type of heat exchanger flow arrangement not defined above. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1256,$,$,$,.READWRITE.);
-#1256=IFCPROPERTYENUMERATION('PEnum_HeatExchangerArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('MULTIPASS'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1257=IFCSIMPLEPROPERTYTEMPLATE('3v_KSJE2zFnOhlktyomOdR',$,'ShellMaterial','Material used to construct the shell of the heat exchanger.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1258=IFCPROPERTYSETTEMPLATE('02Pg8mDRz4zfh7K4D8qel9',$,'Pset_HeatExchangerTypePlate','Definition from IAI: Plate heat exchanger type common attributes.\X2\000A\X0\',$,'IfcHeatExchangerType',(#1259));
-#1259=IFCSIMPLEPROPERTYTEMPLATE('2e7izk6KXBreWmNjWWqZQo',$,'NumberOfPlates','Number of plates used by the plate heat exchanger.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#1260=IFCPROPERTYSETTEMPLATE('1ibgPgK6j38e8uOrPfSrWS',$,'Pset_HumidifierPHistory','Definition from IAI: Humidifier performance history attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#1261,#1262,#1263,#1264));
-#1261=IFCSIMPLEPROPERTYTEMPLATE('2rk1R9QfHAWRd4cmuaPKSb',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1262=IFCSIMPLEPROPERTYTEMPLATE('3v6eBctTjBNeYMgfjD_Yub',$,'SaturationEfficiency','Saturation efficiency: Ratio of leaving air absolute humidity to the maximum absolute humidity.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1263=IFCSIMPLEPROPERTYTEMPLATE('2uPEkHCKT9he5_o9vo$bEx',$,'SaturationEfficiencyCurve','Saturation efficiency as a function of the air flow rate.',.P_TABLEVALUE.,'IfcReal','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
-#1264=IFCSIMPLEPROPERTYTEMPLATE('0ABiDxibb7mBvDIhTT_PhW',$,'AirPressureDropCurve','Air pressure drop versus air-flow rate.',.P_TABLEVALUE.,'IfcPressureMeasure','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
-#1265=IFCPROPERTYSETTEMPLATE('34XdRh3qHBkwppmAddsYPl',$,'Pset_HumidifierTypeCommon','Definition from IAI: Humidifier type common attributes.\X2\000A\X0\WaterProperties attribute renamed to WaterRequirement and unit type modified in IFC2x2 Pset Addendum.',$,'IfcHumidifierType',(#1266,#1268,#1270,#1272,#1274,#1276));
-#1266=IFCSIMPLEPROPERTYTEMPLATE('343$9tQ5jDafNnZ$JP1QEE',$,'Application','Humidifier application.\X2\000A\X0\Fixed: Humidifier installed in a ducted flow distribution system.\X2\000A\X0\Portable: Humidifier is not installed in a ducted flow distribution system.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1267,$,$,$,.READWRITE.);
-#1267=IFCPROPERTYENUMERATION('PEnum_HumidifierApplication',(IFCLABEL('PORTABLE'),IFCLABEL('FIXED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1268=IFCSIMPLEPROPERTYTEMPLATE('0OpaxdEFfFdfu_eltZAfGB',$,'Weight','The weight of the humidifier.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1269,$,$,.READWRITE.);
-#1269=IFCNAMEDUNIT($,.MASSUNIT.);
-#1270=IFCSIMPLEPROPERTYTEMPLATE('3Hx3sXGNL2VPv11ePqcM1P',$,'NominalMoistureGain','Nominal rate of water vapor added into the airstream.',.P_SINGLEVALUE.,'IfcMassFlowRateMeasure',$,$,#1271,$,$,.READWRITE.);
-#1271=IFCDERIVEDUNIT($,.MASSFLOWRATEUNIT.,$,$);
-#1272=IFCSIMPLEPROPERTYTEMPLATE('1aPAlEMAT8LxWSLEloREjw',$,'NominalAirFlowRate','Nominal rate of air flow into which water vapor is added.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1273,$,$,.READWRITE.);
-#1273=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1274=IFCSIMPLEPROPERTYTEMPLATE('1ZiXgA5Sb0NgMrYMPVSCKd',$,'InternalControl','Internal modulation control.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1275,$,$,$,.READWRITE.);
-#1275=IFCPROPERTYENUMERATION('PEnum_HumidifierInternalControl',(IFCLABEL('ONOFF'),IFCLABEL('STEPPED'),IFCLABEL('MODULATING'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1276=IFCSIMPLEPROPERTYTEMPLATE('3f1zgR_tXCTQH_RViT0S$u',$,'WaterRequirement','Make-up water requirement.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1277,$,$,.READWRITE.);
-#1277=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1278=IFCPROPERTYSETTEMPLATE('1$r$p1t890DQZYhvxiWPzZ',$,'Pset_PipeConnection','Definition from IAI: This property set is used to define the various types of pipe connections. It is applied to occurrences of pipe segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#1279));
-#1279=IFCSIMPLEPROPERTYTEMPLATE('0jFuU5D0PBWwdK0EaeTNHc',$,'ConnectionType','The connection type between pipe segments or fittings and other segments or fittings. If the list contains only one value, then this connection type value applies to all ports. For more than one value in the list, the connection type value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\BRAZED: Brazed connection type. \X2\000A\X0\COMPRESSION: Compression connection type. \X2\000A\X0\FLANGED: Flanged connection type including bolts and gasket. \X2\000A\X0\GLANDJOINT: Gland-joint connection type. \X2\000A\X0\FLEXIBLEBOLTEDGLANDJOINT: Flexible bolted gland-joint connection type. \X2\000A\X0\FLEXIBLEBOLTEDGLANDJOINTWITHANODEENDCAP: Flexible bolted gland-joint with anode end-cap connection type. \X2\000A\X0\GROOVED: Grooved connection type. \X2\000A\X0\SOLDERED: Soldered connection type. \X2\000A\X0\SOLDERED_FEMALE: Female-soldered connection type. \X2\000A\X0\SOLDERED_MALE: Male-soldered connection type. \X2\000A\X0\SWEDGE: Swedge connection type. \X2\000A\X0\THREADED: Threaded connection type. \X2\000A\X0\THREADED_FEMALE: Female-threaded connection type. \X2\000A\X0\THREADED_MALE: Male-threaded connection type. \X2\000A\X0\WELDED: Welded connection type. \X2\000A\X0\WELDED_BUTT: Butt-welded connection type. \X2\000A\X0\WELDED_BRANCH: Branch-welded connection type. \X2\000A\X0\WELDED_FLANGE: Flange-welded connection type. \X2\000A\X0\NONE: There is no connection.\X2\000A\X0\NOTDEFINED: Undefined connection type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1280=IFCPROPERTYSETTEMPLATE('0t3xLAT3f17w4HJxpmZWPv',$,'Pset_PipeConnectionFlanged','Definition from IAI: This property set is used to define the specifics of a flanged pipe connection used between occurrences of pipe segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#1281,#1282,#1283,#1285,#1286,#1288,#1290,#1291,#1293));
-#1281=IFCSIMPLEPROPERTYTEMPLATE('1GaCJgZlL3DvnfpkJf3Mw$',$,'FlangeTable','Designation of the standard table to which the flange conforms',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1282=IFCSIMPLEPROPERTYTEMPLATE('05rvANvarERvnW60CQae4f',$,'FlangeStandard','Designation of the standard describing the flange table',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1283=IFCSIMPLEPROPERTYTEMPLATE('2eYTfiUu5Cnxk8MJKvvQwV',$,'BoreSize','The nominal bore of the pipe flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1284,$,$,.READWRITE.);
-#1284=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1285=IFCSIMPLEPROPERTYTEMPLATE('1_CrxlxaXDHvQ4XFXtftO7',$,'Material','Material from which the pipe flange is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1286=IFCSIMPLEPROPERTYTEMPLATE('0u7$Oh$WTCuAyWyQZ$2f0b',$,'FlangeDiameter','Overall diameter of the flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1287,$,$,.READWRITE.);
-#1287=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1288=IFCSIMPLEPROPERTYTEMPLATE('3YZuYV1hX41ATSlilL7oKj',$,'FlangeThickness','Thickness of the material from which the pipe bend is constructed',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1289,$,$,.READWRITE.);
-#1289=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1290=IFCSIMPLEPROPERTYTEMPLATE('1J4AzCFEb2xxO2V4Mhlwi_',$,'NumberOfBoltholes','Number of boltholes in the flange',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#1291=IFCSIMPLEPROPERTYTEMPLATE('1It2x6uWX44vvaMo9fUow7',$,'BoltSize','Size of the bolts securing the flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1292,$,$,.READWRITE.);
-#1292=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1293=IFCSIMPLEPROPERTYTEMPLATE('2MEN$LWOD0pQ$7pdAxJ1hE',$,'BoltholePitch','Diameter of the circle along which the boltholes are placed',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1294,$,$,.READWRITE.);
-#1294=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1295=IFCPROPERTYSETTEMPLATE('1KOP3NT71CxggBMuvgBFIV',$,'Pset_PipeFittingPHistory','Definition from IAI: Pipe fitting performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1296,#1297));
-#1296=IFCSIMPLEPROPERTYTEMPLATE('0ZcaMm9WLCGwgTu7GntBZd',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCREAL($),$,$,.READWRITE.);
-#1297=IFCSIMPLEPROPERTYTEMPLATE('2Z2zp_GcD6RB8ao1iDYkvR',$,'FlowrateLeakage','Leakage flowrate versus pressure difference.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1298=IFCPROPERTYSETTEMPLATE('17kT1Y7xT7pQ9UVkPUzs8t',$,'Pset_PipeFittingTypeCommon','Definition from IAI: Pipe fitting type common attributes.\X2\000A\X0\',$,'IfcPipeFittingType',(#1299,#1300,#1301,#1303,#1305,#1307,#1309,#1310,#1311,#1312,#1313));
-#1299=IFCSIMPLEPROPERTYTEMPLATE('22bDgnU9X9p99m_6qGojAs',$,'SubType','Subtype of the pipe fitting..The following suggested items should be utilized whenever possible for consistency across applications:\X2\000A\X0\BEND_15DEGREE: Changes the direction of flow through 15 degrees. \X2\000A\X0\BEND_22_5DEGREE: Changes the direction of flow through 22.5 degrees. \X2\000A\X0\BEND_25DEGREE: Changes the direction of flow through 25 degrees. \X2\000A\X0\BEND_30DEGREE: Changes the direction of flow through 30 degrees. \X2\000A\X0\BEND_45DEGREE: Changes the direction of flow through 45 degrees. \X2\000A\X0\BEND_67DEGREE: Changes the direction of flow through 67 degrees. \X2\000A\X0\BEND_76DEGREE: Changes the direction of flow through 76 degrees. \X2\000A\X0\BEND_87_5DEGREE: Changes the direction of flow through 87.5 degrees. \X2\000A\X0\BEND_90DEGREE: Changes the direction of flow through 90 degrees. \X2\000A\X0\BEND_135DEGREE: Changes the direction of flow through 135 degrees. \X2\000A\X0\BEND_180DEGREE: Changes the direction of flow through 180 degrees. \X2\000A\X0\JUNCTION_CROSS_SQUARE: Branch fitting with two opposing branches that are swept in the direction of the main flow. \X2\000A\X0\JUNCTION_CROSS_SWEEP: Branch fitting with two swept opposing branches at right angles to the main flow. \X2\000A\X0\JUNCTION_TEE_SQUARE: Branch fitting in which the branch is at an angle of 90 degrees to the main pipe. \X2\000A\X0\JUNCTION_TEE_SWEEP: Branch fitting in which the branch is curved through 90 degrees to join a main pipe tangentially. \X2\000A\X0\JUNCTION_TEE_TWINBEND: Symmetrical pipe fitting in which two short radius bends curve through 90 degree to form a single pipe. \X2\000A\X0\+I1JUNCTION_TEE_TWINELBOW: Symmetrical pipe fitting in which two elbows curve through 90 degree to form a single pipe. \X2\000A\X0\JUNCTION_TEE_Y: Branch fitting in the shape of a letter Y. \X2\000A\X0\OBSTRUCTION_CAP: Device fixed onto the end of a pipe or pipe fitting to close it. \X2\000A\X0\OBSTRUCTION_PLUG: Device fixed into the end of a pipe or pipe fitting to close it. \X2\000A\X0\OTHER: Other fitting subtype.\X2\000A\X0\NOTDEFINED: The fitting subtype is not defined. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1300=IFCSIMPLEPROPERTYTEMPLATE('0JM580e2rA7R5VGahOrlVp',$,'Material','The pipe fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1301=IFCSIMPLEPROPERTYTEMPLATE('0y3LwdpQT4AfaOHVukcuSx',$,'PressureClass','The test or rated pressure classification of the fitting.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1302,$,$,.READWRITE.);
-#1302=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1303=IFCSIMPLEPROPERTYTEMPLATE('2XaTN3ajL35f$cqcuD_0CW',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1304,$,$,.READWRITE.);
-#1304=IFCNAMEDUNIT($,.MASSUNIT.);
-#1305=IFCSIMPLEPROPERTYTEMPLATE('0gHyHS4UfBivme8mg5RxUn',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#1306,$,$,.READWRITE.);
-#1306=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1307=IFCSIMPLEPROPERTYTEMPLATE('0PSjD4GmL0pe3K8PEN3zcu',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1308,$,$,.READWRITE.);
-#1308=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1309=IFCSIMPLEPROPERTYTEMPLATE('3oh9BnxDn2nPCLn9tWpuDV',$,'NominalDiameter','The nominal diameter of the pipe fitting. If the list contains only one value, then this nominal diameter applies to all ports. For more than value in the list, the nominal diameter value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1310=IFCSIMPLEPROPERTYTEMPLATE('0P39LMrjj0P9MqES3ZZhSU',$,'InnerDiameter','The actual inner diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1311=IFCSIMPLEPROPERTYTEMPLATE('3JXQj2LO97lQJEgeHfoTxe',$,'OuterDiameter','The actual outer diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1312=IFCSIMPLEPROPERTYTEMPLATE('3PknjsISPFFQ65DBxbtu5g',$,'EndStyleTreatment','The end-style treatment of the pipe fitting as made available from the manufacturer. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1313=IFCSIMPLEPROPERTYTEMPLATE('2TqQKvsOb8XQmoyPKX4ztc',$,'FittingLossFactor','A factor that determines the pressure loss due to friction through the fitting.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#1314=IFCPROPERTYSETTEMPLATE('0OtkMwZO14_P3C2DYurxDG',$,'Pset_PipeSegmentPHistory','Definition from IAI: Pipe segment performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1315,#1316));
-#1315=IFCSIMPLEPROPERTYTEMPLATE('0NMHW46qz8evQFgTYplGXN',$,'LeakageCurve','Leakage per unit length curve versus working pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1316=IFCSIMPLEPROPERTYTEMPLATE('2pyldPOa55LAfSBrCIqXYx',$,'FluidFlowLeakage','Volumetric leakage flow rate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1317=IFCPROPERTYSETTEMPLATE('1yB$2A5Yf0K8fTx8JOFVoa',$,'Pset_PipeSegmentTypeCommon','Definition from IAI: Pipe segment type common attributes.\X2\000A\X0\',$,'IfcPipeSegmentType',(#1318,#1319,#1321,#1323,#1325,#1327,#1328,#1329,#1330));
-#1318=IFCSIMPLEPROPERTYTEMPLATE('1tsEOl72v03AnlmG7qK$5_',$,'Material','The pipe fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1319=IFCSIMPLEPROPERTYTEMPLATE('2NBZkEwgz6k9vDaEYVtU4m',$,'WorkingPressure','Working pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1320,$,$,.READWRITE.);
-#1320=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1321=IFCSIMPLEPROPERTYTEMPLATE('3ei0DdtN544uBE0chBZeZA',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1322,$,$,.READWRITE.);
-#1322=IFCNAMEDUNIT($,.MASSUNIT.);
-#1323=IFCSIMPLEPROPERTYTEMPLATE('3HfgMMJ0X4XfRRszuQUTPY',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#1324,$,$,.READWRITE.);
-#1324=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1325=IFCSIMPLEPROPERTYTEMPLATE('3w$zY4jeX26uIPpzOqvIEY',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1326,$,$,.READWRITE.);
-#1326=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1327=IFCSIMPLEPROPERTYTEMPLATE('1bGA0EnoT1aQ8ShYfSpfel',$,'NominalDiameter','The nominal diameter of the pipe segment. If the list contains only one value, then this nominal diameter applies to all ports. For more than value in the list, the nominal diameter value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1328=IFCSIMPLEPROPERTYTEMPLATE('0i9ggNeNr5aQNc72WlyY$8',$,'InnerDiameter','The actual inner diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1329=IFCSIMPLEPROPERTYTEMPLATE('3lmR_8IX16B9N2CzgQdNPR',$,'OuterDiameter','The actual outer diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
-#1330=IFCSIMPLEPROPERTYTEMPLATE('0zv1A$KBf8Ke$z$g9CU1Ql',$,'EndStyleTreatment','The end-style treatment of the pipe segment as made available from the manufacturer. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1331=IFCPROPERTYSETTEMPLATE('24NiU6Uoz1Ff5i20P5oKb9',$,'Pset_PipeSegmentTypeGutter','Definition from IAI: Gutter segment type common attributes.\X2\000A\X0\',$,'IfcPipeSegmentType',(#1332,#1334));
-#1332=IFCSIMPLEPROPERTYTEMPLATE('0LKM85csvFuvGA3wPPLKRx',$,'Slope','Angle of the gutter to allow for drainage ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure ',$,$,#1333,$,$,.READWRITE.);
-#1333=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#1334=IFCSIMPLEPROPERTYTEMPLATE('0uix8DapbDb8mxZAIIooZQ',$,'FlowRating','Actual flow capacity for the gutter. Value of 0.00 means this value has not been set. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1335,$,$,.READWRITE.);
-#1335=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1336=IFCPROPERTYSETTEMPLATE('1eb5vWSIL1$et_dtLlvo1y',$,'Pset_ProjectionElementShadingDevicePHistory','Definition from IAI: Shading device performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1337,#1338));
-#1337=IFCSIMPLEPROPERTYTEMPLATE('1P1ksZTW57xepf78G20o5y',$,'TiltAngle','The angle of tilt defined in the plane perpendicular to the extrusion axis (X-Axis of the local placement). The angle shall be measured from the orientation of the Z-Axis in the local placement.',.P_SINGLEVALUE.,'IfcTimeSeriesValue',$,$,IFCPLANEANGLEMEASURE($),$,$,.READWRITE.);
-#1338=IFCSIMPLEPROPERTYTEMPLATE('1zPivYoyT7xPlSv1XifvqR',$,'Azimuth','The azimuth of the outward normal for the outward or upward facing surface.',.P_SINGLEVALUE.,'IfcTimeSeriesValue',$,$,IFCPLANEANGLEMEASURE($),$,$,.READWRITE.);
-#1339=IFCPROPERTYSETTEMPLATE('2KNXUFp5D0BveFbmZIis_u',$,'Pset_PumpPHistory','Definition from IAI: Pump performance history attributes.',$,'IfcPerformanceHistory',(#1340,#1341,#1342,#1343,#1344,#1345));
-#1340=IFCSIMPLEPROPERTYTEMPLATE('3s3XPRBpf30xORQlzBc6la',$,'MechanicalEfficiency','The pumps operational mechanical efficiency.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1341=IFCSIMPLEPROPERTYTEMPLATE('0jznoKjD58lgowhlyO4Xo$',$,'OverallEfficiency','The pump and motor overall operational efficiency.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1342=IFCSIMPLEPROPERTYTEMPLATE('2mDqCqxAD7jvMEVAwGW$Cy',$,'PressureRise','The developed pressure.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1343=IFCSIMPLEPROPERTYTEMPLATE('2zkRsF$MnFHPU3kCKfKr5N',$,'RotationSpeed','Pump rotational speed.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCROTATIONALFREQUENCYMEASURE($),$,$,.READWRITE.);
-#1344=IFCSIMPLEPROPERTYTEMPLATE('0zUAbH4gPEC8ghZs7dmt4y',$,'Flowrate','The actual operational fluid flowrate.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1345=IFCSIMPLEPROPERTYTEMPLATE('1maLcAcX9D9PSpYNw_7sz7',$,'Power','The actual power consumption of the pump.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOWERMEASURE($),$,$,.READWRITE.);
-#1346=IFCPROPERTYSETTEMPLATE('1CGDd84fLBxfSK9B6Acx5P',$,'Pset_PumpTypeCommon','Definition from IAI: Common attributes of a pump type.',$,'IfcPumpType',(#1347,#1349,#1351,#1353,#1354,#1355,#1356,#1358,#1360));
-#1347=IFCSIMPLEPROPERTYTEMPLATE('30f9XJBubF0vu8xS_5C2ZC',$,'FlowRateRange','Allowable range of volume of fluid being pumped against the resistance specified.',.P_BOUNDEDVALUE.,'IfcMassFlowRateMeasure',$,$,#1348,$,$,.READWRITE.);
-#1348=IFCDERIVEDUNIT($,.MASSFLOWRATEUNIT.,$,$);
-#1349=IFCSIMPLEPROPERTYTEMPLATE('19plTZ8Ff2gv5qqXRSi8Dv',$,'FlowResistanceRange','Allowable range of frictional resistance against which the fluid is being pumped',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,#1350,$,$,.READWRITE.);
-#1350=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1351=IFCSIMPLEPROPERTYTEMPLATE('3_C6YoSy1BNAC6o7DjMj0i',$,'ConnectionSize','The connection size of the to and from the pump',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1352,$,$,.READWRITE.);
-#1352=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1353=IFCSIMPLEPROPERTYTEMPLATE('0AzmVX_5P4Zv911aAMyPK3',$,'CasingMaterial','Material from which the casing of the pump is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1354=IFCSIMPLEPROPERTYTEMPLATE('1b8kgaEc97PgRC_VslbQVn',$,'ImpellerMaterial','Material from which the impeller of the pump is constructed. In the case of a positive displacement pump, the piston acts as the impeller',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1355=IFCSIMPLEPROPERTYTEMPLATE('1aj1Z5FFX2oxQLetw$nbnV',$,'ImpellerSealMaterial','Material from which the impeller shaft seal of the pump is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1356=IFCSIMPLEPROPERTYTEMPLATE('3Y41HXTHH9zAbmpOM8$vnU',$,'TemperatureRange','Allowable operational range of the fluid temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1357,$,$,.READWRITE.);
-#1357=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1358=IFCSIMPLEPROPERTYTEMPLATE('24TazPXrjFoBASYnHOm9nY',$,'NetPositiveSuctionHead','Minimum liquid pressure at the pump inlet to prevent cavitation. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1359,$,$,.READWRITE.);
-#1359=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1360=IFCSIMPLEPROPERTYTEMPLATE('0w3KjlRdP0KgcUNDd63c8w',$,'NominalRotationSpeed','Pump rotational speed under nominal conditions.',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,#1361,$,$,.READWRITE.);
-#1361=IFCDERIVEDUNIT($,.ROTATIONALFREQUENCYUNIT.,$,$);
-#1362=IFCPROPERTYSETTEMPLATE('1J_b$$GZ1FdAh6TX_OmHGU',$,'Pset_SpaceHeaterPHistoryCommon','Definition from IAI: Space heater performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1363,#1365,#1367,#1369,#1370,#1371,#1372,#1373,#1374,#1375,#1376,#1378));
-#1363=IFCSIMPLEPROPERTYTEMPLATE('3JAmfM_0nEXxh0LgFok3qJ',$,'FractionRadiantHeatTransfer','Fraction of the total heat transfer rate as the radiant heat transfer.',.P_SINGLEVALUE.,'IfcReal',$,$,#1364,$,$,.READWRITE.);
-#1364=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1365=IFCSIMPLEPROPERTYTEMPLATE('08ShYbnhfA9fz7dcnyWBlI',$,'FractionConvectiveHeatTransfer','Fraction of the total heat transfer rate as the convective heat transfer.',.P_SINGLEVALUE.,'IfcReal',$,$,#1366,$,$,.READWRITE.);
-#1366=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1367=IFCSIMPLEPROPERTYTEMPLATE('060Qo6n1X8oQmYllJ$0V1Z',$,'Effectiveness','Ratio of the real heat transfer rate to the maximum possible heat transfer rate.',.P_SINGLEVALUE.,'IfcReal',$,$,#1368,$,$,.READWRITE.);
-#1368=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1369=IFCSIMPLEPROPERTYTEMPLATE('1fkItvNRz2Qu80InYTrMcr',$,'SurfaceTemperature','Average surface temperature of the component.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1370=IFCSIMPLEPROPERTYTEMPLATE('34NamSzF1BQhlgVsGMilNu',$,'SpaceAirTemperature','Dry bulb temperature in the space.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1371=IFCSIMPLEPROPERTYTEMPLATE('2$YnmPoc91Ge7L8i_lX1eT',$,'SpaceMeanRadiantTemperature','Mean radiant temperature in the space.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1372=IFCSIMPLEPROPERTYTEMPLATE('2hV8V4A_D7yffIOm9cZBFw',$,'AuxiliaryEnergySourceConsumption','Auxiliary energy source consumption.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1373=IFCSIMPLEPROPERTYTEMPLATE('1pZfMPWiD1m8d2sEuaTlCS',$,'UACurve','UA curve as function of ambient temperature and surface temperature; UA = f (Tambient, Tsurface)',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1374=IFCSIMPLEPROPERTYTEMPLATE('1vpBy784D0xA3o8azMssLc',$,'OutputCapacityCurve','Partial output capacity curve (as a function of water temperature); Q = f (Twater).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1375=IFCSIMPLEPROPERTYTEMPLATE('0Jteghwaf3dfvZtXA6nFPi',$,'AirResistanceCurve','Air resistance curve (w/ fan only); Pressure = f ( flow rate).',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
-#1376=IFCSIMPLEPROPERTYTEMPLATE('14WUBjtfPAsBqqiyOB_q1f',$,'Exponent','Characteristic exponent, slope of log(heat output) vs log (surface temperature minus environmental temperature).',.P_SINGLEVALUE.,'IfcReal',$,$,#1377,$,$,.READWRITE.);
-#1377=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1378=IFCSIMPLEPROPERTYTEMPLATE('17KGs_fIPB2v541_HPm1YA',$,'HeatOutputRate','Overall heat transfer rate.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1379,$,$,.READWRITE.);
-#1379=IFCNAMEDUNIT($,.POWERUNIT.);
-#1380=IFCPROPERTYSETTEMPLATE('357M$Nu0z7eRD8D7yMOrEs',$,'Pset_SpaceHeaterTypeCommon','Definition from IAI: Space heater type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcSpaceHeaterType',(#1381,#1383,#1385,#1386,#1388,#1390,#1392));
-#1381=IFCSIMPLEPROPERTYTEMPLATE('11W_jmV6XBF9Y95e2VN7Ig',$,'TemperatureClassification','Enumeration defining the temperature classification of the space heater surface temperature.\X2\000A\X0\low temperature - surface temperature is relatively low, usually heated by hot water or electricity.\X2\000A\X0\high temperature - surface temperature is relatively high, usually heated by gas or steam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1382,$,$,$,.READWRITE.);
-#1382=IFCPROPERTYENUMERATION('PEnum_SpaceHeaterTemperatureClassification',(IFCLABEL('LOWTEMPERATURE'),IFCLABEL('HIGHTEMPERATURE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1383=IFCSIMPLEPROPERTYTEMPLATE('0zUhCFYVD4ph_U_Jyu$FJ7',$,'HeatingSource','Enumeration defining the heating source used by the space heater.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1384,$,$,$,.READWRITE.);
-#1384=IFCPROPERTYENUMERATION('PEnum_HeatingSource',(IFCLABEL('FUEL'),IFCLABEL('GAS'),IFCLABEL('ELECTRICITY'),IFCLABEL('HOTWATER'),IFCLABEL('STEAM'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1385=IFCSIMPLEPROPERTYTEMPLATE('2EqzCB2hPEZuoM2LXYFymt',$,'Material','Primary material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1386=IFCSIMPLEPROPERTYTEMPLATE('0TYNXqk8H21AVC45wegv0J',$,'BodyMass','Overall body mass of the heater.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1387,$,$,.READWRITE.);
-#1387=IFCNAMEDUNIT($,.MASSUNIT.);
-#1388=IFCSIMPLEPROPERTYTEMPLATE('1AHLignmf7B9trDBhCFt3b',$,'ThermalMassHeatCapacity','Product of component mass and specific heat',.P_SINGLEVALUE.,'IfcReal',$,$,#1389,$,$,.READWRITE.);
-#1389=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1390=IFCSIMPLEPROPERTYTEMPLATE('0rczEWg_nAX8GC4kL5Je8e',$,'OutputCapacity','Total nominal heat output as listed by the manufacturer.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1391,$,$,.READWRITE.);
-#1391=IFCNAMEDUNIT($,.POWERUNIT.);
-#1392=IFCSIMPLEPROPERTYTEMPLATE('0TmG2M0GnFO99f9HqkFPSn',$,'ThermalEfficiency','Overall Thermal Efficiency is defined as gross energy output of the heat transfer device divided by the energy input.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#1393=IFCPROPERTYSETTEMPLATE('0MSAOGlJPFPgF62WaHrX8J',$,'Pset_SpaceHeaterTypeHydronic','Definition from IAI: Hydronic space heater type common attributes.\X2\000A\X0\WaterProperties attribute deleted in IFC2x2 Pset Addendum: Use IfcWaterProperties instead.',$,'IfcSpaceHeaterType',(#1394,#1396));
-#1394=IFCSIMPLEPROPERTYTEMPLATE('3LYAQK2e14te5qZMApUKnU',$,'TubingLength','Water tube length inside the component.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1395,$,$,.READWRITE.);
-#1395=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1396=IFCSIMPLEPROPERTYTEMPLATE('0ZcmT_CXPBr8Rftuwd5oeX',$,'WaterContent','Weight of water content within the heater.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1397,$,$,.READWRITE.);
-#1397=IFCNAMEDUNIT($,.MASSUNIT.);
-#1398=IFCPROPERTYSETTEMPLATE('3XSBueu2X28wmlwdN7tjvC',$,'Pset_SpaceThermalPHistory','Definition from IAI: Thermal and air flow conditions of a space or zone. HISTORY: New property set in IFC 2x2.',$,'IfcPerformanceHistory',(#1399,#1400,#1401,#1402,#1403,#1404));
-#1399=IFCSIMPLEPROPERTYTEMPLATE('1rYwq2Kwj5qxPCNTIkovCn',$,'CoolingAirFlowRate','Cooling air flow rate in the space. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1400=IFCSIMPLEPROPERTYTEMPLATE('378Z51wIP61PzsdhY_HSJc',$,'HeatingAirFlowRate','Heating air flow rate in the space. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1401=IFCSIMPLEPROPERTYTEMPLATE('0vWJlgwwbEdBMKX7RsGbqB',$,'VentilationAirFlowRate','Ventilation air flow rate in the space. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1402=IFCSIMPLEPROPERTYTEMPLATE('15Hus3bXbCKhCvIWIJBOPw',$,'ExhaustAirFlowRate','Exhaust air flow rate in the space. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMETRICFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1403=IFCSIMPLEPROPERTYTEMPLATE('3B51Ccu5X1Nfg1oYut0zb6',$,'SpaceTemperature','Temperature of the space. ',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCTHERMODYNAMICTEMPERATUREMEASURE($),$,$,.READWRITE.);
-#1404=IFCSIMPLEPROPERTYTEMPLATE('14uXtN_wDA29zI7mVRoEsA',$,'SpaceRelativeHumidity','The relative humidity of the space.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPOSITIVERATIOMEASURE($),$,$,.READWRITE.);
-#1405=IFCPROPERTYSETTEMPLATE('2p5u$LX4r5Zuj7H0qbBLam',$,'Pset_TankTypeCommon','Definition from IAI: Common attributes of a tank type.',$,'IfcTankType',(#1406,#1408,#1410,#1412,#1414,#1416,#1418,#1420,#1422,#1423));
-#1406=IFCSIMPLEPROPERTYTEMPLATE('0swC9Jzjb5M9$EjB2nnQ3e',$,'Type','Defines the types of tank that may be specified where: \X2\000A000A\X0\BreakPressure =\X2\0009\X0\ Tank that breaks the hydraulic pressure in a distribution system\X2\000A\X0\Expansion =\X2\0009\X0\ Tank, connected to the primary circuit of a hot water system that accommodates increase in volume of the water when heated\X2\000A\X0\FeedAndExpansion =\X2\0009\X0\ Tank that supplies cold water to a hot water system and also accommodates increase in volume of the water when heated\X2\000A\X0\GasStorage_Butane =\X2\0009\X0\ Main tank to which commercial butane is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\GasStorage_LPG =\X2\0009\X0\ Main tank to which liquefied petroleum gas is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\GasStorage_Propane =\X2\0009\X0\ Main tank to which commercial propane is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\OilService =\X2\0009\X0\ Secondary tank from which oil fuel is fed to a single oil fuel burning appliance\X2\000A\X0\OilStorage =\X2\0009\X0\ Main tank to which oil fuel is delivered and from which it is supplied to an oil fuel burning appliance or oil service tank.\X2\000A\X0\PressureVessel = Tank that stores fluid under pressure.\X2\000A\X0\WaterStorage_General =\X2\0009\X0\ Tank that stores water sufficient to meet general requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_Potable =\X2\0009\X0\ Tank that stores water sufficient to meet potable water requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_Process =\X2\0009\X0\ Tank that stores water sufficient to meet process and/or production requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_CoolingTowerMakeup =\X2\0009\X0\ Tank that stores water sufficient to meet cooling tower make up water requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1407,$,$,$,.READWRITE.);
-#1407=IFCPROPERTYENUMERATION('PEnum_TankType',(IFCLABEL('BREAKPRESSURE'),IFCLABEL('EXPANSION'),IFCLABEL('FEEDANDEXPANSION'),IFCLABEL('GASSTORAGEBUTANE'),IFCLABEL('GASSTORAGELIQUIFIEDPETROLEUMGAS'),IFCLABEL('GASSTORAGEPROPANE'),IFCLABEL('OILSERVICE'),IFCLABEL('OILSTORAGE'),IFCLABEL('PRESSUREVESSEL'),IFCLABEL('WATERSTORAGEGENERAL'),IFCLABEL('WATERSTORAGEPOTABLE'),IFCLABEL('WATERSTORAGEPROCESS'),IFCLABEL('WATERSTORAGECOOLINGTOWERMAKEUP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1408=IFCSIMPLEPROPERTYTEMPLATE('2LFraYBRjAqP9vnE99a_Nt',$,'AccessType','Defines the types of access (or cover) to a tank that may be specified.\X2\000A000A\X0\Note that covers are generally specified for rectangular tanks. For cylindrical tanks, access will normally be via a manhole.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1409,$,$,$,.READWRITE.);
-#1409=IFCPROPERTYENUMERATION('PEnum_TankAccessType',(IFCLABEL('NONE'),IFCLABEL('LOOSECOVER'),IFCLABEL('MANHOLE'),IFCLABEL('SECUREDCOVER'),IFCLABEL('SECUREDCOVERWITHMANHOLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1410=IFCSIMPLEPROPERTYTEMPLATE('1GcspXk6LFbvEdf5Vk0qr6',$,'NominalLengthOrDiameter','The nominal length or, in the case of a vertical cylindrical tank, the nominal diameter of the tank',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1411,$,$,.READWRITE.);
-#1411=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1412=IFCSIMPLEPROPERTYTEMPLATE('3WyGpiSOHCXOkOxPDYWLCJ',$,'NominalWidthOrDiameter','The nominal width or, in the case of a horizontal cylindrical tank, the nominal diameter of the tank.\X2\000A000A\X0\Note: Not required for a vertical cylindrical tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1413,$,$,.READWRITE.);
-#1413=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1414=IFCSIMPLEPROPERTYTEMPLATE('1DwDlHJu1Bfwm_IMPdqHXS',$,'NominalDepth','The nominal depth of the tank.\X2\000A000A\X0\Note: Not required for a horizontal cylindrical tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1415,$,$,.READWRITE.);
-#1415=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1416=IFCSIMPLEPROPERTYTEMPLATE('0zhC9TDqT9tQI4GDWl66UI',$,'NominalCapacity','The nominal or design volumetric capacity of the tank.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1417,$,$,.READWRITE.);
-#1417=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1418=IFCSIMPLEPROPERTYTEMPLATE('1gtT5rMoL4yvw27$PLp4at',$,'EffectiveCapacity','The effective or actual volumetric capacity of the tank.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1419,$,$,.READWRITE.);
-#1419=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1420=IFCSIMPLEPROPERTYTEMPLATE('2ioM9EKqX4WQawFIQfvtqc',$,'OperatingWeight','Operating weight of the tank including all of its contents.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1421,$,$,.READWRITE.);
-#1421=IFCNAMEDUNIT($,.MASSUNIT.);
-#1422=IFCSIMPLEPROPERTYTEMPLATE('2JiSLuKj16A8LN1wvqQMaj',$,'Material','Material from which the tank is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1423=IFCSIMPLEPROPERTYTEMPLATE('0KHWWTqNH8DuE9PCemL3dk',$,'MaterialThickness','Thickness of the material from which the tank is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1424,$,$,.READWRITE.);
-#1424=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1425=IFCPROPERTYSETTEMPLATE('1pg_u2v6T74wB2rig8qthM',$,'Pset_TankTypeExpansion','Definition from IAI: Common attributes of an expansion type tank.',$,'IfcTankType',(#1426,#1428,#1430));
-#1426=IFCSIMPLEPROPERTYTEMPLATE('3AT5BdkkD6XAD9eq6yiRj5',$,'ChargePressure','Nominal or design operating pressure of the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1427,$,$,.READWRITE.);
-#1427=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1428=IFCSIMPLEPROPERTYTEMPLATE('2htcMwMzHFhBpPThFprM$a',$,'PressureRegulatorSetting','Pressure that is automatically maintained in the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1429,$,$,.READWRITE.);
-#1429=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1430=IFCSIMPLEPROPERTYTEMPLATE('1AqMf$LMTDgwmF84Awo719',$,'ReliefValveSetting','Pressure at which the relief valve activates. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1431,$,$,.READWRITE.);
-#1431=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1432=IFCPROPERTYSETTEMPLATE('0TV7CRFATACvUoEEw3rdDb',$,'Pset_TankTypePreformed','Definition from IAI: Fixed vessel manufactured as a single unit with one or more compartments for storing a liquid.\X2\000A000A\X0\Pset renamed from Pset_TankTypePreformedTank to Pset_TankTypePreformed in IFC2x2 Pset Addendum.',$,'IfcTankType',(#1433,#1435,#1437,#1439));
-#1433=IFCSIMPLEPROPERTYTEMPLATE('0ECJ7jI1b4AAs0BO908PYG',$,'PatternType','Defines the types of pattern (or shape of a tank that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1434,$,$,$,.READWRITE.);
-#1434=IFCPROPERTYENUMERATION('PEnum_TankPatternType',(IFCLABEL('HORIZONTALCYLINDER'),IFCLABEL('VERTICALCYLINDER'),IFCLABEL('RECTANGULAR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1435=IFCSIMPLEPROPERTYTEMPLATE('0J9dsSy_j8MuixBL_TaXpS',$,'EndShapeType','Defines the types of end shapes that can be used for preformed tanks. The convention for reading these enumerated values is that for a vertical cylinder, the first value is the base and the second is the top; for a horizontal cylinder, the order of reading should be left to right. For a speherical tank, the value UNSET should be used.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1436,$,$,$,.READWRITE.);
-#1436=IFCPROPERTYENUMERATION('PEnum_EndShapeType',(IFCLABEL('CONCAVECONVEX'),IFCLABEL('FLATCONVEX'),IFCLABEL('CONVEXCONVEX'),IFCLABEL('CONCAVEFLAT'),IFCLABEL('FLATFLAT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
-#1437=IFCSIMPLEPROPERTYTEMPLATE('3LCUihMcDD2h5$guxj_hFK',$,'FirstCurvatureRadius','FirstCurvatureRadius should be defined as the base or left side radius of curvature value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1438,$,$,.READWRITE.);
-#1438=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1439=IFCSIMPLEPROPERTYTEMPLATE('2E$gBF27f6Vh9PoNxFS2yJ',$,'SecondCurvatureRadius','SecondCurvatureRadius should be defined as the top or right side radius of curvature value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1440,$,$,.READWRITE.);
-#1440=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1441=IFCPROPERTYSETTEMPLATE('10X7l368TEEfEeCKB86Lv5',$,'Pset_TankTypePressureVessel','Definition from IAI: Common attributes of a pressure vessel.',$,'IfcTankType',(#1442,#1444,#1446));
-#1442=IFCSIMPLEPROPERTYTEMPLATE('3mDKTdgdHB$O8AL92KRwLF',$,'ChargePressure','Nominal or design operating pressure of the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1443,$,$,.READWRITE.);
-#1443=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1444=IFCSIMPLEPROPERTYTEMPLATE('3s2Hh4qx59eeO83xHp2lfd',$,'PressureRegulatorSetting','Pressure that is automatically maintained in the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1445,$,$,.READWRITE.);
-#1445=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1446=IFCSIMPLEPROPERTYTEMPLATE('1T0ULmyrf9XOH6pN97aD8i',$,'ReliefValveSetting','Pressure at which the relief valve activates. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1447,$,$,.READWRITE.);
-#1447=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1448=IFCPROPERTYSETTEMPLATE('38XFEh5Er9ix78BCKuz38s',$,'Pset_TankTypeSectional','Definition from IAI: Fixed vessel constructed from sectional parts with one or more compartments for storing a liquid.\X2\000A000A\X0\Note (1): All sectional construction tanks are considered to be rectangular by default.\X2\000A\X0\Note (2): Generally, it is not expected that sectional construction tanks will be used for the purposes of gas storage.\X2\000A000A\X0\Pset renamed from Pset_TankTypeSectionalTank to Pset_TankTypeSectional in IFC2x2 Pset Addendum.',$,'IfcTankType',(#1449,#1451,#1453));
-#1449=IFCSIMPLEPROPERTYTEMPLATE('3hcxT_GRn0Y8115bTgCzJU',$,'NumberOfSections','Number of sections used in the construction of the tank\X2\000A000A\X0\Note: All sections assumed to be the same size.',.P_SINGLEVALUE.,'IfcInteger',$,$,#1450,$,$,.READWRITE.);
-#1450=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#1451=IFCSIMPLEPROPERTYTEMPLATE('20UR2uTPD9uhYDaPj7evua',$,'SectionLength','The length of a section used in the construction of the tank',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1452,$,$,.READWRITE.);
-#1452=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1453=IFCSIMPLEPROPERTYTEMPLATE('3mtnJ$mwnDdQxCKQlW5bDm',$,'SectionWidth','The width of a section used in the construction of the tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1454,$,$,.READWRITE.);
-#1454=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1455=IFCPROPERTYSETTEMPLATE('0I9jZrYD17N9mH2jVV9xZS',$,'Pset_TubeBundleTypeCommon','Definition from IAI: Tube bundle type common attributes.\X2\000A\X0\',$,'IfcTubeBundleType',(#1456,#1458,#1460,#1462,#1463,#1465,#1467,#1469,#1471,#1473,#1475,#1477,#1479,#1481,#1482));
-#1456=IFCSIMPLEPROPERTYTEMPLATE('3qoFH6TSz5_AJu9XrKvoyz',$,'NumberOfRows','Number of tube rows in the tube bundle assembly.',.P_SINGLEVALUE.,'IfcInteger',$,$,#1457,$,$,.READWRITE.);
-#1457=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#1458=IFCSIMPLEPROPERTYTEMPLATE('1sv_SY3lvENhCXZvoyYBr3',$,'StaggeredRowSpacing','Staggered tube row spacing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1459,$,$,.READWRITE.);
-#1459=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1460=IFCSIMPLEPROPERTYTEMPLATE('3wkyzHsX5099uNsRXcMqAV',$,'InLineRowSpacing','In-line tube row spacing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1461,$,$,.READWRITE.);
-#1461=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1462=IFCSIMPLEPROPERTYTEMPLATE('1rN9o3MYnDtf0lvFMzHkVg',$,'NumberOfCircuits','Number of parallel fluid tube circuits.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#1463=IFCSIMPLEPROPERTYTEMPLATE('0RoL3WmcPDWPQxzrujHbhh',$,'FoulingFactor','Fouling factor of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcThermalResistanceMeasure',$,$,#1464,$,$,.READWRITE.);
-#1464=IFCDERIVEDUNIT($,.THERMALRESISTANCEUNIT.,$,$);
-#1465=IFCSIMPLEPROPERTYTEMPLATE('1Cs_jW5Mb9aRJYATGsJcxY',$,'ThermalConductivity','The thermal conductivity of the tube.',.P_SINGLEVALUE.,'IfcThermalConductivityMeasure',$,$,#1466,$,$,.READWRITE.);
-#1466=IFCDERIVEDUNIT($,.THERMALCONDUCTANCEUNIT.,$,$);
-#1467=IFCSIMPLEPROPERTYTEMPLATE('1JXiox$GrE2B5bWi9L30pT',$,'Length','Length of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1468,$,$,.READWRITE.);
-#1468=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1469=IFCSIMPLEPROPERTYTEMPLATE('2NbkmXwyb1Cw15I9EZZ467',$,'Volume','Total volume of fluid in the tubes and their headers.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1470,$,$,.READWRITE.);
-#1470=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1471=IFCSIMPLEPROPERTYTEMPLATE('1k40uOJT52g8E2ry8vwN3x',$,'NominalDiameter','Nominal diameter or width of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1472,$,$,.READWRITE.);
-#1472=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1473=IFCSIMPLEPROPERTYTEMPLATE('36zWbsxzf9CeMA8d9KMegO',$,'OutsideDiameter','Actual outside diameter of the tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1474,$,$,.READWRITE.);
-#1474=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1475=IFCSIMPLEPROPERTYTEMPLATE('2c6cAj3MrBFwNf57cKqZ9k',$,'InsideDiameter','Actual inner diameter of the tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1476,$,$,.READWRITE.);
-#1476=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1477=IFCSIMPLEPROPERTYTEMPLATE('0aLbmnn1D9ZuGYhQiBIrB5',$,'HorizontalSpacing','Horizontal spacing between tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1478,$,$,.READWRITE.);
-#1478=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1479=IFCSIMPLEPROPERTYTEMPLATE('01kZIKhv9E7eNPoTG5Hw4I',$,'VerticalSpacing','Vertical spacing between tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1480,$,$,.READWRITE.);
-#1480=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1481=IFCSIMPLEPROPERTYTEMPLATE('0uwQERRtjCH8sX1qMt2XmH',$,'Material','Material used for construction of the tubes.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1482=IFCSIMPLEPROPERTYTEMPLATE('3bF5sDyoH6d8S4fOYbJDdi',$,'HasTurbulator','TRUE if the tube has a turbulator, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1483=IFCPROPERTYSETTEMPLATE('1vmPuhTDz9M8AIfylKiH27',$,'Pset_TubeBundleTypeFinned','Definition from IAI: Finned tube bundle type attributes.\X2\000A\X0\Contains the attributes related to the fins attached to a tube in a finned tube bundle such as is commonly found in coils.\X2\000A\X0\',$,'IfcTubeBundleType',(#1484,#1486,#1488,#1490,#1492,#1494,#1496,#1497,#1498));
-#1484=IFCSIMPLEPROPERTYTEMPLATE('3azpm6JK1A38N5Z1KY27wE',$,'Spacing','Distance between fins on a tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1485,$,$,.READWRITE.);
-#1485=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1486=IFCSIMPLEPROPERTYTEMPLATE('3yURujB111jv2gSVJbx0D1',$,'Thickness','Thickness of the fin.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1487,$,$,.READWRITE.);
-#1487=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1488=IFCSIMPLEPROPERTYTEMPLATE('1ryGec631DcBeZ6lm6TAJK',$,'ThermalConductivity','The thermal conductivity of the fin.',.P_SINGLEVALUE.,'IfcThermalConductivityMeasure',$,$,#1489,$,$,.READWRITE.);
-#1489=IFCDERIVEDUNIT($,.THERMALCONDUCTANCEUNIT.,$,$);
-#1490=IFCSIMPLEPROPERTYTEMPLATE('2roQzDXILDERIHCSw7o5U8',$,'Length','Length of the fin as measured parallel to the direction of airflow.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1491,$,$,.READWRITE.);
-#1491=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1492=IFCSIMPLEPROPERTYTEMPLATE('3hya1XuHLCNxCgZkiVSSud',$,'Height','Length of the fin as measured perpendicular to the direction of airflow.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1493,$,$,.READWRITE.);
-#1493=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1494=IFCSIMPLEPROPERTYTEMPLATE('1d93SG$K90TPOIm2NoBv2H',$,'Diameter','Actual diameter of a fin for circular fins only.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1495,$,$,.READWRITE.);
-#1495=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1496=IFCSIMPLEPROPERTYTEMPLATE('3aLHFexwn7ZQ3OH6Tv3CnW',$,'Material','Material used for construction of the fins.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1497=IFCSIMPLEPROPERTYTEMPLATE('0kEIqAr1X2$ByOwCeewiLb',$,'FinCorrugatedType','Description of a fin corrugated type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1498=IFCSIMPLEPROPERTYTEMPLATE('37DxIb8jbAcQQV7afzl8Dk',$,'HasCoating','TRUE if the fin has a coating, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1499=IFCPROPERTYSETTEMPLATE('39yCR4hWb0bPoj5kuMiBV1',$,'Pset_UnitaryEquipmentTypeAirConditioningUnit','Definition from IAI: Air conditioning unit equipment type attributes.\X2\000A\X0\Note that these attributes were formely Pset_PackagedACUnit prior to IFC2x2.\X2\000A\X0\HeatingEnergySource attribute deleted in IFC2x2 Pset Addendum: Use IfcEnergyProperties, IfcFuelProperties, etc. instead.',$,'IfcUnitaryEquipmentType',(#1500,#1502,#1504,#1505,#1507,#1508,#1510,#1512,#1514));
-#1500=IFCSIMPLEPROPERTYTEMPLATE('0Cpcw3lon4YRbKvwKLbCBI',$,'SensibleCoolingCapacity','Sensible cooling capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1501,$,$,.READWRITE.);
-#1501=IFCNAMEDUNIT($,.POWERUNIT.);
-#1502=IFCSIMPLEPROPERTYTEMPLATE('0pTMS4l8T16PuMp7ZNvpus',$,'LatentCoolingCapacity','Latent cooling capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1503,$,$,.READWRITE.);
-#1503=IFCNAMEDUNIT($,.POWERUNIT.);
-#1504=IFCSIMPLEPROPERTYTEMPLATE('3C6uenNlz7O8zuALxWUjO0',$,'CoolingEfficiency','Coefficient of Performance: Ratio of cooling energy output to energy input under full load operating conditions per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#1505=IFCSIMPLEPROPERTYTEMPLATE('2dqhUPOkXBqxE_BYX_oP8B',$,'HeatingCapacity','Heating capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365 for heat pumps, AFUE for fuel burning and NEMA for electric heat. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#1506,$,$,.READWRITE.);
-#1506=IFCNAMEDUNIT($,.POWERUNIT.);
-#1507=IFCSIMPLEPROPERTYTEMPLATE('05FvC1$f5CCxFx2z4ye66t',$,'HeatingEfficiency','Heating efficiency of the PackagedACUnit under full load heating conditions per ARI Standards 210/240, 270, 275, 360, 340 and 365 for heat pumps, AFUE for fuel burning and NEMA for electric heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#1508=IFCSIMPLEPROPERTYTEMPLATE('0LLJEHaIHBuvR_WOppQRZT',$,'CondenserFlowrate','Flow rate of fluid through the condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1509,$,$,.READWRITE.);
-#1509=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1510=IFCSIMPLEPROPERTYTEMPLATE('3eB3q4BRHEYRSnl1ZmMjX0',$,'CondenserEnteringTemperature','Temperature of fluid entering condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#1511,$,$,.READWRITE.);
-#1511=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1512=IFCSIMPLEPROPERTYTEMPLATE('1URDD4ImzCAfg1aYgP78ka',$,'CondenserLeavingTemperature','Termperature of fluid leaving condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#1513,$,$,.READWRITE.);
-#1513=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1514=IFCSIMPLEPROPERTYTEMPLATE('0yZole_JH2MwD038o2wogg',$,'OutsideAirFlowrate','Flow rate of outside air entering the PackagedACUnit per the manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1515,$,$,.READWRITE.);
-#1515=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1516=IFCPROPERTYSETTEMPLATE('2du6dK9yj1tR8WxDY94k5G',$,'Pset_UnitaryEquipmentTypeAirHandler','Definition from IAI: Air handler unitary equipment type attributes.\X2\000A\X0\Note that these attributes were formerly Pset_AirHandler prior to IFC2x2.\X2\000A\X0\',$,'IfcUnitaryEquipmentType',(#1517,#1519,#1521));
-#1517=IFCSIMPLEPROPERTYTEMPLATE('3Z8bjs3efC182B3ioUNLdW',$,'AirHandlerConstruction','Enumeration defining how the air handler might be fabricated. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1518,$,$,$,.READWRITE.);
-#1518=IFCPROPERTYENUMERATION('PEnum_AirHandlerConstruction',(IFCLABEL('MANUFACTUREDITEM'),IFCLABEL('CONSTRUCTEDONSITE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1519=IFCSIMPLEPROPERTYTEMPLATE('3Ux6Ll4wT61Qa1Pyon$qOM',$,'AirHandlerFanCoilArrangement','Enumeration defining the arrangement of the supply air fan and the cooling coil. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1520,$,$,$,.READWRITE.);
-#1520=IFCPROPERTYENUMERATION('PEnum_AirHandlerFanCoilArrangement',(IFCLABEL('BLOWTHROUGH'),IFCLABEL('DRAWTHROUGH'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1521=IFCSIMPLEPROPERTYTEMPLATE('0xFZNVGD99Vgs1lekRPnA$',$,'DualDeck','Does the AirHandler have a dual deck? TRUE = Yes, FALSE = No. ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#1522=IFCPROPERTYSETTEMPLATE('3WvcnLLjT0Sw6O62$k76rr',$,'Pset_ValvePHistory','Definition from IAI: Valve performance history common attributes of a typical 2 port pattern type valve.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1523,#1524,#1525));
-#1523=IFCSIMPLEPROPERTYTEMPLATE('1wChTSrRjAmwE9qU2jMSqs',$,'PercentageOpen','The ratio between the amount that the valve is open to the full open position of the valve.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCRATIOMEASURE($),$,$,.READWRITE.);
-#1524=IFCSIMPLEPROPERTYTEMPLATE('1UsWuJn9z8TRK5$4P38hn0',$,'MeasuredFlowRate','The rate of flow of a fluid measured across the valve.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCMASSFLOWRATEMEASURE($),$,$,.READWRITE.);
-#1525=IFCSIMPLEPROPERTYTEMPLATE('0grSEXd9P7yuy3YeH5lu1p',$,'MeasuredPressureDrop','The actual pressure drop in the fluid measured across the valve.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCPRESSUREMEASURE($),$,$,.READWRITE.);
-#1526=IFCPROPERTYSETTEMPLATE('3HOLHnVWz4mwnajXtY3dY1',$,'Pset_ValveTypeAirRelease','Definition from IAI: Valve used to release air from a pipe or fitting. \X2\000A\X0\Note that an air release valve is constrained to have a single port pattern\X2\000A\X0\',$,'IfcValveType',(#1527));
-#1527=IFCSIMPLEPROPERTYTEMPLATE('2$kr2HESH3VhX9p7IX8oKy',$,'IsAutomatic','Indication of whether the valve is automatically operated (TRUE) or manually operated (FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1528=IFCPROPERTYSETTEMPLATE('1vCCKPwvX3Ueq92FIivf3g',$,'Pset_ValveTypeCommon','Definition from IAI: Valve type common attributes.\X2\000A\X0\',$,'IfcValveType',(#1529,#1531,#1533,#1535,#1537,#1538,#1539,#1541,#1543,#1545));
-#1529=IFCSIMPLEPROPERTYTEMPLATE('0Ti4FWKr9EUf3kRu5tCTB9',$,'ValvePattern','The configuration of the ports of a valve according to either the linear route taken by a fluid flowing through the valve or by the number of ports where:\X2\000A000A\X0\SINGLEPORT = Valve that has a single entry port from the system that it serves, the exit port being to the surrounding environment.\X2\000A\X0\ANGLED_2_PORT = Valve in which the direction of flow is changed through 90 degrees\X2\000A\X0\STRAIGHT_2_PORT = Valve in which the flow is straight through\X2\000A\X0\STRAIGHT_3_PORT = Valve with three separate ports\X2\000A\X0\CROSSOVER_4_PORT = Valve with 4 separate ports\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1530,$,$,$,.READWRITE.);
-#1530=IFCPROPERTYENUMERATION('PEnum_ValvePattern',(IFCLABEL('SINGLEPORT'),IFCLABEL('ANGLED_2_PORT'),IFCLABEL('STRAIGHT_2_PORT'),IFCLABEL('STRAIGHT_3_PORT'),IFCLABEL('CROSSOVER_4_PORT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1531=IFCSIMPLEPROPERTYTEMPLATE('3mkkG0RFb3G8yKVwHTfGN3',$,'ValveOperation','The method of valve operation where:\X2\000A000A\X0\DROPWEIGHT = A valve that is closed by the action of a weighted lever being released, the weight normally being prevented from dropping by being held by a wire, the closure normally being made by the action of heat on a fusible link in the wire\X2\000A\X0\FLOAT = A valve that is opened and closed by the action of a float that rises and falls with water level. The float may be a ball attached to a lever or other mechanism\X2\000A\X0\HYDRAULIC = A valve that is opened and closed by hydraulic actuation\X2\000A\X0\LEVER = A valve that is opened and closed by the action of a lever rotating the gate within the valve.\X2\000A\X0\LOCKSHIELD = A valve that requires the use of a special lockshield key for opening and closing, the operating mechanism being protected by a shroud during normal operation.\X2\000A\X0\MOTORIZED = A valve that is opened and closed by the action of an electric motor on an actuator\X2\000A\X0\PNEUMATIC = A valve that is opened and closed by pneumatic actuation\X2\000A\X0\SOLENOID = A valve that is normally held open by a magnetic field in a coil acting on the gate but that is closed immediately if the electrical current generating the magnetic field is removed. \X2\000A\X0\SPRING = A valve that is normally held in position by the pressure of a spring on a plate but that may be caused to open if the pressure of the fluid is sufficient to overcome the spring pressure. \X2\000A\X0\THERMOSTATIC = A valve in which the ports are opened or closed to maintain a required predetermined temperature.\X2\000A\X0\WHEEL = A valve that is opened and closed by the action of a wheel moving the gate within the valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1532,$,$,$,.READWRITE.);
-#1532=IFCPROPERTYENUMERATION('PEnum_ValveOperation',(IFCLABEL('DROPWEIGHT'),IFCLABEL('FLOAT'),IFCLABEL('HYDRAULIC'),IFCLABEL('LEVER'),IFCLABEL('LOCKSHIELD'),IFCLABEL('MOTORIZED'),IFCLABEL('PNEUMATIC'),IFCLABEL('SOLENOID'),IFCLABEL('SPRING'),IFCLABEL('THERMOSTATIC'),IFCLABEL('WHEEL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1533=IFCSIMPLEPROPERTYTEMPLATE('0Qp2T3beX7fAbKCQFLCaOH',$,'ValveMechanism','The mechanism by which the valve function is achieved where:\X2\000A000A\X0\BALL Valve that has a ported ball that can be turned relative to the body seat ports\X2\000A\X0\BUTTERFLY Valve in which a streamlined disc pivots about a diametric axis\X2\000A\X0\CONFIGUREDGATE Screwdown valve in which the closing gate is shaped in a configured manner to have a more precise control of pressure and flow change across the valve.\X2\000A\X0\GLAND Valve with a tapered seating, in which a rotatable plug is retained by means of a gland and gland packing\X2\000A\X0\GLOBE Screwdown valve that has a spherical body\X2\000A\X0\LUBRICATEDPLUG Plug valve in which a lubricant is injected under pressure between the plug face and the body\X2\000A\X0\NEEDLE Valve for regulating the flow in or from a pipe, in which a slender cone moves along the axis of flow to close against a fixed conical seat\X2\000A\X0\PARALLELSLIDE Screwdown valve that has a machined plate that slides in formed grooves to form a seal\X2\000A\X0\PLUG Valve that has a ported plug that can be turned relative to the body seat ports\X2\000A\X0\WEDGEGATE Screwdown valve that has a wedge shaped plate fitting into tapered guides to form a seal',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1534,$,$,$,.READWRITE.);
-#1534=IFCPROPERTYENUMERATION('PEnum_ValveMechanism',(IFCLABEL('BALL'),IFCLABEL('BUTTERFLY'),IFCLABEL('CONFIGUREDGATE'),IFCLABEL('GLAND'),IFCLABEL('GLOBE'),IFCLABEL('LUBRICATEDPLUG'),IFCLABEL('NEEDLE'),IFCLABEL('PARALLELSLIDE'),IFCLABEL('PLUG'),IFCLABEL('WEDGEGATE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1535=IFCSIMPLEPROPERTYTEMPLATE('1kj3t9u3D67Q6m$WEzLhle',$,'Size','The size of the connection to the valve (or to each connection for faucets, mixing valves, etc.)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1536,$,$,.READWRITE.);
-#1536=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1537=IFCSIMPLEPROPERTYTEMPLATE('0TssXUbRj4FBY4T8bd6e1M',$,'BodyMaterial','Material from which the body of the valve is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1538=IFCSIMPLEPROPERTYTEMPLATE('3FuQkHOd98zBfMsiX04qXu',$,'OperatingMechanismMaterial','Material from which the operating mechanism (gate, globe, plug, needle, clack etc.) of the valve is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1539=IFCSIMPLEPROPERTYTEMPLATE('28f7OuiRT5TRKVmvZM85ti',$,'TestPressure','The maximum pressure to which the valve has been subjected under test',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1540,$,$,.READWRITE.);
-#1540=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1541=IFCSIMPLEPROPERTYTEMPLATE('0oqGQ8yhb8ShnhD0hrOxTd',$,'WorkingPressure','The normally expected maximum working pressure of the valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1542,$,$,.READWRITE.);
-#1542=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1543=IFCSIMPLEPROPERTYTEMPLATE('0M2g9Zf4z27Rwc$pzGiUE2',$,'FlowCoefficient','Flow coefficient (the quantity of fluid that passes through a fully open valve at unit pressure drop), typically expressed as the Kv or Cv value for the valve.',.P_SINGLEVALUE.,'IfcReal',$,$,#1544,$,$,.READWRITE.);
-#1544=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#1545=IFCSIMPLEPROPERTYTEMPLATE('1cxcI9OaT2pBhi02OmSbJI',$,'CloseOffRating','Close off rating.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1546,$,$,.READWRITE.);
-#1546=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1547=IFCPROPERTYSETTEMPLATE('3Ee$iTYkXBGw6I_LvsKSjT',$,'Pset_ValveTypeDrawOffCock','Definition from BS6100 250 6223: A small diameter valve, used to drain water from a cistern or water filled system.',$,'IfcValveType',(#1548));
-#1548=IFCSIMPLEPROPERTYTEMPLATE('1NRXxLHFTBJQZ2nlTfGV2C',$,'HasHoseUnion','Indicates whether the drawoff cock is fitted with a hose union connection (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1549=IFCPROPERTYSETTEMPLATE('1sPMXqcdj3SAbI6Itv0uP6',$,'Pset_ValveTypeFaucet','Definition from BS6100: A small diameter valve, with a free outlet, from which water is drawn.',$,'IfcValveType',(#1550,#1552,#1554,#1556,#1557));
-#1550=IFCSIMPLEPROPERTYTEMPLATE('18G6p_r39DnRLRU47GhAdD',$,'FaucetType','Defines the range of faucet types that may be specified where:\X2\000A000A\X0\Bib =\X2\0009\X0\ Faucet with a horizontal inlet and a nozzle that discharges downwards.\X2\000A\X0\Globe =\X2\0009\X0\ Faucet fitted through the end of a bath, with a horizontal inlet, a partially spherical body and a vertical nozzle.\X2\000A\X0\Diverter =\X2\0009\X0\Combination faucet assembly with a valve to enable the flow of mixed water to be transferred to a showerhead.\X2\000A\X0\DividedFlowCombination =\X2\0009\X0\ Combination faucet assembly in which hot and cold water are kept separate until emerging from a common nozzle\X2\000A\X0\Pillar =\X2\0009\X0\ Faucet that has a vertical inlet and a nozzle that discharges downwards\X2\000A\X0\SingleOutletCombination =\X2\0009\X0\ Combination faucet assembly in which hot and cold water mix before emerging from a common nozzle\X2\000A\X0\Spray =\X2\0009\X0\ Faucet with a spray outlet\X2\000A\X0\SprayMixing =\X2\0009\X0\ Spray faucet connected to hot and cold water supplies that delivers water at a temperature determined during use.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1551,$,$,$,.READWRITE.);
-#1551=IFCPROPERTYENUMERATION('PEnum_FaucetType',(IFCLABEL('BIB'),IFCLABEL('GLOBE'),IFCLABEL('DIVERTER'),IFCLABEL('DIVIDEDFLOWCOMBINATION'),IFCLABEL('PILLAR'),IFCLABEL('SINGLEOUTLETCOMBINATION'),IFCLABEL('SPRAY'),IFCLABEL('SPRAYMIXING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1552=IFCSIMPLEPROPERTYTEMPLATE('0Uloew$K916BnvBMWoK0Y7',$,'FaucetOperation','Defines the range of ways in which a faucet can be operated that may be specified where:\X2\000A000A\X0\CeramicDisc =\X2\0009\X0\ Quick action faucet with a ceramic seal to open or close the orifice\X2\000A\X0\LeverHandle =\X2\0009\X0\ Quick action faucet that is operated by a lever handle\X2\000A\X0\NonConcussiveSelfClosing =\X2\0009\X0\ Self closing faucet that does not induce surge pressure\X2\000A\X0\QuarterTurn =\X2\0009\X0\ Quick action faucet that can be fully opened or shut by turning the operating mechanism through 90 degrees.\X2\000A\X0\QuickAction =\X2\0009\X0\ Faucet that can be opened or closed fully with a single small movement of the operating mechanism\X2\000A\X0\ScrewDown =\X2\0009\X0\ Faucet in which a plate or disc is moved, by the rotation of a screwed spindle, to close or open the orifice.\X2\000A\X0\SelfClosing =\X2\0009\X0\ Faucet that is opened by pressure of the top of an operating spindle and is closed under the action of a spring or weight when the pressure is released\X2\000A\X0\TimedSelfClosing = \X2\0009\X0\Self closing faucet that discharges for a predetermined period of time\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1553,$,$,$,.READWRITE.);
-#1553=IFCPROPERTYENUMERATION('PEnum_FaucetOperation',(IFCLABEL('CERAMICDISC'),IFCLABEL('LEVERHANDLE'),IFCLABEL('NONCONCUSSIVESELFCLOSING'),IFCLABEL('QUATERTURN'),IFCLABEL('QUICKACTION'),IFCLABEL('SCREWDOWN'),IFCLABEL('SELFCLOSING'),IFCLABEL('TIMEDSELFCLOSING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1554=IFCSIMPLEPROPERTYTEMPLATE('2z_iYxye59sBnz0cFXG4IF',$,'FaucetFunction','Defines the operating temperature of a faucet that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1555,$,$,$,.READWRITE.);
-#1555=IFCPROPERTYENUMERATION('PEnum_FaucetFunction',(IFCLABEL('COLD'),IFCLABEL('HOT'),IFCLABEL('MIXED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1556=IFCSIMPLEPROPERTYTEMPLATE('3Z7MWqp996xRMEi95uS4r$',$,'Finish','Description of the finish applied to the faucet',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1557=IFCSIMPLEPROPERTYTEMPLATE('1NTK2fDwXC0xN7DwEaLlfM',$,'FaucetTopDescription','Description of the operating mechanism/top of the faucet',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1558=IFCPROPERTYSETTEMPLATE('02HcG3_z10qhl2DJfbcF8r',$,'Pset_ValveTypeFlushing','Definition from IAI: Valve that flushes a predetermined quantity of water to cleanse a WC, urinal or slop hopper.\X2\000A\X0\Note that a flushing valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1559,#1561,#1562));
-#1559=IFCSIMPLEPROPERTYTEMPLATE('25VmWtM6jAuAPPe0tO4$Ng',$,'FlushingRate','The predetermined quantity of water to be flushed',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1560,$,$,.READWRITE.);
-#1560=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1561=IFCSIMPLEPROPERTYTEMPLATE('36YB0eUfj0Exzbj2khQCH3',$,'HasIntegralShutOffDevice','Indication of whether the flushing valve has an integral shut off device fitted (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1562=IFCSIMPLEPROPERTYTEMPLATE('3NeWdt0Ef9sQLNry4AQsv1',$,'IsHighPressure','Indication of whether the flushing valve is suitable for use on a high pressure water main (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1563=IFCPROPERTYSETTEMPLATE('1IqhXpTCDDZAtvVwG$k6AY',$,'Pset_ValveTypeGasTap','Definition from IAI: A small diameter valve, used to discharge gas from a system.',$,'IfcValveType',(#1564));
-#1564=IFCSIMPLEPROPERTYTEMPLATE('13wzKLQ1f9oxtWm5Dq5i7T',$,'HasHoseUnion','Indicates whether the gas tap is fitted with a hose union connection (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1565=IFCPROPERTYSETTEMPLATE('1fGvaeDw55_8wqRzhYMjvb',$,'Pset_ValveTypeIsolating','Definition from IAI: Valve that is used to isolate system components.\X2\000A\X0\Note that an isolating valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1566,#1567));
-#1566=IFCSIMPLEPROPERTYTEMPLATE('2WMG3C8wz9$v2OxuUsFpS7',$,'IsNormallyOpen','If TRUE, the valve is normally open. If FALSE is is normally closed. ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#1567=IFCSIMPLEPROPERTYTEMPLATE('2fpzWLt5TDHAG8NEZM_kFr',$,'IsolatingPurpose','Defines the purpose for which the isolating valve is used since the way in which the valve is identified as an isolating valve may be in the context of its use. Note that unless there is a contextual name for the isolating valve (as in the case of a Landing Valve on a rising fire main), then the value assigned shoulkd be UNSET',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1568,$,$,$,.READWRITE.);
-#1568=IFCPROPERTYENUMERATION('PEnum_IsolatingPurpose',(IFCLABEL('LANDING'),IFCLABEL('LANDINGWITHPRESSUREREGULATION'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1569=IFCPROPERTYSETTEMPLATE('26QxnBwjP33PqfjMXlR$SX',$,'Pset_ValveTypeMixing','Definition from IAI: A valve where typically the temperature of the outlet is determined by mixing hot and cold water inlet flows.',$,'IfcValveType',(#1570,#1572));
-#1570=IFCSIMPLEPROPERTYTEMPLATE('2$83MmV5jDXgHYS796Tn7D',$,'MixerControl','Defines the form of control of the mixing valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1571,$,$,$,.READWRITE.);
-#1571=IFCPROPERTYENUMERATION('PEnum_MixingValveControl',(IFCLABEL('MANUAL'),IFCLABEL('PREDEFINED'),IFCLABEL('THERMOSTATIC'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#1572=IFCSIMPLEPROPERTYTEMPLATE('1kPjnEFonEbhe5uSNtsj95',$,'OutletConnectionSize','The size of the pipework connection from the mixing valve.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1573,$,$,.READWRITE.);
-#1573=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1574=IFCPROPERTYSETTEMPLATE('1QDOt9sdDE2RS3cNJ5L52j',$,'Pset_ValveTypePressureReducing','Definition from IAI: Valve that reduces the pressure of a fluid immediately downstream of its position in a pipeline to a preselected value or by a predetermined ratio.\X2\000A\X0\Note that a pressure reducing valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1575,#1577));
-#1575=IFCSIMPLEPROPERTYTEMPLATE('3jcMnYzWL7oBKfyh4rJwmo',$,'UpstreamPressure','The operating pressure of the fluid upstream of the pressure reducing valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1576,$,$,.READWRITE.);
-#1576=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1577=IFCSIMPLEPROPERTYTEMPLATE('3JGv8pH7j6dBVdjZqLQQ_h',$,'DownstreamPressure','The operating pressure of the fluid downstream of the pressure reducing valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1578,$,$,.READWRITE.);
-#1578=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1579=IFCPROPERTYSETTEMPLATE('38mMfCWLL8g9yAyXw2nATw',$,'Pset_ValveTypePressureRelief','Definition from IAI: Spring or weight loaded valve that automatically discharges to a safe place fluid that has built up to excessive pressure in pipes or fittings.\X2\000A\X0\Note that a pressure relief valve is constrained to have a single port pattern.\X2\000A\X0\',$,'IfcValveType',(#1580));
-#1580=IFCSIMPLEPROPERTYTEMPLATE('3uZjL4ZYv9deJ8HFfjjWBZ',$,'ReliefPressure','The pressure at which the spring or weight in the valve is set to discharge fluid',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1581,$,$,.READWRITE.);
-#1581=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1582=IFCPROPERTYSETTEMPLATE('1rdQnK6054WeP14NcxesqP',$,'Pset_VibrationIsolatorTypeCommon','Definition from IAI: Vibration isolator type common attributes.\X2\000A\X0\',$,'IfcVibrationIsolatorType',(#1583,#1584,#1586,#1587,#1589,#1590));
-#1583=IFCSIMPLEPROPERTYTEMPLATE('0vTx61hzv8ZvWd6pH6pAv2',$,'VibrationTransmissibility','The vibration transmissibility percentage.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#1584=IFCSIMPLEPROPERTYTEMPLATE('0Di5MutYv02QUimtIh5_a9',$,'IsolatorStaticDeflection','Static deflection of the vibration isolator.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1585,$,$,.READWRITE.);
-#1585=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1586=IFCSIMPLEPROPERTYTEMPLATE('2ZxN4hWlnB1eM3GKddGsHN',$,'IsolatorCompressibility','The compressibility of the vibration isolator.',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
-#1587=IFCSIMPLEPROPERTYTEMPLATE('1eKJT6j9fFkQfJI5YXyN1u',$,'Height','Height of the vibration isolator before tha application of load. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1588,$,$,.READWRITE.);
-#1588=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1589=IFCSIMPLEPROPERTYTEMPLATE('0_sBIAvAb1nehsYrsW1hKr',$,'Material','Material from which the damping element of the vibration isolator is constructed. ',.P_REFERENCEVALUE.,'IfcMaterial ',$,$,$,$,$,.READWRITE.);
-#1590=IFCSIMPLEPROPERTYTEMPLATE('1D8wXl9rvBYeQZfvPYHKXe',$,'MaximumSupportedWeight','The maximum weight that can be carried by the vibration isolator. ',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#1591,$,$,.READWRITE.);
-#1591=IFCNAMEDUNIT($,.MASSUNIT.);
-#1592=IFCPROPERTYSETTEMPLATE('28U16ZEkjAYR$x6zPMLF_s',$,'Pset_ActorCommon','Definition from IAI: A property set that enables further classification of actors, including the ability to give a number of actors to be designated as a population, the number being specified as a property to be dealt with as a single value rather than having to aggregate a number of instances of IfcActor.',$,'IfcActor',(#1593,#1594,#1595));
-#1593=IFCSIMPLEPROPERTYTEMPLATE('2sozSofNL2g8FkoQfNJjmW',$,'NumberOfActors','The number of actors that are to be dealt with together in the population.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#1594=IFCSIMPLEPROPERTYTEMPLATE('3Ml33ZMoPFBwdb7zfFYkdR',$,'Category','Designation of the category into which the actors in the population belong.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1595=IFCSIMPLEPROPERTYTEMPLATE('2vVt$SsqzESwmN_BQp6YNp',$,'SkillLevel','Skill level exhibited by the actor and which indicates an extent of their capability to perform actions on the artefacts upon which they can act.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1596=IFCPROPERTYSETTEMPLATE('2PcW5FpxzBoP5uy_LL44M8',$,'Pset_ProductRequirements','Definition from IAI: Categorization of the required properties of an entity that are used to determine what the level of the requirement is, to enable its performance/quality to be determined, assessed, or measured, and compared against the requirement, and then to analyze whether the entity is suitable for use within a given context..',$,'IfcProduct',(#1597,#1598,#1599,#1600,#1601,#1602,#1603,#1604,#1605,#1606));
-#1597=IFCSIMPLEPROPERTYTEMPLATE('0IjboiPvP7HhWHzH2yW3Qh',$,'Name','Subject matter for which a value is to be reported.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1598=IFCSIMPLEPROPERTYTEMPLATE('278Jaz3$98R9hqpDY3aOv2',$,'Category','A reference to a classification of the degree of aggregation or granularity of topic data such as regional, local etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1599=IFCSIMPLEPROPERTYTEMPLATE('3vRllQ6tv1uhJjUaZSAuYz',$,'GroupName','Name of grouping of topics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1600=IFCSIMPLEPROPERTYTEMPLATE('1AZxtZ1Tv1iR02Ag1CMmPc',$,'Classification','A reference to a classification of the topic',.P_REFERENCEVALUE.,'IfcClassificationReference',$,$,$,$,$,.READWRITE.);
-#1601=IFCSIMPLEPROPERTYTEMPLATE('2WN9MgsIDEdOCYgFmfy57q',$,'DemandValue','Value of the subject matter as determined using an agreed scale for what is required.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1602=IFCSIMPLEPROPERTYTEMPLATE('07EpTWd5TFZe7T8jWb9obt',$,'DemandThresholdValue','Value of the subject matter above or below which a special significance is attached.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1603=IFCSIMPLEPROPERTYTEMPLATE('2rEPDB8Mb1ZR12MQ4CusJg',$,'DemandImportanceValue','Importance of the topic relative to the importance of other topics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1604=IFCSIMPLEPROPERTYTEMPLATE('2oyARmmPn0Gw73acK2D$JD',$,'SupplyEvaluationValue','Value of the subject matter as determined using an agreed scale for what is provided, or capable of being provided.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1605=IFCSIMPLEPROPERTYTEMPLATE('2Wrm8l8_DB0ujy71JSKsHz',$,'GapValue','Difference determined between the topic demand value and the topic supply evaluation value.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1606=IFCSIMPLEPROPERTYTEMPLATE('06iBpRDvn5qPctHXGQa8uG',$,'GapValueWeighted','Difference determined between the topic demand value and the topic supply evaluation value, weighted for topic demand importance value.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1607=IFCPROPERTYSETTEMPLATE('3X1aMBywTCaOliTGNADLk4',$,'Pset_ProjectCommon','Definition from IAI: Common properties for a building project.',$,'IfcProject',(#1608,#1609,#1610));
-#1608=IFCSIMPLEPROPERTYTEMPLATE('0PK2YEwH17Mf_YVnLzQBt_',$,'ConstructionMode','The type of construction action the project deals with, e.g. new construction, renovation, refurbishment, etc. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1609=IFCSIMPLEPROPERTYTEMPLATE('1v1jJXshr8wRggJ6yvW6hu',$,'BuildingPermitId','The building permit identifier for the written authorization required by building authorities before construction on a specific project can begin.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#1610=IFCSIMPLEPROPERTYTEMPLATE('0fgdxJBL1CNhCMaJb$Ai7a',$,'GrossAreaPlanned','Total planned area for the project. Used for programming the project',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1611,$,$,.READWRITE.);
-#1611=IFCNAMEDUNIT($,.AREAUNIT.);
-#1612=IFCPROPERTYSETTEMPLATE('2h4FamaWX5xAtKUgyfvuwF',$,'Pset_DesignPoint','Definition from IAI: A point of connection taken as a reference for hydraulic calculations in sprinkler systems. The point is assigned to an instance of IfcDistributionPort and located according to circumstances as set out by local building codes. For instance, it may be either the last elbow, tee or branch downstream of which a sprinkler array is located (where ranges are directly connected to the distribution pipe without risers or drops) or the point of connection of the riser or drop nearest the installation valves in the sprinkler array (where ranges are connected to the distribution pipe with risers or drops). Other circumstances may be referenced in local codes and the assignment of the design point must be established by a user.\X2\000A\X0\',$,'IfcDistributionPort',(#1613));
-#1613=IFCSIMPLEPROPERTYTEMPLATE('3srobREHH5HAr4d0nh3wry',$,'IsDesignPoint','Indicates whether an instance of IfcDistributionPort is to act as the design point for sprinkler hydraulic calculation (set TRUE) or not (either set FALSE or assumed to be FALSE where an instance of the property set is not assigned to an instance of IfcDistributionPort). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1614=IFCPROPERTYSETTEMPLATE('1go8atz5zEF8UimS4eMjYl',$,'Pset_DrainageCatchment','Definition from IAI: Area of land that drains naturally to a given point (BS6100 modified). Used as a non type driven property set in conjunction with an appropriate instance of IfcSpatialStructureElement that is identified as a catchment using the inherited IfcRoot.Name attribute. Catchments may be nested using IfcRelNests so that subcatchment areas (as component parts of a catchment area) can be identified. A catchment area will be geometrically defined by a closed loop (closed polyline or polyloop)\X2\000A\X0\Note also that the boundary between catchment areas (watershed) is not currently identified.\X2\000A\X0\',$,'IfcSite',(#1615));
-#1615=IFCSIMPLEPROPERTYTEMPLATE('0Yzc7MCEX8vPD9VnY5xCP7',$,'AreaDrained','The area measure enclosed within the catchment',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1616,$,$,.READWRITE.);
-#1616=IFCNAMEDUNIT($,.AREAUNIT.);
-#1617=IFCPROPERTYSETTEMPLATE('10xHw67CL8jfcHUdoghzsn',$,'Pset_DrainageCulvert','Definition from IAI: Covered channel or large pipe that forms a watercourse below ground level, usually under a road or railway (BS6100). Used as a non type driven property set in conjunction with an instance of IfcSystem that is classified as a culvert.\X2\000A\X0\',$,'IfcSystem',(#1618,#1620));
-#1618=IFCSIMPLEPROPERTYTEMPLATE('1RYnIr1Vz0D9kakfzAXqoW',$,'InternalWidth','The internal width of the culvert',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1619,$,$,.READWRITE.);
-#1619=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1620=IFCSIMPLEPROPERTYTEMPLATE('0_tXWnMADAJQg$OUTOS6gw',$,'ClearDepth','The clear depth of the culvert',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1621,$,$,.READWRITE.);
-#1621=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1622=IFCPROPERTYSETTEMPLATE('0ub1ZizLX9KAh9pyaBfNmy',$,'Pset_DrainageOutfall','Definition from IAI: Structure through which water is discharged into a watercourse or body of water (BS6100). Used as a non type driven property set in conjunction with an instance of IfcProxy that is identified as an outfall using the inherited IfcRoot.Name attribute.\X2\000A\X0\',$,'IfcProxy',(#1623));
-#1623=IFCSIMPLEPROPERTYTEMPLATE('0YhBjS9mb7bP3pYwn4VMA0',$,'InvertLevel','The lowest point of the outfall',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1624,$,$,.READWRITE.);
-#1624=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1625=IFCPROPERTYSETTEMPLATE('01jeJLK3T7FOVl6xoic98s',$,'Pset_DrainageReserve','Definition from IAI: Area exclusively reserved for the routing of drainage services. Used as a non type driven property set in conjunction with an appropriate instance of IfcSpatialStructureElement that is identified as a drainage reserve using the inherited IfcRoot.Name attribute.\X2\000A\X0\',$,'IfcSite',(#1626));
-#1626=IFCSIMPLEPROPERTYTEMPLATE('2JJsVV_b92OP9RhUHwqu_V',$,'Width','The width of the drainage reserve',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#1627,$,$,.READWRITE.);
-#1627=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1628=IFCPROPERTYSETTEMPLATE('32lJz$aTT1HPL$dE$M9sry',$,'Pset_FireSuppressionTerminalTypeBreechingInlet','Definition from IAI: Symmetrical pipe fitting that unites two or more inlets into a single pipe (BS6100 330 114 adapted).',$,'IfcFireSuppressionTerminalType',(#1629,#1631,#1633,#1635,#1637,#1638));
-#1629=IFCSIMPLEPROPERTYTEMPLATE('1bIlHlcDH94v59bk$7uzXy',$,'BreechingInletType','Defines the type of breeching inlet.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1630,$,$,$,.READWRITE.);
-#1630=IFCPROPERTYENUMERATION('PEnum_BreechingInletType',(IFCLABEL('TWOWAY'),IFCLABEL('FOURWAY'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#1631=IFCSIMPLEPROPERTYTEMPLATE('0h2LQe85vBluXO$QsXsTtS',$,'InletDiameter','The inlet diameter of the breeching inlet.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1632,$,$,.READWRITE.);
-#1632=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1633=IFCSIMPLEPROPERTYTEMPLATE('3WRoV53kLFDg75atwFbeNG',$,'OutletDiameter','The outlet diameter of the breeching inlet.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1634,$,$,.READWRITE.);
-#1634=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1635=IFCSIMPLEPROPERTYTEMPLATE('2_yCZ91eLDKPNPUYUruJLk',$,'CouplingType','Defines the type coupling on the inlet of the breeching inlet.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1636,$,$,$,.READWRITE.);
-#1636=IFCPROPERTYENUMERATION('PEnum_BreechingInletCouplingType',(IFCLABEL('INSTANTANEOUS_FEMALE'),IFCLABEL('INSTANTANEOUS_MALE'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#1637=IFCSIMPLEPROPERTYTEMPLATE('2lTQP3ioj30fxTnK$GFDga',$,'HasCaps','Does the inlet connection have protective caps.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1638=IFCSIMPLEPROPERTYTEMPLATE('2Q$E_AcoP2ufSdIal_8T$O',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1639=IFCPROPERTYSETTEMPLATE('36zIaYQHD1eO_QWQ33cEoX',$,'Pset_FireSuppressionTerminalTypeFireHydrant','Definition from IAI: Device, fitted to a pipe, through which a temporary supply of water may be provided (BS6100 330 6107)\X2\000A000A\X0\For further details on fire hydrants, see www.firehydrant.org',$,'IfcFireSuppressionTerminalType',(#1640,#1642,#1644,#1645,#1647,#1649,#1650,#1651,#1653,#1654));
-#1640=IFCSIMPLEPROPERTYTEMPLATE('3K3zPUAmfEIxSWgjGc2B1p',$,'FireHydrantType','Defines the range of hydrant types from which the required type can be selected where:\X2\000A000A\X0\DryBarrel =\X2\0009\X0\ A hydrant that has isolating valves fitted below ground and that may be used where the possibility of water freezing is a consideration.\X2\000A\X0\WetBarrel =\X2\0009\X0\ A hydrant that has isolating valves fitted above ground and that may be used where there is no possibility of water freezing.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1641,$,$,$,.READWRITE.);
-#1641=IFCPROPERTYENUMERATION('PEnum_FireHydrantType',(IFCLABEL('DryBarrel'),IFCLABEL('WetBarrel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1642=IFCSIMPLEPROPERTYTEMPLATE('2wRmteojf4nB5lI3qZToSA',$,'PumperConnectionSize','The size of a connection to which a fire hose may be connected that is then linked to a pumping unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1643,$,$,.READWRITE.);
-#1643=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1644=IFCSIMPLEPROPERTYTEMPLATE('3yd_ybYOP5hgc9RCv0qusY',$,'NumberOfHoseConnections','The number of hose connections on the hydrant (excluding the pumper connection)',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#1645=IFCSIMPLEPROPERTYTEMPLATE('07PJyxKnD7hPdJA9Chph4d',$,'HoseConnectionSize','The size of connections to which a hose may be connected (other than that to be linked to a pumping unit).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1646,$,$,.READWRITE.);
-#1646=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1647=IFCSIMPLEPROPERTYTEMPLATE('1g6_Rx5dXDf8U9t1EViI_Z',$,'DischargeFlowRate','The volumetric rate of fluid discharge.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1648,$,$,.READWRITE.);
-#1648=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1649=IFCSIMPLEPROPERTYTEMPLATE('3qlq8KjFX6jAzXUFyCmOyU',$,'FlowClass','Alphanumeric indication of the flow class of a hydrant (may be used in connection with or instead of the FlowRate property)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1650=IFCSIMPLEPROPERTYTEMPLATE('2VKSiWebDDUgkKYJDMrLQD',$,'WaterIsPotable','Indication of whether the water flow from the hydrant is potable (set TRUE) or non potable (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1651=IFCSIMPLEPROPERTYTEMPLATE('2wJKYauu11HxfpNc$O0u22',$,'PressureRating','Maximum pressure that the hydrant is manufactured to withstand.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1652,$,$,.READWRITE.);
-#1652=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1653=IFCSIMPLEPROPERTYTEMPLATE('3mrfLCh3PDQut07z2F8tSV',$,'BodyColor','Color of the body of the hydrant.\X2\000A000A\X0\Note: Consult local fire regulations for statutory colors that may be required for hydrant bodies in particular circumstances.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1654=IFCSIMPLEPROPERTYTEMPLATE('3KcBVWb6f1OfSqUQw0T91O',$,'CapColor','Color of the caps of the hydrant.\X2\000A000A\X0\Note: Consult local fire regulations for statutory colors that may be required for hydrant caps in particular circumstances.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1655=IFCPROPERTYSETTEMPLATE('0E9YgU$7vFAwwKRF5Arls$',$,'Pset_FireSuppressionTerminalTypeHoseReel','Definition from IAI: A supporting framework on which a hose may be wound (BS6100 155 8201).\X2\000A000A\X0\Note that the service provided by the hose (water/foam) is determined by the context of the system onto which the hose reel is connected.',$,'IfcFireSuppressionTerminalType',(#1656,#1658,#1660,#1662,#1664,#1666,#1668,#1669));
-#1656=IFCSIMPLEPROPERTYTEMPLATE('3x6ZdwJ_nCfRnOslV7qi5P',$,'HoseReelType','Identifies the predefined types of hose arrangement from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1657,$,$,$,.READWRITE.);
-#1657=IFCPROPERTYENUMERATION('PEnum_HoseReelType',(IFCLABEL('Rack'),IFCLABEL('Reel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1658=IFCSIMPLEPROPERTYTEMPLATE('1R5lHwRzP3dvbMUjNlRDZ0',$,'HoseReelMountingType','Identifies the predefined types of hose reel mounting from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1659,$,$,$,.READWRITE.);
-#1659=IFCPROPERTYENUMERATION('PEnum_HoseReelMountingType',(IFCLABEL('Cabinet_Recessed'),IFCLABEL('Cabinet_SemiRecessed'),IFCLABEL('Surface'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1660=IFCSIMPLEPROPERTYTEMPLATE('2aiA_nJVfCWfbDVQDN9nRH',$,'InletConnectionSize','Size of the inlet connection to the hose reel.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1661,$,$,.READWRITE.);
-#1661=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1662=IFCSIMPLEPROPERTYTEMPLATE('33VjeoK0fDGuJhuob6eY$3',$,'HoseDiameter','Notional diameter (bore) of the hose.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1663,$,$,.READWRITE.);
-#1663=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1664=IFCSIMPLEPROPERTYTEMPLATE('1WuCDnR01D4vBAgfSJS0dL',$,'HoseLength','Notional length of the hose fitted to the hose reel when fully extended.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1665,$,$,.READWRITE.);
-#1665=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1666=IFCSIMPLEPROPERTYTEMPLATE('0c3QSJ1WzAr9OuQccpgWSY',$,'HoseNozzleType','Identifies the predefined types of nozzle (in terms of spray pattern) fitted to the end of the hose from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1667,$,$,$,.READWRITE.);
-#1667=IFCPROPERTYENUMERATION('PEnum_HoseNozzleType',(IFCLABEL('Fog'),IFCLABEL('StraightStream'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1668=IFCSIMPLEPROPERTYTEMPLATE('2sPS3k$Ff8TgY0hMAbTlpj',$,'ClassOfService','A classification of usage of the hose reel that may be applied.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1669=IFCSIMPLEPROPERTYTEMPLATE('0ieTPPOCD4FROLJZHq3eGv',$,'ClassificationAuthority','The name of the authority that applies the classification of service to the hose reel (e.g. NFPA/FEMA)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#1670=IFCPROPERTYSETTEMPLATE('1fNQRx_MH6eAGZrbi$d5Ut',$,'Pset_FireSuppressionTerminalTypeSprinkler','Definition from IAI: Device for sprinkling water from a pipe under pressure over an area (BS6100 100 3432)',$,'IfcFireSuppressionTerminalType',(#1671,#1673,#1675,#1677,#1679,#1681,#1682,#1684,#1686,#1688,#1689,#1691,#1693,#1694));
-#1671=IFCSIMPLEPROPERTYTEMPLATE('2CnYydiRX7AxtR$h5Eb54h',$,'SprinklerType','Identifies the predefined types of sprinkler from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1672,$,$,$,.READWRITE.);
-#1672=IFCPROPERTYENUMERATION('PEnum_SprinklerType',(IFCLABEL('Ceiling'),IFCLABEL('Concealed'),IFCLABEL('Cut-off'),IFCLABEL('Pendant'),IFCLABEL('RecessedPendant'),IFCLABEL('Sidewall'),IFCLABEL('Upright'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1673=IFCSIMPLEPROPERTYTEMPLATE('0a$c54Pzb5QvevSPtodtsJ',$,'Activation','Identifies the predefined methods of sprinkler activation from which that required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1674,$,$,$,.READWRITE.);
-#1674=IFCPROPERTYENUMERATION('PEnum_SprinklerActivation',(IFCLABEL('Bulb'),IFCLABEL('FusibleSolder'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1675=IFCSIMPLEPROPERTYTEMPLATE('1G0BOxD3H2fPNrrQ6SZxXL',$,'Response','Identifies the predefined methods of sprinkler response from which that required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1676,$,$,$,.READWRITE.);
-#1676=IFCPROPERTYENUMERATION('PEnum_SprinklerResponse',(IFCLABEL('Quick'),IFCLABEL('Standard')),$);
-#1677=IFCSIMPLEPROPERTYTEMPLATE('35DDGBNi14bwZLTsfD5Y1n',$,'ActivationTemperature','The temperature at which the object is designed to activate.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,#1678,$,$,.READWRITE.);
-#1678=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#1679=IFCSIMPLEPROPERTYTEMPLATE('23orSjsznBuBhmrH_Ua$a5',$,'CoverageArea','The area that the sprinkler is designed to protect.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#1680,$,$,.READWRITE.);
-#1680=IFCNAMEDUNIT($,.AREAUNIT.);
-#1681=IFCSIMPLEPROPERTYTEMPLATE('3l9rG7Qj15zOnQmSu1G47D',$,'HasDeflector','Indication of whether the sprinkler has a deflector (baffle) fitted to diffuse the discharge on activation (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1682=IFCSIMPLEPROPERTYTEMPLATE('1rJex3TqL9HBOcAuZFDDxx',$,'BulbLiquidColor','The color of the liquid in the bulb for a bulb activated sprinkler. Note that the liquid color varies according to the activation temperature requirement of the sprinkler head. Note also that this property does not need to be asserted for quick response activated sprinklers.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1683,$,$,$,.READWRITE.);
-#1683=IFCPROPERTYENUMERATION('PEnum_SprinklerBulbLiquidColor',(IFCLABEL('Orange'),IFCLABEL('Red'),IFCLABEL('Yellow'),IFCLABEL('Green'),IFCLABEL('Blue'),IFCLABEL('Mauve'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1684=IFCSIMPLEPROPERTYTEMPLATE('35HFgHCCX3ivd44XxCC8pa',$,'DischargeFlowRate','The volumetric rate of fluid discharge.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#1685,$,$,.READWRITE.);
-#1685=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#1686=IFCSIMPLEPROPERTYTEMPLATE('1ynAAokhvC0vPJn7pxwLvN',$,'ResidualFlowingPressure','The residual flowing pressure in the pipeline at which the discharge flow rate is determined.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1687,$,$,.READWRITE.);
-#1687=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1688=IFCSIMPLEPROPERTYTEMPLATE('1F7O4q2jvC3P7pG3wxa2nJ',$,'DischargeCoefficient','The coefficient of flow at the sprinkler',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
-#1689=IFCSIMPLEPROPERTYTEMPLATE('3GEsURUPT9x9zd3oVD7hgV',$,'MaximumWorkingPressure','Maximum pressure that the object is manufactured to withstand.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,#1690,$,$,.READWRITE.);
-#1690=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#1691=IFCSIMPLEPROPERTYTEMPLATE('1to5UV0cfExPVN6qtVXTkM',$,'ConnectionSize','Size of the inlet connection to the sprinkler.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1692,$,$,.READWRITE.);
-#1692=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1693=IFCSIMPLEPROPERTYTEMPLATE('3FOdv9B116GP73_TGXzVIR',$,'FrameMaterial','The material used to construct the frame of the sprinkler.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1694=IFCSIMPLEPROPERTYTEMPLATE('2rX2wcviHA8xwkg2cixmDm',$,'DeflectorMaterial','The material used to construct the deflector plate.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1695=IFCPROPERTYSETTEMPLATE('2uIgzfonLE$hxMiMceG0Gs',$,'Pset_SanitaryTerminalTypeBath','Definition from IAI: Sanitary appliance for immersion of the human body or parts of it (BS6100).',$,'IfcSanitaryTerminalType',(#1696,#1698,#1700,#1702,#1704,#1705,#1707,#1708,#1710));
-#1696=IFCSIMPLEPROPERTYTEMPLATE('2hWoPjBM59WPKu5_l$nZry',$,'BathType','The property enumeration defines the types of bath that may be specified within the property set where:\X2\000A000A\X0\Domestic =\X2\0009\X0\Bath, for one person at a time, into which the whole body can be easily immersed.\X2\000A\X0\DomesticCorner =\X2\0009\X0\Bath, for one person at a time, into which the whole body can be easily immersed and in which the immersion trough is at an angle.\X2\000A\X0\Foot =\X2\0009\X0\Shallow bath for washing the feet.\X2\000A\X0\Jacuzzi =\X2\0009\X0\Whirlpool bath for more than one person\X2\000A\X0\Plunge =\X2\0009\X0\Bath, usually for more than one person at a time, into which the whole body can be easily immersed.\X2\000A\X0\Sitz =\X2\0009\X0\Bath in which a bather sits as in a chair.\X2\000A\X0\Treatment =\X2\0009\X0\Bath used for hydrotherapy purposes.\X2\000A\X0\Whirlpool =\X2\0009\X0\Bath in which an integrated device agitates the water by pumped circulation or induction of water and/or air.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1697,$,$,$,.READWRITE.);
-#1697=IFCPROPERTYENUMERATION('PEnum_BathType',(IFCLABEL('Domestic'),IFCLABEL('DomesticCorner'),IFCLABEL('Foot'),IFCLABEL('Jacuzzi'),IFCLABEL('Plunge'),IFCLABEL('Sitz'),IFCLABEL('Treatment'),IFCLABEL('Whirlpool'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#1698=IFCSIMPLEPROPERTYTEMPLATE('2QkBKrksz2awZS2F8Zv8sh',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1699,$,$,.READWRITE.);
-#1699=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1700=IFCSIMPLEPROPERTYTEMPLATE('2iBIJhohnFV92BxYK7qSFt',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1701,$,$,.READWRITE.);
-#1701=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1702=IFCSIMPLEPROPERTYTEMPLATE('2tVy2YycrDKOICEImWDoEZ',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1703,$,$,.READWRITE.);
-#1703=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1704=IFCSIMPLEPROPERTYTEMPLATE('0fMb8s$0D1qg0DXuyWBljX',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1705=IFCSIMPLEPROPERTYTEMPLATE('1RfAqBEwzF2wuQcba1yeda',$,'MaterialThickness','Thickness of the material from which the object is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1706,$,$,.READWRITE.);
-#1706=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1707=IFCSIMPLEPROPERTYTEMPLATE('2FbFpW_UTAp9JRTM5CbK26',$,'Color','Principal color of the object.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1708=IFCSIMPLEPROPERTYTEMPLATE('3AZbO52mnEvQm2OpYqNNwD',$,'DrainSize','The size of the drain outlet connection from the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1709,$,$,.READWRITE.);
-#1709=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1710=IFCSIMPLEPROPERTYTEMPLATE('3cloN6ltHFMe6dxRdJr6gH',$,'HasGrabHandles','Indicates whether the bath is fitted with handles that provide assistance to a bather in entering or leaving the bath',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1711=IFCPROPERTYSETTEMPLATE('1LiYyCouLD3RNnUax3oM6a',$,'Pset_SanitaryTerminalTypeBidet','Definition from IAI: Waste water appliance for washing the excretory organs while sitting astride the bowl (BS6100)',$,'IfcSanitaryTerminalType',(#1712,#1714,#1716,#1718,#1720,#1721,#1722,#1724));
-#1712=IFCSIMPLEPROPERTYTEMPLATE('3jzisE9qv0yfurLT9dToJK',$,'BidetMounting','The property enumeration Pset_SanitaryMountingEnum defines the forms of mounting or fixing of the sanitary terminal that may be specified within property sets used to define sanitary terminals (WC\X2\2019\X0\s, basins, sinks, etc.) where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1713,$,$,$,.READWRITE.);
-#1713=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1714=IFCSIMPLEPROPERTYTEMPLATE('30I6eHnMP9rRG8V_DSxCjB',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1715,$,$,.READWRITE.);
-#1715=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1716=IFCSIMPLEPROPERTYTEMPLATE('3PSq8wBgb80QXPSj2Gn289',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1717,$,$,.READWRITE.);
-#1717=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1718=IFCSIMPLEPROPERTYTEMPLATE('04xQWtptbFOw3Z5L32W1sq',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1719,$,$,.READWRITE.);
-#1719=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1720=IFCSIMPLEPROPERTYTEMPLATE('3q3iigjEX6vAe0_waqyaEE',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1721=IFCSIMPLEPROPERTYTEMPLATE('3ZCsa0s0T5nB_ZogSB$USF',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1722=IFCSIMPLEPROPERTYTEMPLATE('2AIQltRH91Lx9aL4QDQvRV',$,'SpilloverLevel','The level at which water spills out of the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1723,$,$,.READWRITE.);
-#1723=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1724=IFCSIMPLEPROPERTYTEMPLATE('2yLREwPcf8Q96whCsDTM9L',$,'DrainSize','The size of the drain outlet connection from the object ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1725,$,$,.READWRITE.);
-#1725=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1726=IFCPROPERTYSETTEMPLATE('3rpjQOldrABP9yAl0vzETW',$,'Pset_SanitaryTerminalTypeCistern','Definition from IAI: A water storage unit attached to a sanitary terminal that is fitted with a device, operated automatically or by the user, that discharges water to cleanse a water closet (toilet) pan, urinal or slop hopper. (BS6100 330 5008)',$,'IfcSanitaryTerminalType',(#1727,#1729,#1731,#1732,#1734,#1736,#1737,#1738));
-#1727=IFCSIMPLEPROPERTYTEMPLATE('3JYe1GdMH9D8MltTRQj_Hf',$,'CisternHeight','Enumeration that identifies the height of the cistern or, if set to ''None'' if the urinal has no cistern and is flushed using mains or high pressure water through a flushing valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1728,$,$,$,.READWRITE.);
-#1728=IFCPROPERTYENUMERATION('PEnum_CisternHeight',(IFCLABEL('HighLevel'),IFCLABEL('LowLevel'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1729=IFCSIMPLEPROPERTYTEMPLATE('171rhoSAr71gxiptywzj91',$,'CisternCapacity','Volumetric capacity of the cistern',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#1730,$,$,.READWRITE.);
-#1730=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1731=IFCSIMPLEPROPERTYTEMPLATE('05nuKXtJr99vECpS2bRfnd',$,'IsSingleFlush','Indicates whether the cistern is single flush = TRUE (i.e. the same amount of water is used for each and every flush) or dual flush = FALSE (i.e. the amount of water used for a flush may be selected by the user to be high or low depending on the waste material to be removed)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1732=IFCSIMPLEPROPERTYTEMPLATE('2_ah_5ASf2iPQzGHh6c1rI',$,'FlushType','The property enumeration Pset_FlushTypeEnum defines the types of flushing mechanism that may be specified for cisterns and sanitary terminals where:-\X2\000A000A\X0\Lever =\X2\0009\X0\Flushing is achieved by twisting a lever that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Pull =\X2\0009\X0\Flushing is achieved by pulling a handle or knob vertically upwards that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Push =\X2\0009\X0\Flushing is achieved by pushing a button or plate that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Sensor = Flush is activated through an automatic sensing mechanism.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1733,$,$,$,.READWRITE.);
-#1733=IFCPROPERTYENUMERATION('PEnum_FlushType',(IFCLABEL('Lever'),IFCLABEL('Pull'),IFCLABEL('Push'),IFCLABEL('Sensor'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#1734=IFCSIMPLEPROPERTYTEMPLATE('3XnhLK8L12yx0W8EI1WVbm',$,'FlushRate','The minimum and maximum volume of water used at each flush. Where a single flush is used, the value of upper bound and lower bound should be equal. For a dual flush toilet, the lower bound should be used for the lesser flush rate and the upper bound for the greater flush rate. Where flush is achieved using mains pressure water through a flush valve, the value of upper and lower bound should be equal and should be the same as the flush rate property of the flush valve (see relevant valve property set). Alternatively, in this case, do not assert the flush rate property; refer to the flush rate of the flush valve.',.P_BOUNDEDVALUE.,'IfcVolumeMeasure',$,$,#1735,$,$,.READWRITE.);
-#1735=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#1736=IFCSIMPLEPROPERTYTEMPLATE('1zVpW6fS58w8DK0a2OFOFr',$,'IsAutomaticFlush','Boolean value that determines if the cistern is flushed automatically either after each use or periodically (TRUE) or whether manual flushing is required (FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1737=IFCSIMPLEPROPERTYTEMPLATE('0wXbDD_zHCKQzmoiWZ_rHa',$,'CisternMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1738=IFCSIMPLEPROPERTYTEMPLATE('1c8WJLQwf0yhmmRCnUbvWx',$,'CisternColor','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1739=IFCPROPERTYSETTEMPLATE('3R5pcBT7n508RH8n$2TJiF',$,'Pset_SanitaryTerminalTypeSanitaryFountain','Definition from IAI: A sanitary terminal that provides a low pressure jet of water for a specific purpose (IAI).',$,'IfcSanitaryTerminalType',(#1740,#1742,#1744,#1746,#1748,#1750,#1751,#1752));
-#1740=IFCSIMPLEPROPERTYTEMPLATE('2DVXj_2BLB0QbdzmjovcGv',$,'FountainType','Selection of the type of fountain from the enumerated list of types where:-\X2\000A000A\X0\DrinkingWater =\X2\0009\X0\Sanitary appliance that provides a low pressure jet of drinking water.\X2\000A\X0\Eyewash =\X2\0009\X0\Waste water appliance, usually installed in work places where there is a risk of injury to eyes by solid particles or dangerous liquids, with which the user can wash the eyes without touching them.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1741,$,$,$,.READWRITE.);
-#1741=IFCPROPERTYENUMERATION('PEnum_FountainType',(IFCLABEL('DrinkingWater'),IFCLABEL('Eyewash'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1742=IFCSIMPLEPROPERTYTEMPLATE('082YIEI157FfvK3UKL8$za',$,'Mounting','Selection of the form of mounting of the fountain from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1743,$,$,$,.READWRITE.);
-#1743=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1744=IFCSIMPLEPROPERTYTEMPLATE('25JFzubVj1KhJi07jhHIxU',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1745,$,$,.READWRITE.);
-#1745=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1746=IFCSIMPLEPROPERTYTEMPLATE('2JqNOU6o97rxSD2oBtlVSN',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1747,$,$,.READWRITE.);
-#1747=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1748=IFCSIMPLEPROPERTYTEMPLATE('2gB1KEevP6OO2RyNQ7ebjM',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1749,$,$,.READWRITE.);
-#1749=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1750=IFCSIMPLEPROPERTYTEMPLATE('2pSGIiPs928vYgRtIdsPj5',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1751=IFCSIMPLEPROPERTYTEMPLATE('0c0h1lPU98ueRf2QvdXsyJ',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1752=IFCSIMPLEPROPERTYTEMPLATE('1Of8zLbWbDfPcfY4xFFxHi',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1753,$,$,.READWRITE.);
-#1753=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1754=IFCPROPERTYSETTEMPLATE('3IWd4baojEeeMhFSJFmQhP',$,'Pset_SanitaryTerminalTypeShower','Definition from IAI: Installation or waste water appliance that emits a spray of water to wash the human body (BS6100).',$,'IfcSanitaryTerminalType',(#1755,#1757,#1758,#1760,#1762,#1764,#1765,#1767,#1768,#1769));
-#1755=IFCSIMPLEPROPERTYTEMPLATE('2448BMoJzEVxBE_7jNfvyk',$,'ShowerType','Selection of the type of shower from the enumerated list of types where:-\X2\000A000A\X0\Drench = \X2\0009\X0\Shower that rapidly gives a thorough soaking in an emergency\X2\000A\X0\Individual =\X2\0009\X0\Shower unit that is typically enclosed and is for the use of one person at a time\X2\000A\X0\Tunnel = \X2\0009\X0\Shower that has a succession of shower heads or spreaders that operate simultaneously along its length\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1756,$,$,$,.READWRITE.);
-#1756=IFCPROPERTYENUMERATION('PEnum_ShowerType',(IFCLABEL('Drench'),IFCLABEL('Individual'),IFCLABEL('Tunnel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1757=IFCSIMPLEPROPERTYTEMPLATE('2pf0mtqXD3juI_IM2tuP6l',$,'HasTray','Indicates whether the shower has a separate receptacle that catches the water in a shower and directs it to a waste outlet.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1758=IFCSIMPLEPROPERTYTEMPLATE('0S8OOHYFXFJQITAt97jFDd',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1759,$,$,.READWRITE.);
-#1759=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1760=IFCSIMPLEPROPERTYTEMPLATE('2JiHoNJLrC5R2FI19fpdVX',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1761,$,$,.READWRITE.);
-#1761=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1762=IFCSIMPLEPROPERTYTEMPLATE('0sn5bmJeX9DPt3KQGvhhgL',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1763,$,$,.READWRITE.);
-#1763=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1764=IFCSIMPLEPROPERTYTEMPLATE('1Ubu_MwDP98goiwW_Qsn1j',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1765=IFCSIMPLEPROPERTYTEMPLATE('0bpwREfZDBjxAEBIjmUKlI',$,'MaterialThickness','Thickness of the material from which the object is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1766,$,$,.READWRITE.);
-#1766=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1767=IFCSIMPLEPROPERTYTEMPLATE('0BALp$BS9DhQ8PCF3rragT',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1768=IFCSIMPLEPROPERTYTEMPLATE('1hV4Eun_XBvwY8VuSCPsmm',$,'ShowerHeadDescription','A description of the shower head(s) that emit the spray of water',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1769=IFCSIMPLEPROPERTYTEMPLATE('0l95JYeL9BkfxIW$vBWOpL',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1770,$,$,.READWRITE.);
-#1770=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1771=IFCPROPERTYSETTEMPLATE('1vnZO5LGz01eLKEd2h9P8l',$,'Pset_SanitaryTerminalTypeSink','Definition from IAI: Waste water appliance for receiving, retaining or disposing of domestic, culinary, laboratory or industrial process liquids.',$,'IfcSanitaryTerminalType',(#1772,#1774,#1776,#1778,#1780,#1782,#1783,#1784));
-#1772=IFCSIMPLEPROPERTYTEMPLATE('0RhKzChanA8wahTcWmeu37',$,'SinkType','Selection of the type of sink from the enumerated list of types where:-\X2\000A000A\X0\Belfast = \X2\0009\X0\Deep sink that has a plain edge and a weir overflow\X2\000A\X0\.\X2\000A\X0\Bucket = \X2\0009\X0\Sink at low level, with protected front edge, that facilitates filling and emptying buckets, usually with a hinged grid on which to stand them.\X2\000A\X0\Cleaners =\X2\0009\X0\ Sink, usually fixed at normal height (900mm), with protected front edge.\X2\000A\X0\Combination_Left =\X2\0009\X0\ Sink with integral drainer on left hand side\X2\000A\X0\.\X2\000A\X0\Combination_Right =\X2\0009\X0\ Sink with integral drainer on right hand side\X2\000A\X0\.\X2\000A\X0\Combination_Double = \X2\0009\X0\Sink with integral drainer on both sides\X2\000A\X0\.\X2\000A\X0\Drip =\X2\0009\X0\ Small sink that catches drips or flow from a faucet\X2\000A\X0\.\X2\000A\X0\Laboratory =\X2\0009\X0\ Sink, of acid resisting material, with a top edge shaped to facilitate fixing to the underside of a desktop\X2\000A\X0\.\X2\000A\X0\London =\X2\0009\X0\ Deep sink that has a plain edge and no overflow\X2\000A\X0\.\X2\000A\X0\Plaster = Sink with sediment receiver to prevent waste plaster passing into drains\X2\000A\X0\.\X2\000A\X0\Pot =\X2\0009\X0\ Large metal sink, with a standing waste, for washing cooking utensils\X2\000A\X0\.\X2\000A\X0\Rinsing =\X2\0009\X0\ Metal sink in which water can be heated and culinary utensils and tableware immersed at high temperature that destroys most harmful bacteria and allows subsequent self drying.\X2\000A\X0\.\X2\000A\X0\Shelf =\X2\0009\X0\ Ceramic sink with an integral back shelf through which water fittings are mounted\X2\000A\X0\.\X2\000A\X0\VegetablePreparation =\X2\0009\X0\Large metal sink, with a standing waste, for washing and preparing vegetables\X2\000A\X0\.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1773,$,$,$,.READWRITE.);
-#1773=IFCPROPERTYENUMERATION('PEnum_SinkType',(IFCLABEL('Belfast'),IFCLABEL('Bucket'),IFCLABEL('Cleaners'),IFCLABEL('Combination_Left'),IFCLABEL('Combination_Right'),IFCLABEL('Combination_Double'),IFCLABEL('Drip'),IFCLABEL('Laboratory'),IFCLABEL('London'),IFCLABEL('Plaster'),IFCLABEL('Pot'),IFCLABEL('Rinsing'),IFCLABEL('Shelf'),IFCLABEL('VegetablePreparation'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1774=IFCSIMPLEPROPERTYTEMPLATE('0npXgU7DnDLwsKUYn3GUYU',$,'SinkMounting','Selection of the form of mounting of the sink from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1775,$,$,$,.READWRITE.);
-#1775=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1776=IFCSIMPLEPROPERTYTEMPLATE('26yz_uu7b3f8DiKzNOvBGc',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1777,$,$,.READWRITE.);
-#1777=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1778=IFCSIMPLEPROPERTYTEMPLATE('2y5W$pmoX0WPhASjgPEEtn',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1779,$,$,.READWRITE.);
-#1779=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1780=IFCSIMPLEPROPERTYTEMPLATE('2tKSgyWfTCq9Zujz_MKZve',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1781,$,$,.READWRITE.);
-#1781=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1782=IFCSIMPLEPROPERTYTEMPLATE('3golQzWwD12QHWjSsglk$3',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1783=IFCSIMPLEPROPERTYTEMPLATE('0anD2btRL2_gkZLb0hFq1u',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1784=IFCSIMPLEPROPERTYTEMPLATE('0b3fKiZUf9cu$gV6zLv147',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1785,$,$,.READWRITE.);
-#1785=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1786=IFCPROPERTYSETTEMPLATE('3x91lyMe1AT9aIOlBMx9VE',$,'Pset_SanitaryTerminalTypeToiletPan','Definition from IAI: Soil appliance for the disposal of excrement.',$,'IfcSanitaryTerminalType',(#1787,#1789,#1791,#1793,#1794,#1795,#1797,#1799,#1801));
-#1787=IFCSIMPLEPROPERTYTEMPLATE('2QEIewvUn9cuSr5QKjdhgA',$,'ToiletType','Enumeration that defines the types of toilet (water closet) arrangements that may be specified where:-\X2\000A000A\X0\BedPanWasher =\X2\0009\X0\Enclosed soil appliance in which bedpans and urinal bottles are emptied and cleansed\X2\000A\X0\Chemical =\X2\0009\X0\Portable receptacle or soil appliance that receives and retains excrement in either an integral or a separate container, in which it is chemically treated and from which it has to be emptied periodically.\X2\000A\X0\CloseCoupled =\X2\0009\X0\Toilet suite in which a flushing cistern is connected directly to the water closet pan.\X2\000A\X0\LooseCoupled =\X2\0009\X0\Toilet arrangement in which a flushing cistern is connected to the water closet pan through a flushing pipe.\X2\000A\X0\SlopHopper =\X2\0009\X0\Hopper shaped soil appliance with a flushing rim and outlet similar to those of a toilet pan, into which human excrement is emptied for disposal\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1788,$,$,$,.READWRITE.);
-#1788=IFCPROPERTYENUMERATION('PEnum_ToiletType',(IFCLABEL('BedPanWasher'),IFCLABEL('Chemical'),IFCLABEL('CloseCoupled'),IFCLABEL('LooseCoupled'),IFCLABEL('SlopHopper'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#1789=IFCSIMPLEPROPERTYTEMPLATE('0Jk3SIygz5qwm$gYtFg2xi',$,'ToiletPanType','The property enumeration Pset_ToiletPanTypeEnum defines the types of toilet pan that may be specified within the property set Pset_Toilet:-\X2\000A000A\X0\Siphonic =\X2\0009\X0\Toilet pan in which excrement is removed by siphonage induced by the flushing water.\X2\000A\X0\Squat =\X2\0009\X0\Toilet pan with an elongated bowl installed with its top edge at or near floor level, so that the user has to squat.\X2\000A\X0\WashDown =\X2\0009\X0\Toilet pan in which excrement is removed by the momentum of the flushing water.\X2\000A\X0\WashOut =\X2\0009\X0\A washdown toilet pan in which excrement falls first into a shallow water filled bowl.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1790,$,$,$,.READWRITE.);
-#1790=IFCPROPERTYENUMERATION('PEnum_ToiletPanType',(IFCLABEL('Siphonic'),IFCLABEL('Squat'),IFCLABEL('WashDown'),IFCLABEL('WashOut'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1791=IFCSIMPLEPROPERTYTEMPLATE('0aup7iXyn5vxLW76fQuiDg',$,'PanMounting','The property enumeration Pset_SanitaryMountingEnum defines the forms of mounting or fixing of the sanitary terminal that may be specified within property sets used to define sanitary terminals (WC\X2\2019\X0\s, basins, sinks, etc.) where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1792,$,$,$,.READWRITE.);
-#1792=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1793=IFCSIMPLEPROPERTYTEMPLATE('1s5BMhChb8LxL_4E4_lMpp',$,'PanMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1794=IFCSIMPLEPROPERTYTEMPLATE('17LgV6RRf91hO$F0sTPMdd',$,'PanColor','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1795=IFCSIMPLEPROPERTYTEMPLATE('26T4W8PoX7TxAAI3tDwbfp',$,'SpilloverLevel','The level at which water spills out of the terminal.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1796,$,$,.READWRITE.);
-#1796=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1797=IFCSIMPLEPROPERTYTEMPLATE('1CIiuJok16g8PE5SReKAia',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1798,$,$,.READWRITE.);
-#1798=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1799=IFCSIMPLEPROPERTYTEMPLATE('14xqn5uZv71w7FkkuXXrdE',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1800,$,$,.READWRITE.);
-#1800=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1801=IFCSIMPLEPROPERTYTEMPLATE('04A1QM6BzC$Bci4W4H9dDa',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1802,$,$,.READWRITE.);
-#1802=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1803=IFCPROPERTYSETTEMPLATE('1xmxc8xNf03gk0HsIEtc7a',$,'Pset_SanitaryTerminalTypeUrinal','Definition from IAI: Soil appliance that receives urine and directs it to a waste outlet (BS6100)',$,'IfcSanitaryTerminalType',(#1804,#1806,#1807,#1808,#1810,#1812,#1814));
-#1804=IFCSIMPLEPROPERTYTEMPLATE('3qFP4jWf9259QGgj15elVf',$,'UrinalType','Selection of the type of urinal from the enumerated list of types where:-\X2\000A000A\X0\Bowl =\X2\0009\X0\Individual wall mounted urinal\X2\000A\X0\Slab =\X2\0009\X0\Urinal that consists of a slab or sheet fixed to a wall and down which urinal flows into a floor channel\X2\000A\X0\Stall =\X2\0009\X0\Floor mounted urinal that consists of an elliptically shaped sanitary stall fixed to a wall and down which urine flows into a floor channel\X2\000A\X0\Trough =\X2\0009\X0\Wall mounted urinal of elongated rectangular shape on plan, that can be used by more than one person at a time.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1805,$,$,$,.READWRITE.);
-#1805=IFCPROPERTYENUMERATION('PEnum_UrinalType',(IFCLABEL('Bowl'),IFCLABEL('Slab'),IFCLABEL('Stall'),IFCLABEL('Trough'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1806=IFCSIMPLEPROPERTYTEMPLATE('2ykGEOOszFxA7l8RQqFxlT',$,'UrinalMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1807=IFCSIMPLEPROPERTYTEMPLATE('1X1gLUMzX89Ov9cqt08$ut',$,'UrinalColor','Color of the urinal',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1808=IFCSIMPLEPROPERTYTEMPLATE('2AJBt5wcDCqvFT1qfy8ZWk',$,'SpilloverLevel','The level at which water spills out of the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1809,$,$,.READWRITE.);
-#1809=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1810=IFCSIMPLEPROPERTYTEMPLATE('0DPchqS2z5ChTepREd$uBl',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1811,$,$,.READWRITE.);
-#1811=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1812=IFCSIMPLEPROPERTYTEMPLATE('1_F8gEM416HObwMkfv83EN',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1813,$,$,.READWRITE.);
-#1813=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1814=IFCSIMPLEPROPERTYTEMPLATE('20OhV6N5n1Pvt3jW5A7Iwi',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1815,$,$,.READWRITE.);
-#1815=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1816=IFCPROPERTYSETTEMPLATE('3KLrJOSRj30v_rG$LmWcdL',$,'Pset_SanitaryTerminalTypeWashHandBasin','Definition from IAI: Waste water appliance for washing the upper parts of the body.',$,'IfcSanitaryTerminalType',(#1817,#1819,#1821,#1823,#1825,#1827,#1828,#1829));
-#1817=IFCSIMPLEPROPERTYTEMPLATE('1$w4_IA5X6$gslYupjbkRf',$,'WashHandBasinType','Defines the types of wash hand basin that may be specified where: \X2\000A\X0\DentalCuspidor = Waste water appliance that receives and flushes away mouth washings\X2\000A\X0\HandRinse = Wall mounted wash hand basin that has an overall width of 500mm or less\X2\000A\X0\Hospital = Wash hand basin that has a smooth easy clean surface without tapholes or overflow slot for use where hygiene is of prime importance. \X2\000A\X0\Tipup = Wash hand basin mounted on pivots so that it can be emptied by tilting \X2\000A\X0\Vanity = Wash hand basin for installation into a horizontal surface \X2\000A\X0\Washfountain = Wash hand basin that is circular, semi-circular or polygonal on plan, at which more than one person can wash at the same time. \X2\000A\X0\WashingTrough = Wash hand basin of elongated rectangular shape in plan, at which more than one person can wash at the same time.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1818,$,$,$,.READWRITE.);
-#1818=IFCPROPERTYENUMERATION('PEnum_WashHandBasinType',(IFCLABEL('DentalCuspidor'),IFCLABEL('HandRinse'),IFCLABEL('Hospital'),IFCLABEL('Tipup'),IFCLABEL('Washfountain'),IFCLABEL('WashingTrough'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1819=IFCSIMPLEPROPERTYTEMPLATE('3tra2EL61BAPv9gkZCkC9O',$,'WashHandBasinMounting','Selection of the form of mounting from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1820,$,$,$,.READWRITE.);
-#1820=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1821=IFCSIMPLEPROPERTYTEMPLATE('0YuWae7L58YwkJ3viehcfR',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1822,$,$,.READWRITE.);
-#1822=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1823=IFCSIMPLEPROPERTYTEMPLATE('2ZixvoaiP5YvL8E4BR4S6i',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1824,$,$,.READWRITE.);
-#1824=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1825=IFCSIMPLEPROPERTYTEMPLATE('0j9C2k9B5BEOS5GfBaurn4',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1826,$,$,.READWRITE.);
-#1826=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1827=IFCSIMPLEPROPERTYTEMPLATE('1mi7$hdqH33gzjur9Tdghl',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1828=IFCSIMPLEPROPERTYTEMPLATE('2Nwfv53un4LRp9g0A9XTl3',$,'Color','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1829=IFCSIMPLEPROPERTYTEMPLATE('3FwcQMwrz4sg1qyQBLVtex',$,'DrainSize','The size of the drain outlet connection from the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1830,$,$,.READWRITE.);
-#1830=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1831=IFCPROPERTYSETTEMPLATE('1BHacE_r90se5mSQsGDvcB',$,'Pset_SanitaryTerminalTypeWCSeat','Definition from IAI: Hinged seat that fits on the top of a water closet (WC) pan. (BS6100 330 1401)',$,'IfcSanitaryTerminalType',(#1832,#1834,#1835,#1836));
-#1832=IFCSIMPLEPROPERTYTEMPLATE('14omBPStrFaP2QQKD3ps7R',$,'SeatType','The property enumeration Pset_ToiletSeatTypeEnum defines the types of seat that may be attached to the toilet pan and specified within the property set Pset_Toilet where:-\X2\000A000A\X0\Extension =\X2\0009\X0\WC seat that is attached at the back, by means of side or top hinges, to a flat piece of material secured to the water closet pan\X2\000A\X0\Inset =\X2\0009\X0\Seat that consists of pads of impervious material fixed to the top of a water closet pan\X2\000A\X0\OpenFrontSeat =\X2\0009\X0\Hinged WC seat shaped like a horseshoe with the gap at the front\X2\000A\X0\RingSeat =\X2\0009\X0\WC seat in the shape of a ring\X2\000A\X0\SelfRaising =\X2\0009\X0\WC seat with balanced weights or springs to raise it when not in use\X2\000A\X0\None =\X2\0009\X0\There is no seat attached to the water closet pan\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1833,$,$,$,.READWRITE.);
-#1833=IFCPROPERTYENUMERATION('PEnum_ToiletSeatType',(IFCLABEL('Extension'),IFCLABEL('Inset'),IFCLABEL('OpenFrontSeat'),IFCLABEL('RingSeat'),IFCLABEL('SelfRaising'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#1834=IFCSIMPLEPROPERTYTEMPLATE('1_DuJ8s9T20QyJVaeAluaw',$,'SeatHasCover','Indicates whether there is a cover associated with the toilet seat',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1835=IFCSIMPLEPROPERTYTEMPLATE('0IqPBlAx56Mf$LRRLvZ4pF',$,'SeatMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1836=IFCSIMPLEPROPERTYTEMPLATE('2448kZwXbE9RyJxYUa07uV',$,'SeatColor','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#1837=IFCPROPERTYSETTEMPLATE('3HCEgKz211WfNcOOsYsODq',$,'Pset_WasteTerminalTypeFloorTrap','Definition from IAI: Pipe fitting, set into the floor, that retains liquid to prevent the passage of foul air.',$,'IfcWasteTerminalType',(#1838,#1840,#1842,#1844,#1845,#1847,#1848,#1850,#1851,#1853,#1855,#1857,#1859,#1861));
-#1838=IFCSIMPLEPROPERTYTEMPLATE('14_m4dJVDBXBQZqudFPx_q',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1839,$,$,.READWRITE.);
-#1839=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1840=IFCSIMPLEPROPERTYTEMPLATE('08puiDUYnAP9JpWz4_Lbmb',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1841,$,$,.READWRITE.);
-#1841=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1842=IFCSIMPLEPROPERTYTEMPLATE('28xuB94YTC0ArwWMjryIic',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1843,$,$,.READWRITE.);
-#1843=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1844=IFCSIMPLEPROPERTYTEMPLATE('0mbOHmigL4sfXHxUkz213z',$,'IsForSullageWater','Indicates if the purpose of the floor trap is to receive sullage water, or if that is amongst its purposes (= TRUE), or not (= FALSE). Note that if TRUE, it is expected that an upstand or kerb will be placed around the floor trap to prevent the ingress of surface water runoff; the provision of the upstand or kerb is not dealt with in this property set.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1845=IFCSIMPLEPROPERTYTEMPLATE('0jvTHoISL14xiS0_Lgxkla',$,'SpilloverLevel','The level at which water spills out of the terminal.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1846,$,$,.READWRITE.);
-#1846=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1847=IFCSIMPLEPROPERTYTEMPLATE('1dpWdToKv9zff7A7LjSJbo',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1848=IFCSIMPLEPROPERTYTEMPLATE('0Jg1d$a1fErfiYHdE_ec$E',$,'TrapType','Identifies the predefined types of waste trap used in combination with the floor trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1849,$,$,$,.READWRITE.);
-#1849=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1850=IFCSIMPLEPROPERTYTEMPLATE('1cAY3JgqL7ZB1tC0xp6quq',$,'HasStrainer','Indicates whether the gully trap has a strainer (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1851=IFCSIMPLEPROPERTYTEMPLATE('3dLKZoe0b0GRr98BPFN3nz',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1852,$,$,.READWRITE.);
-#1852=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1853=IFCSIMPLEPROPERTYTEMPLATE('1qkbJSqbbAXgMIkAAyaNws',$,'InletPatternType','Identifies the pattern of inlet connections to a trap.\X2\000A000A\X0\A trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1854,$,$,$,.READWRITE.);
-#1854=IFCPROPERTYENUMERATION('PEnum_InletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
-#1855=IFCSIMPLEPROPERTYTEMPLATE('0v1OWObq5BVuAWsFGMzJBQ',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1856,$,$,.READWRITE.);
-#1856=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1857=IFCSIMPLEPROPERTYTEMPLATE('3Xc1KN$OLDEAN_dgxVOj0w',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1858,$,$,.READWRITE.);
-#1858=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1859=IFCSIMPLEPROPERTYTEMPLATE('2_MxypT6TFWe0O6DeqMPdv',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1860,$,$,.READWRITE.);
-#1860=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1861=IFCSIMPLEPROPERTYTEMPLATE('2t1MkJaH19SAXlQqWx_KP5',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1862=IFCPROPERTYSETTEMPLATE('2ZF_SnSWr3$RnopVLh6$tQ',$,'Pset_WasteTerminalTypeFloorWaste','Definition from IAI: Pipe fitting, set into the floor, that collects waste water and discharges it to a separate trap.',$,'IfcWasteTerminalType',(#1863,#1865,#1867,#1869,#1870,#1872,#1874,#1876));
-#1863=IFCSIMPLEPROPERTYTEMPLATE('1f5lDzWT1Fvgz2F7S5hvq$',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1864,$,$,.READWRITE.);
-#1864=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1865=IFCSIMPLEPROPERTYTEMPLATE('3VCqwwRNj0RBDI8FhY7_81',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1866,$,$,.READWRITE.);
-#1866=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1867=IFCSIMPLEPROPERTYTEMPLATE('3op1ccAZXF7QnoszTFKukg',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1868,$,$,.READWRITE.);
-#1868=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1869=IFCSIMPLEPROPERTYTEMPLATE('1a9U7ZEfn6OPdsIB0Iu5n_',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1870=IFCSIMPLEPROPERTYTEMPLATE('27fd7TqajA5g15TvpJ7rTb',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1871,$,$,.READWRITE.);
-#1871=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1872=IFCSIMPLEPROPERTYTEMPLATE('3OoyQ8PLbDsfCGaXJmOkzj',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1873,$,$,.READWRITE.);
-#1873=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1874=IFCSIMPLEPROPERTYTEMPLATE('04sXRB9kf3sxudCOAUNCXB',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1875,$,$,.READWRITE.);
-#1875=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1876=IFCSIMPLEPROPERTYTEMPLATE('1KSYgilFz4NhsTZsh9pZB0',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1877=IFCPROPERTYSETTEMPLATE('3nkflqh2DAewAQdTHTKzXu',$,'Pset_WasteTerminalTypeGreaseInterceptor','Definition from IAI: Chamber, on the line of a drain or discharge pipe, that prevents grease passing into a drainage system (BS6100 330 6205).',$,'IfcWasteTerminalType',(#1878,#1879,#1881,#1883,#1885,#1886,#1888,#1890,#1892,#1894,#1896,#1898));
-#1878=IFCSIMPLEPROPERTYTEMPLATE('0xrXuaKafADfGlQvaEjbqd',$,'NominalBodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1879=IFCSIMPLEPROPERTYTEMPLATE('0UnoI6PCj72fA_1wvglEV0',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1880,$,$,.READWRITE.);
-#1880=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1881=IFCSIMPLEPROPERTYTEMPLATE('0WmlSpbBf0m9Bvy0a8VRt1',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1882,$,$,.READWRITE.);
-#1882=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1883=IFCSIMPLEPROPERTYTEMPLATE('1W60o0O59AcekxlmHgeJsZ',$,'BodyDepth','Nominal or quoted length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1884,$,$,.READWRITE.);
-#1884=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1885=IFCSIMPLEPROPERTYTEMPLATE('3qW0ASTq16XAsaj2W2oAgm',$,'StrainerMaterial','Material from which the strainer is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1886=IFCSIMPLEPROPERTYTEMPLATE('1jPsqtHYjEkxBSDjDeCH2z',$,'StrainerDiameter','Diameter, measured in plan view, of the strainer basket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1887,$,$,.READWRITE.);
-#1887=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1888=IFCSIMPLEPROPERTYTEMPLATE('00gNksMYP7$h4034_DMd9J',$,'StrainerDepth','Depth, measured in elevation view, of the strainer basket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1889,$,$,.READWRITE.);
-#1889=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1890=IFCSIMPLEPROPERTYTEMPLATE('3imU0dvTDAEAuHCjNUgAnf',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1891,$,$,.READWRITE.);
-#1891=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1892=IFCSIMPLEPROPERTYTEMPLATE('3aUM2i_XbBKeGXfm0RE6yN',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1893,$,$,.READWRITE.);
-#1893=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1894=IFCSIMPLEPROPERTYTEMPLATE('3XO95d2VXCoez5z0FZsNF$',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the grease interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1895,$,$,.READWRITE.);
-#1895=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1896=IFCSIMPLEPROPERTYTEMPLATE('1DnqHk191A2vsSnApwP3Dm',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the grease interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1897,$,$,.READWRITE.);
-#1897=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1898=IFCSIMPLEPROPERTYTEMPLATE('38Ek4QyBDAqfYMxA9d_dAP',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1899=IFCPROPERTYSETTEMPLATE('1zMSJUsSb60wixMh5yo7ox',$,'Pset_WasteTerminalTypeGullySump','Definition from IAI: Pipe fitting or assembly of fittings to receive surface water or waste water, fitted with a grating or sealed cover.',$,'IfcWasteTerminalType',(#1900,#1902,#1904,#1906,#1907,#1909,#1911,#1913,#1915,#1917,#1919,#1921));
-#1900=IFCSIMPLEPROPERTYTEMPLATE('32ZX7JHvnAZRwOubuEDhl$',$,'NominalSumpLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1901,$,$,.READWRITE.);
-#1901=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1902=IFCSIMPLEPROPERTYTEMPLATE('3M$hEfy$bEj9sGIsKersM7',$,'NominalSumpWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1903,$,$,.READWRITE.);
-#1903=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1904=IFCSIMPLEPROPERTYTEMPLATE('2gugFTNkrF5R82X7t$CCOk',$,'NominalSumpDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1905,$,$,.READWRITE.);
-#1905=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1906=IFCSIMPLEPROPERTYTEMPLATE('1E3GDDcfL9whcZWoBPYX6X',$,'SumpMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1907=IFCSIMPLEPROPERTYTEMPLATE('3RnhRMkC90nANrrxWOSous',$,'GullyType','Identifies the predefined types of gully from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1908,$,$,$,.READWRITE.);
-#1908=IFCPROPERTYENUMERATION('PEnum_GullyType',(IFCLABEL('Vertical'),IFCLABEL('BackInlet'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1909=IFCSIMPLEPROPERTYTEMPLATE('38g02md510SBXaM2mba3ZP',$,'TrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1910,$,$,$,.READWRITE.);
-#1910=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1911=IFCSIMPLEPROPERTYTEMPLATE('0vpRyxKJ57xfDVT8KhTw6n',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1912,$,$,.READWRITE.);
-#1912=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1913=IFCSIMPLEPROPERTYTEMPLATE('07_PYcg5565AVsHNHm2$Ct',$,'BackInletPatternType','Identifies the pattern of inlet connections to a gully trap.\X2\000A000A\X0\A gulley trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the gully trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A000A\X0\ 2\X2\000A\X0\ |\X2\000A\X0\ ----------------\X2\000A\X0\ ! |\X2\000A\X0\1-| |-3\X2\000A\X0\ ! |\X2\000A\X0\ ----------------\X2\000A\X0\ |\X2\000A\X0\ 4',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1914,$,$,$,.READWRITE.);
-#1914=IFCPROPERTYENUMERATION('PEnum_BackInletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
-#1915=IFCSIMPLEPROPERTYTEMPLATE('2a7yE1cSzC1w68lB1DGb8q',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1916,$,$,.READWRITE.);
-#1916=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1917=IFCSIMPLEPROPERTYTEMPLATE('3Mued6Vo5Fch1uYt428yMd',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1918,$,$,.READWRITE.);
-#1918=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1919=IFCSIMPLEPROPERTYTEMPLATE('0BsBp3FKPEsxnU_RQOtfA3',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1920,$,$,.READWRITE.);
-#1920=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1921=IFCSIMPLEPROPERTYTEMPLATE('3GSsArnGT1hQVhr2Ii_z4I',$,'CoverMaterial','Material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1922=IFCPROPERTYSETTEMPLATE('2cHdhgwhL9VvTO3aQkpHNy',$,'Pset_WasteTerminalTypeGullyTrap','Definition from IAI: Pipe fitting or assembly of fittings to receive surface water or waste water, fitted with a grating or sealed cover and discharging through a trap (BS6100 330 3504 modified)',$,'IfcWasteTerminalType',(#1923,#1925,#1927,#1929,#1930,#1932,#1933,#1935,#1937,#1939,#1941,#1943,#1945));
-#1923=IFCSIMPLEPROPERTYTEMPLATE('1GtiR7PxLCrhn6Y5sdZjO4',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1924,$,$,.READWRITE.);
-#1924=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1925=IFCSIMPLEPROPERTYTEMPLATE('1_I8OkoCD9Vx_C0KI0o2LV',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1926,$,$,.READWRITE.);
-#1926=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1927=IFCSIMPLEPROPERTYTEMPLATE('1Hmvb2m2XEGu3rHNVlvYYJ',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1928,$,$,.READWRITE.);
-#1928=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1929=IFCSIMPLEPROPERTYTEMPLATE('28pDvmfyPFn8vVHl57qeky',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1930=IFCSIMPLEPROPERTYTEMPLATE('23BO0OErf1rOMUn8gCgXMu',$,'GullyType','Identifies the predefined types of gully from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1931,$,$,$,.READWRITE.);
-#1931=IFCPROPERTYENUMERATION('PEnum_GullyType',(IFCLABEL('Vertical'),IFCLABEL('BackInlet'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1932=IFCSIMPLEPROPERTYTEMPLATE('3O22K_LVL9pQt9Vhn4axQ1',$,'HasStrainer','Indicates whether the gully trap has a strainer (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#1933=IFCSIMPLEPROPERTYTEMPLATE('3I02EPpXT7pAb9HQJAw$yA',$,'TrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1934,$,$,$,.READWRITE.);
-#1934=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#1935=IFCSIMPLEPROPERTYTEMPLATE('0I0jpGIbjA7h3_sLaFvNCX',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1936,$,$,.READWRITE.);
-#1936=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1937=IFCSIMPLEPROPERTYTEMPLATE('2x_uyvk6b4ww4ORPZfZWcb',$,'BackInletPatternType','Identifies the pattern of inlet connections to a gully trap.\X2\000A000A\X0\A gulley trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the gully trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1938,$,$,$,.READWRITE.);
-#1938=IFCPROPERTYENUMERATION('PEnum_BackInletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
-#1939=IFCSIMPLEPROPERTYTEMPLATE('3z5DhM_gj0je$dM9$M1udg',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1940,$,$,.READWRITE.);
-#1940=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1941=IFCSIMPLEPROPERTYTEMPLATE('2$RoktJkf3gArZbdA42XOA',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1942,$,$,.READWRITE.);
-#1942=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1943=IFCSIMPLEPROPERTYTEMPLATE('3lTOoDjRX3jgkvK35HvueF',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1944,$,$,.READWRITE.);
-#1944=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1945=IFCSIMPLEPROPERTYTEMPLATE('1vLii86PT21Qh0unarL8$J',$,'CoverMaterial','Material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1946=IFCPROPERTYSETTEMPLATE('2Bru2Subn1HAXRqpfydzdi',$,'Pset_WasteTerminalTypeOilInterceptor','Definition from IAI: One or more chambers arranged to prevent the ingress of oil to a drain or sewer, that retain the oil for later removal (BS6100 330 67316).',$,'IfcWasteTerminalType',(#1947,#1948,#1950,#1952,#1954,#1956,#1958,#1960,#1962));
-#1947=IFCSIMPLEPROPERTYTEMPLATE('0bkJI$4$X8DfeaX7xWaAY3',$,'BodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1948=IFCSIMPLEPROPERTYTEMPLATE('2ErKH1w9D1DetnkbmOHWsP',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1949,$,$,.READWRITE.);
-#1949=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1950=IFCSIMPLEPROPERTYTEMPLATE('0STcT1QEz51QiRqrh3zclT',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1951,$,$,.READWRITE.);
-#1951=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1952=IFCSIMPLEPROPERTYTEMPLATE('2JLe$X7Ub92vbyFTBo5hYr',$,'NominalBodyDepth','Nominal or quoted length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1953,$,$,.READWRITE.);
-#1953=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1954=IFCSIMPLEPROPERTYTEMPLATE('3r422cEw55pO5uyG9tEEFe',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1955,$,$,.READWRITE.);
-#1955=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1956=IFCSIMPLEPROPERTYTEMPLATE('39qpoUt9LFG88lMUPJ3cgi',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1957,$,$,.READWRITE.);
-#1957=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1958=IFCSIMPLEPROPERTYTEMPLATE('2mTr5Kscr2_edTFID2oqag',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1959,$,$,.READWRITE.);
-#1959=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1960=IFCSIMPLEPROPERTYTEMPLATE('0MdXv0_QvFQ8whr$L2eHwx',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1961,$,$,.READWRITE.);
-#1961=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1962=IFCSIMPLEPROPERTYTEMPLATE('1_9Wu2KPrDZQhUm3q5JQJm',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1963=IFCPROPERTYSETTEMPLATE('1GIOmaGWL8ae3PnUizEzr$',$,'Pset_WasteTerminalTypePetrolInterceptor','Definition from IAI: Two or more chambers with inlet and outlet pipes arranged to allow petrol/gasoline collected on the surface of water drained into them to evaporate through ventilating pipes.',$,'IfcWasteTerminalType',(#1964,#1965,#1967,#1969,#1971,#1973,#1975,#1977,#1979,#1980));
-#1964=IFCSIMPLEPROPERTYTEMPLATE('0cenwEi9T4yAoGV7MqFQx5',$,'BodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1965=IFCSIMPLEPROPERTYTEMPLATE('2UksWF64z2h91GSGhh0bfo',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1966,$,$,.READWRITE.);
-#1966=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1967=IFCSIMPLEPROPERTYTEMPLATE('1bWkHD$TH1kR2szM2e9Tmp',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1968,$,$,.READWRITE.);
-#1968=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1969=IFCSIMPLEPROPERTYTEMPLATE('3Fxvweln91Te_kHejt3Lva',$,'NominalBodyDepth','Nominal or quoted =length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1970,$,$,.READWRITE.);
-#1970=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1971=IFCSIMPLEPROPERTYTEMPLATE('2XuVu1Lg5EWwmNslmiII4a',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1972,$,$,.READWRITE.);
-#1972=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1973=IFCSIMPLEPROPERTYTEMPLATE('0sJN0Q9eXABAN1cognU$3d',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1974,$,$,.READWRITE.);
-#1974=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1975=IFCSIMPLEPROPERTYTEMPLATE('3xV_0cIof11B9TP9te8KAl',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1976,$,$,.READWRITE.);
-#1976=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1977=IFCSIMPLEPROPERTYTEMPLATE('1oqoEPWLb39eorljcyjJqh',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1978,$,$,.READWRITE.);
-#1978=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1979=IFCSIMPLEPROPERTYTEMPLATE('3pU5RUpv94p8EZlQEcN7VW',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1980=IFCSIMPLEPROPERTYTEMPLATE('1hQiAmVND98QWZO2x6te8R',$,'VentilatingPipeSize','Size of the ventilating pipe(s)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1981,$,$,.READWRITE.);
-#1981=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1982=IFCPROPERTYSETTEMPLATE('2Negb33s5CixCQI6ecgPD3',$,'Pset_WasteTerminalTypeRoofDrain','Definition from IAI: Pipe fitting, set into the roof, that collects rainwater for discharge into the rainwater system.',$,'IfcWasteTerminalType',(#1983,#1985,#1987,#1989,#1990,#1992,#1994,#1996));
-#1983=IFCSIMPLEPROPERTYTEMPLATE('2Ji5SUT4D6_eYJwCGXSL_F',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1984,$,$,.READWRITE.);
-#1984=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1985=IFCSIMPLEPROPERTYTEMPLATE('2q4VbIm9jA8hF_okLwxeHN',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1986,$,$,.READWRITE.);
-#1986=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1987=IFCSIMPLEPROPERTYTEMPLATE('3baLW1LtHFKuqTkWVRR2kK',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1988,$,$,.READWRITE.);
-#1988=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1989=IFCSIMPLEPROPERTYTEMPLATE('0RcNL8z25A4Qr8WvGxnl6I',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1990=IFCSIMPLEPROPERTYTEMPLATE('37wen80kvERRen7q67ryDn',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1991,$,$,.READWRITE.);
-#1991=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1992=IFCSIMPLEPROPERTYTEMPLATE('1dVrHeKan73xgrOzlaAwgr',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1993,$,$,.READWRITE.);
-#1993=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1994=IFCSIMPLEPROPERTYTEMPLATE('3Mxi5cxTjDkOu9AEGRdmcf',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1995,$,$,.READWRITE.);
-#1995=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#1996=IFCSIMPLEPROPERTYTEMPLATE('2YfFA2x8vEK8RoqoAr4GNS',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#1997=IFCPROPERTYSETTEMPLATE('1FnAuVHZT7LA9jYWclGVTk',$,'Pset_WasteTerminalTypeWasteDisposalUnit','Definition from IAI: Electrically operated device that reduces kitchen or other waste into fragments small enough to be flushed into a drainage system.',$,'IfcWasteTerminalType',(#1998,#2000,#2002));
-#1998=IFCSIMPLEPROPERTYTEMPLATE('3GP2CFbnjBSueKI1xfyrsk',$,'DrainConnectionSize','Size of the drain connection inlet to the waste disposal unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#1999,$,$,.READWRITE.);
-#1999=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2000=IFCSIMPLEPROPERTYTEMPLATE('29JpRe8x1Fie7XPFPm6fWt',$,'OutletConnectionSize','Size of the outlet connection from the waste disposal unit',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2001,$,$,.READWRITE.);
-#2001=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2002=IFCSIMPLEPROPERTYTEMPLATE('2yuwrMFyjEUhaLTc3o7K0U',$,'NominalDepth','Nominal or quoted depth of the object measured from the inlet drain connection to the base of the unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2003,$,$,.READWRITE.);
-#2003=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2004=IFCPROPERTYSETTEMPLATE('2Oeap2Zz95DRB4rvWu2Wis',$,'Pset_WasteTerminalTypeWasteTrap','Definition from IAI: Pipe fitting, set adjacent to a sanitary terminal, that retains liquid to prevent the passage of foul air.',$,'IfcWasteTerminalType',(#2005,#2007,#2009));
-#2005=IFCSIMPLEPROPERTYTEMPLATE('2bynqPKJ12SPYtcOh2gMCk',$,'WasteTrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2006,$,$,$,.READWRITE.);
-#2006=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2007=IFCSIMPLEPROPERTYTEMPLATE('2aeIouea11ZetztBW0y4QI',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2008,$,$,.READWRITE.);
-#2008=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2009=IFCSIMPLEPROPERTYTEMPLATE('3cF6MwTO1FVfa12TSAoyQw',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2010,$,$,.READWRITE.);
-#2010=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2011=IFCPROPERTYSETTEMPLATE('3lboATj5vA2f3NYDdk0mAu',$,'Pset_BuildingCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuilding. Please note that several building attributes are handled directly at the IfcBuilding instance, the building number (or short name) by IfcBuilding.Name, the building name (or long name) by IfcBuilding.LongName, and the description (or comments) by IfcBuilding.Description. Actual building quantities, like building perimeter, building area and building volume are provided by IfcElementQuantities, and the building classification according to national building code by IfcClassificationReference. ',$,'IfcBuilding',(#2012,#2013,#2014,#2015,#2016,#2017,#2018,#2019,#2021,#2022,#2023));
-#2012=IFCSIMPLEPROPERTYTEMPLATE('3FN3bcypf87ekoFF52AT3g',$,'BuildingID','A unique identifier assigned to a building. A temporary identifier is initially assigned at the time of making a planning application. This temporary identifier is changed to a permanent identifier when the building is registered into a statutory buildings and properties database.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2013=IFCSIMPLEPROPERTYTEMPLATE('3PFGJpjGT4AuBp7rc$F9Ph',$,'IsPermanentID','Indicates whether the identity assigned to a building is permanent (= TRUE) or temporary (=FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2014=IFCSIMPLEPROPERTYTEMPLATE('0I1wK5LFj9J8dCFKHB3QaO',$,'MainFireUse','Main fire use for the building which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2015=IFCSIMPLEPROPERTYTEMPLATE('0gh_AE5lX4UQeYz2WuH2n8',$,'AncillaryFireUse','Ancillary fire use for the building which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2016=IFCSIMPLEPROPERTYTEMPLATE('1F4ZfT6Uf4hQLakpSpqHwm',$,'SprinklerProtection','Indication whether this object is sprinkler protected (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2017=IFCSIMPLEPROPERTYTEMPLATE('0qGJKq6P15r94lMM$hBUYp',$,'SprinklerProtectionAutomatic','Indication whether this object has an automatic sprinkler protection (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2018=IFCSIMPLEPROPERTYTEMPLATE('3HhCFqQH9DJxd7jipGVyYN',$,'OccupancyType','Occupancy type for this object.\X2\000A\X0\It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2019=IFCSIMPLEPROPERTYTEMPLATE('0Wxllna2LFMOlx5yfy$r_6',$,'GrossPlannedArea','Total planned area for the building Used for programming the building.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2020,$,$,.READWRITE.);
-#2020=IFCNAMEDUNIT($,.AREAUNIT.);
-#2021=IFCSIMPLEPROPERTYTEMPLATE('1DjkhaIyzDBPTYTSiVj2w8',$,'NumberOfStoreys','Captures the number of storeys within a building for those cases where the IfcBuildingStorey entity is not used. Note that if IfcBuilingStorey is asserted and the number of storeys in a building can be determined from it, then this approach should be used in preference to setting a property for the number of storeys.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2022=IFCSIMPLEPROPERTYTEMPLATE('36pm8C_dbDPPZGLR2pBfW0',$,'YearOfConstruction','Year of construction of this building, including expected year of completion.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2023=IFCSIMPLEPROPERTYTEMPLATE('1te7aUkXD0kPDTgOHXN4sG',$,'IsLandmarked','This builing is listed as a historic building (TRUE), or not (FALSE), or unknown.',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
-#2024=IFCPROPERTYSETTEMPLATE('2CrZPhUlT5H8g0HjTW7Erd',$,'Pset_BuildingElementProxyCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuildingElementProxy.',$,'IfcBuildingElementProxy',(#2025));
-#2025=IFCSIMPLEPROPERTYTEMPLATE('3754Zx8_n0i8A6$8NYq5Qm',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2026=IFCPROPERTYSETTEMPLATE('0hCFMZL_P08RP7EBWETFF1',$,'Pset_BuildingStoreyCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuildingStorey. Please note that several building attributes are handled directly at the IfcBuildingStorey instance, the building storey number (or short name) by IfcBuildingStorey.Name, the building storey name (or long name) by IfcBuildingStorey.LongName, and the description (or comments) by IfcBuildingStorey.Description. Actual building storey quantities, like building storey perimeter, building storey area and building storey volume are provided by IfcElementQuantities, and the building storey classification according to national building code by IfcClassificationReference. \X2\000A\X0\',$,'IfcBuildingStorey',(#2027,#2028,#2029,#2030,#2031,#2033));
-#2027=IFCSIMPLEPROPERTYTEMPLATE('3sdCIFkQT9Qxav2EajSYJv',$,'EntranceLevel','Indication whether this building storey is an entrance level to the building (TRUE), or (FALSE) if otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2028=IFCSIMPLEPROPERTYTEMPLATE('3zcwGgeF9FRO30A90L9qiq',$,'AboveGround','Indication whether this building storey is fully above ground (TRUE), or below ground (FALSE), or partially above and below ground (UNKNOWN) - as in sloped terrain.',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
-#2029=IFCSIMPLEPROPERTYTEMPLATE('21Zqgndnn1iuIRPWDD2sFn',$,'SprinklerProtection','Indication whether this object is sprinkler protected (true) or not (false).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2030=IFCSIMPLEPROPERTYTEMPLATE('0cml6xMmD0W8QU7GGa0qDa',$,'SprinklerProtectionAutomatic','Indication whether this object has an automatic sprinkler protection (true) or not (false).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2031=IFCSIMPLEPROPERTYTEMPLATE('2g3ee86yX63Af7LjAQve64',$,'GrossAreaPlanned','Total planned area for the building storey. Used for programming the building storey.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2032,$,$,.READWRITE.);
-#2032=IFCNAMEDUNIT($,.AREAUNIT.);
-#2033=IFCSIMPLEPROPERTYTEMPLATE('3Hmb2nU1v9dAIFxwouqHyy',$,'NetAreaPlanned','Total planned net area for the building storey. Used for programming the building storey.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2034,$,$,.READWRITE.);
-#2034=IFCNAMEDUNIT($,.AREAUNIT.);
-#2035=IFCPROPERTYSETTEMPLATE('2MXEaTsFP4X9QMO5zN$F_M',$,'Pset_BuildingUse','Definition from IAI: Provides information on on the real estate context of the building of interest both current and anticipated.',$,'IfcBuilding',(#2036,#2037,#2038,#2039,#2040,#2041,#2042,#2043,#2045,#2046,#2047,#2048));
-#2036=IFCSIMPLEPROPERTYTEMPLATE('016uUk6C18OBpL1SbOTq4R',$,'MarketCategory','Category of use e.g. residential, commercial, recreation etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2037=IFCSIMPLEPROPERTYTEMPLATE('1tf3RmfTzDUhs0k0EVHAWs',$,'MarketSubCategory','Subset of category of use e.g. multi-family, 2 bedroom, low rise',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2038=IFCSIMPLEPROPERTYTEMPLATE('0tY1piAPDFrxW49cdRCeec',$,'PlanningControlStatus','Label of zoning category or class, or planning control category for the site or facility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2039=IFCSIMPLEPROPERTYTEMPLATE('07M5oJK6b5tuiie4xOXKMp',$,'NarrativeText','Added information relating to the adjacent building use that is not appropriate to the general descriptive text associated with an entity through the inherited IfcRoot.Description',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2040=IFCSIMPLEPROPERTYTEMPLATE('0d3TG2JQzFZxARh8fTfunR',$,'VacancyRateInCategoryNow','Percentage of vacancy found in the particular category currently',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2041=IFCSIMPLEPROPERTYTEMPLATE('31N_XQqiHExQfrmPu9BzHB',$,'TenureModesAvailableNow','A list of the tenure modes that are currently available expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2042=IFCSIMPLEPROPERTYTEMPLATE('02CRAD0JvDr8DFVmPJDOiU',$,'MarketSubCategoriesAvailableNow','A list of the sub categories of property that are currently available expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2043=IFCSIMPLEPROPERTYTEMPLATE('2QL23hT$n0YRjQZQC9ac1I',$,'RentalRatesInCategoryNow','Range of the cost rates for property currently available in the required category.',.P_BOUNDEDVALUE.,'IfcMonetaryMeasure',$,$,#2044,$,$,.READWRITE.);
-#2044=IFCMONETARYUNIT($);
-#2045=IFCSIMPLEPROPERTYTEMPLATE('2XOrOWdRTARP3HuCOCFe0Q',$,'VacancyRateInCategoryFuture','Percentage of vacancy found in the particular category expected in the future',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2046=IFCSIMPLEPROPERTYTEMPLATE('36n_$69HTAA9ZOv6xGaRHp',$,'TenureModesAvailableFuture','A list of the tenure modes that are expected to be available in the future expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2047=IFCSIMPLEPROPERTYTEMPLATE('1QB99gYED4aOwBjUsCpUEG',$,'MarketSubCategoriesAvailableFuture','A list of the sub categories of property that are expected to be available in the future expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2048=IFCSIMPLEPROPERTYTEMPLATE('2I1Xqgukn96wkJZTeSlrNT',$,'RentalRatesInCategoryFuture','Range of the cost rates for property expected to be available in the future in the required category.',.P_BOUNDEDVALUE.,'IfcMonetaryMeasure',$,$,#2049,$,$,.READWRITE.);
-#2049=IFCMONETARYUNIT($);
-#2050=IFCPROPERTYSETTEMPLATE('1fX4aHJrzB7PTuFGecy6kT',$,'Pset_BuildingUseAdjacent','Definition from IAI: Provides information on adjacent buildings and their uses to enable their impact on the building of interest to be determined. Note that for each instance of the property set used, where there is an existence of risk, there will be an instance of the property set Pset_Risk (q.v)',$,'IfcBuilding',(#2051,#2052,#2053,#2054));
-#2051=IFCSIMPLEPROPERTYTEMPLATE('1Gip0furn8rgIPZ1SWiPNh',$,'MarketCategory','Category of use e.g. residential, commercial, recreation etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2052=IFCSIMPLEPROPERTYTEMPLATE('2CqCbseijDqhPVmoqq2rgD',$,'MarketSubCategory','Subset of category of use e.g. multi-family, 2 bedroom, low rise',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2053=IFCSIMPLEPROPERTYTEMPLATE('0vuuOQzh5Fu8_WPzAlL$yx',$,'PlanningControlStatus','Label of zoning category or class, or planning control category for the site or facility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2054=IFCSIMPLEPROPERTYTEMPLATE('3Lk8hyG1LFC9fX1Zd1tWVF',$,'NarrativeText','Added information relating to the adjacent building use that is not appropriate to the general descriptive text associated with an entity through the inherited IfcRoot.Description',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2055=IFCPROPERTYSETTEMPLATE('0BSmA6o9L6XBd3oHruNNT8',$,'Pset_BuildingWaterStorage','The basic set of properties that are used for determining the water requirements for a building.\X2\000A\X0\Typically, this property set is expected to be used in conjunction with IfcBuilding.',$,'IfcBuilding',(#2056,#2058,#2060,#2062,#2064));
-#2056=IFCSIMPLEPROPERTYTEMPLATE('06uvjp2Aj8VvUCn5QM4Ncf',$,'WaterStorageRatePerPerson','The volume of domestic water that needs to be stored per person. ',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2057,$,$,.READWRITE.);
-#2057=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2058=IFCSIMPLEPROPERTYTEMPLATE('3jSlb1yFv2feK4SQdHpfzB',$,'OneDayPotableWater','The volume of water that needs to be stored to supply water to the building for human use for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2059,$,$,.READWRITE.);
-#2059=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2060=IFCSIMPLEPROPERTYTEMPLATE('2G0PkbJGH6pOfKUCIzZl0f',$,'OneDayEssentialWater','The volume of water that needs to be stored to supply water to the building for uninterrupted water supply to essential areas for one day in the event of water supply failure. An essential area is considered to be a part of a building carrying out a critical function and that is unable to operate in the intended manner without a water supply.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2061,$,$,.READWRITE.);
-#2061=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2062=IFCSIMPLEPROPERTYTEMPLATE('1PtAW9Ct952AELWLnIvnxr',$,'OneDayCoolingTowerMakeupWater','The volume of water that needs to be stored to supply make up water to the cooling towers in a building for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2063,$,$,.READWRITE.);
-#2063=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2064=IFCSIMPLEPROPERTYTEMPLATE('0WSji75yT1SgE28cOcnm1q',$,'OneDayProcessOrProductionWater','The volume of water that needs to be stored to supply water for process or production requirements in a building for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2065,$,$,.READWRITE.);
-#2065=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2066=IFCPROPERTYSETTEMPLATE('2sup3x$1zAPA2DQqw4PUOi',$,'Pset_CoveringCeiling','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering with the PredefinedType set to CEILING.',$,'IfcCovering',(#2067,#2068,#2069,#2071));
-#2067=IFCSIMPLEPROPERTYTEMPLATE('3ys2T2Yuz1qBQotn_12_Za',$,'FragilityRating','The level of fragility of the ceiling.\X2\000A\X0\It is giving according to the national building code. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2068=IFCSIMPLEPROPERTYTEMPLATE('3u3_UsOpzDig7XA99ciH4V',$,'Permeability','Ratio of the permeability of the ceiling.\X2\000A\X0\The ration can be used to indicate an open ceiling (that enables identification of whether ceiling construction should be considered as impeding distribution of sprinkler water, light etc. from installations within the ceiling area) .',.P_SINGLEVALUE.,'IfcNormalisedRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2069=IFCSIMPLEPROPERTYTEMPLATE('2BpAdZYjb22AI3ymGEv0xf',$,'TileLength','Length of ceiling tiles. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2070,$,$,.READWRITE.);
-#2070=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2071=IFCSIMPLEPROPERTYTEMPLATE('0gxqQS$W13RQfzrWN5X0F1',$,'TileWidth','Width of ceiling tiles. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2072,$,$,.READWRITE.);
-#2072=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2073=IFCPROPERTYSETTEMPLATE('1RmS6eGGD7h9l1W19qVZPq',$,'Pset_CoveringCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering.',$,'IfcCovering,IfcCoveringType',(#2074,#2075,#2076,#2077,#2078,#2079,#2080,#2081,#2082,#2084));
-#2074=IFCSIMPLEPROPERTYTEMPLATE('3AknVVI9PB8hoNP0fEozV_',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2075=IFCSIMPLEPROPERTYTEMPLATE('16gjhgEfD3pPmVSvkP4X21',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2076=IFCSIMPLEPROPERTYTEMPLATE('1SF3yhPjj96gSm4OZE3Hnc',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2077=IFCSIMPLEPROPERTYTEMPLATE('1t47r$i7XCEezZgOBPsQWo',$,'FlammabilityRating','Flammability Rating for this object.\X2\000A\X0\It is given according to the national building code that governs the rating of flammability for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2078=IFCSIMPLEPROPERTYTEMPLATE('3J0AAqXCHAoePvNoHgRE09',$,'FragilityRating','Indication on the fragility of the covering (e.g., under fire conditions). It is given according to the national building code that might provide a classification for fragility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2079=IFCSIMPLEPROPERTYTEMPLATE('2oSywxWA156xtermyARbvQ',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2080=IFCSIMPLEPROPERTYTEMPLATE('2ZuvJ5RaPEIAy5FegZ6xHV',$,'Material','Main material of the covering, it should only be given, if no IfcMaterial class is assigned to the IfcCovering instance.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2081=IFCSIMPLEPROPERTYTEMPLATE('0KQdPgLWH1APhzyyVRjxy4',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2082=IFCSIMPLEPROPERTYTEMPLATE('31I9Fho1z6vQj2Dc$sYeDO',$,'TotalThickness','Thickness of the covering, The thickness information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2083,$,$,.READWRITE.);
-#2083=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2084=IFCSIMPLEPROPERTYTEMPLATE('2wuWZRXn1BNgw03oJPTVqP',$,'Finish','Finish selection for this object.\X2\000A\X0\Here specification of the surface finish for informational purposes',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2085=IFCPROPERTYSETTEMPLATE('3ymJmR9gf5OvgsPYtFWs71',$,'Pset_CoveringFlooring','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering with the PredefinedType set to FLOORING.',$,'IfcCovering',(#2086,#2087));
-#2086=IFCSIMPLEPROPERTYTEMPLATE('0HwSVBB$b7ePU1GeQWAAzQ',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2087=IFCSIMPLEPROPERTYTEMPLATE('2jICrWk1X0TvHB$P0s65D0',$,'HasAntiStaticSurface','Indication whether the surface finish is designed to prevent electrostatic charge (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2088=IFCPROPERTYSETTEMPLATE('10TvnTFvX58fOrJft9mzVx',$,'Pset_Draughting','Definition from IAI: Property set to capture layer and colour as a quick win implementation within IFC2x platform to enable more efficient exchange of 3D building models.\X2\000A\X0\NOTE: With implementation of the IFC2x2 capabilities defined in the presentation resources (IfcPresentationLayerAssignment, IfcCurveStyle) the use of this property set may become obsolete.',$,'IfcElement,IfcSpatialStructureElement',(#2089,#2090));
-#2089=IFCSIMPLEPROPERTYTEMPLATE('2WE48SXx1Eh9zMLMK3We3C',$,'LayerName','Identifier of the layer name within the sending application.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2090=IFCCOMPLEXPROPERTYTEMPLATE('23ZhOXpe997gErqArFMsvz',$,'Colour','Significant colour definition of the whole element for all shape representations, it is given for highlighting/differentiation purposes, full colour representation of individual geometric representation items, using the IFC2x2 presentation schemas, always takes precedence. In case of several colour information available (line, upper/lower surface, etc.) the sending application shall identify the most significant single colour to be included,','RGB_Colour',.P_COMPLEX.,(#2091,#2092,#2093));
-#2091=IFCSIMPLEPROPERTYTEMPLATE('0EPJpguQb6Uf$1UgiNvuAS',$,'Red','Red component of the RGB colour specification given by an integer of 0..255',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2092=IFCSIMPLEPROPERTYTEMPLATE('0hNzqiFQT7nOWrM7IxbtRE',$,'Green','Green component of the RGB colour specification given by an integer of 0..256',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2093=IFCSIMPLEPROPERTYTEMPLATE('2PtYcypZL1NhqfDTaArmC3',$,'Blue','Blue component of the RGB colour specification given by an integer of 0..257',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2094=IFCPROPERTYSETTEMPLATE('3b2bVHa0D42ApZzorNEW_y',$,'Pset_ElementShading','Definition from IAI: Shading device properties associated with an element that represents a shading device, e.g. an IfcBuildingElementProxy or any other building element.\X2\000A\X0\',$,'IfcElement',(#2095,#2097,#2099,#2101,#2103,#2104,#2105,#2106,#2108));
-#2095=IFCSIMPLEPROPERTYTEMPLATE('2cNQhYGJ5ETf3o$8v864n9',$,'ShadingDeviceType','Specifies the type of shading device.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2096,$,$,$,.READWRITE.);
-#2096=IFCPROPERTYENUMERATION('PEnum_ElementShading',(IFCLABEL('FIXED'),IFCLABEL('MOVABLE'),IFCLABEL('EXTERIOR'),IFCLABEL('INTERIOR'),IFCLABEL('OVERHANG'),IFCLABEL('SIDEFIN'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#2097=IFCSIMPLEPROPERTYTEMPLATE('1P2PafJJ9BKgpwmHuaei98',$,'Azimuth','Azimuth of the element as derived from the placement of the element shape, by convention: North = 0'' and measurement is done clockwise (I.e. east = 90'', if unit is grad). The calculation procedure will be specific for each type of element. In cases of inconsistency between the geometric parameters and the azimuth property, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure ',$,$,#2098,$,$,.READWRITE.);
-#2098=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2099=IFCSIMPLEPROPERTYTEMPLATE('1zHICZT5L6iwe4k1jCZlMy',$,'Inclination','Inclination of the element as derived from the placement of the element shape, by convention: Vertical = 0'', horizontal = 90'', if unit is grad). The calculation procedure will be specific for each type of element. In cases of inconsistency between the geometric parameters and the azimuth property, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure ',$,$,#2100,$,$,.READWRITE.);
-#2100=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2101=IFCSIMPLEPROPERTYTEMPLATE('1NHT1wZF55VvDrLz_KP66_',$,'TiltRange','The minimum and maximum angles of possible tilt defined in the plane perpendicular to the extrusion axis (X-Axis of the local placement). The angle shall be measured from the orientation of the Z-Axis in the local placement.',.P_BOUNDEDVALUE.,'IfcPlaneAngleMeasure',$,$,#2102,$,$,.READWRITE.);
-#2102=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2103=IFCSIMPLEPROPERTYTEMPLATE('3BzcChyKTFQ8e4k8r3$qfc',$,'AverageSolarTransmittance','Overall or average ratio of the solar flux transmitted through a body to that incident upon it.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2104=IFCSIMPLEPROPERTYTEMPLATE('2PQuwctq97WP0VHqwdZzYR',$,'AverageVisibleTransmittance','Overall or average ratio of the visible spectral flux transmitted through a body to that incident upon it.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2105=IFCSIMPLEPROPERTYTEMPLATE('2T8jEMDlf7bxJ1WHXtxFj1',$,'Reflectance','The ratio of reflected power to incident power.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2106=IFCSIMPLEPROPERTYTEMPLATE('3Rwuv6ql55Bwpi$gKC8onU',$,'Roughness','A measure of the vertical deviations of the surface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2107,$,$,.READWRITE.);
-#2107=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2108=IFCSIMPLEPROPERTYTEMPLATE('0zmDGTYObF5vrRVUYJzuzu',$,'Color','The color of the surface.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2109=IFCPROPERTYSETTEMPLATE('2PAhXQi6D48B1nGCymBags',$,'Pset_OpeningElementCommon','Definition from IAI: Properties common to the definition of all instances of IfcOpeningElement.\X2\000A\X0\',$,'IfcOpeningElement',(#2110,#2111,#2112,#2113,#2114));
-#2110=IFCSIMPLEPROPERTYTEMPLATE('3OZEfYiIr5mBR8LkAeqk0G',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2111=IFCSIMPLEPROPERTYTEMPLATE('2ef7XIuxX8cQ9xj497ujXR',$,'Purpose','Indication of the purpose for that opening, e.g. ''ventilation'', ''access'', etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2112=IFCSIMPLEPROPERTYTEMPLATE('39TQ7yWzzDHgCbWwwsBLzu',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the space (in case of e.g., a corridor) is designed to serve as an exit space, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2113=IFCSIMPLEPROPERTYTEMPLATE('1bKtio_YLBG8BTSeDXKdxF',$,'ProtectedOpening','Indication whether the opening is considered to be protected under fire safety considerations. If (TRUE) it counts as a protected opening under the applicable building code, (FALSE) otherwise. ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2114=IFCSIMPLEPROPERTYTEMPLATE('1sC0_jYijC7fBNkhEtQq83',$,'ParallelJambs','Indicated, whether the jambs of an opening in a curved building element are intended to be parallel (TRUE) or are radial (FALSE). Radial means, that the extension of the jambs are rays through the axis of the revolution forming the curved building element. ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2115=IFCPROPERTYSETTEMPLATE('0IE$owLAb3YhOf9NziOZuE',$,'Pset_QuantityTakeOff','Definition from IAI: Description of quantities for work items to be exchanged in addition to the IfcElementQuantity\X2\000A\X0\',$,'IfcElement',(#2116,#2117,#2120));
-#2116=IFCSIMPLEPROPERTYTEMPLATE('3S7cloDYL0iwg8pC21CDdh',$,'Reference','Reference ID for this specified type of quantity, e.g. linking back to a macro name, etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2117=IFCCOMPLEXPROPERTYTEMPLATE('1utTOrPGb9fwVz347pi1BM',$,'LayerQuantity','Quantity take-off information specific to a single layer of the element, if multiple layer information is passed, then the property shall be indexed, e.g. LayerQuantity1, ayerQuantity2, \X2\2026\X0\','QTO_Layer',.P_COMPLEX.,(#2118,#2119));
-#2118=IFCSIMPLEPROPERTYTEMPLATE('3b0qOBLBP0ieZ726tjgRFh',$,'MaterialLayer','Indication of the material layer (e.g. of a wall or slab) to which the quantity information belongs to)',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2119=IFCSIMPLEPROPERTYTEMPLATE('3kY0OSCuT0agVHGsGP026e',$,'LocalContext','Local context information for the take-off quantity, if multiple information items are passed, then the property shall be indexed, e.g. LocalContext1, LocalContext2, \X2\2026\X0\',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2120=IFCSIMPLEPROPERTYTEMPLATE('3sqr__gNbAnPMlC9psa4uf',$,'LocalContext','Local context information for the take-off quantity, if multiple information items are passed, then the property shall be indexed, e.g. LocalContext1, LocalContext2, \X2\2026\X0\',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2121=IFCPROPERTYSETTEMPLATE('0$KUryxnb16eSYtmxTzq1h',$,'Pset_SiteCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSite. Please note that several site attributes are handled directly at the IfcSite instance, the site number (or short name) by IfcSite.Name, the site name (or long name) by IfcSite.LongName, and the description (or comments) by IfcSite.Description. The land title number is also given as an explicit attribute IfcSite.LandTitleNumber. Actual site quantities, like site perimeter, site area and site volume are provided by IfcElementQuantities, and site classification according to national building code by IfcClassificationReference. The global positioning of the site in terms of Northing and Easting and height above sea level datum is given by IfcSite.RefLongitude, IfcSite.RefLatitude, IfcSite.RefElevation and the postal address by IfcSite.SiteAddress.',$,'IfcSite',(#2122,#2124,#2126));
-#2122=IFCSIMPLEPROPERTYTEMPLATE('2pD5fDlGX9dRFjUe0GfZLW',$,'BuildableArea','The area of utilization expressed as a minimum value and a maximum value - according to local building codes. ',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2123,$,$,.READWRITE.);
-#2123=IFCNAMEDUNIT($,.AREAUNIT.);
-#2124=IFCSIMPLEPROPERTYTEMPLATE('2ByuAM8kXDdQWwrh2eW9lS',$,'TotalArea','Total area of the site - masured according to local building codes.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2125,$,$,.READWRITE.);
-#2125=IFCNAMEDUNIT($,.AREAUNIT.);
-#2126=IFCSIMPLEPROPERTYTEMPLATE('2ekA7OapbCDhgZ6LecTynG',$,'BuildingHeightLimit','Calculated maximum height of buildings on this site - according to local building codes. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2127,$,$,.READWRITE.);
-#2127=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2128=IFCPROPERTYSETTEMPLATE('3CrWl7g81BPuKtTWGrIcMN',$,'Pset_SpaceCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace. Please note that several space attributes are handled directly at the IfcSpace instance, the space number (or short name) by IfcSpace.Name, the space name (or long name) by IfcSpace:LongName, and the description (or comments) by IfcSpace.Description. Actual space quantities, like space perimeter, space area and space volume are provided by IfcElementQuantities, and space classification according to national building code by IfcClassificationReference. The level above zero (relative to the building) for the slab row construction is provided by the IfcBuildingStorey.Elevation, the level above zero (relative to the building) for the floor finish is provided by the IfcSpace.ElevationWithFlooring.',$,'IfcSpace',(#2129,#2130,#2131,#2132,#2133,#2134,#2135,#2137,#2139,#2140,#2141,#2142));
-#2129=IFCSIMPLEPROPERTYTEMPLATE('3NPLfswl1EoOrW3pCulkkD',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2130=IFCSIMPLEPROPERTYTEMPLATE('0ZlsGml6X9Zf$QoSuISqhd',$,'Category','Category of space usage or utilization of the area. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2131=IFCSIMPLEPROPERTYTEMPLATE('0f152zOSHFfvrichUOP2Sc',$,'FloorCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2132=IFCSIMPLEPROPERTYTEMPLATE('2Z8Pkzt0n6AAO5MKYl7MWM',$,'WallCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2133=IFCSIMPLEPROPERTYTEMPLATE('2b9xY8ptDBXAYyFcIvwVbR',$,'CeilingCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2134=IFCSIMPLEPROPERTYTEMPLATE('2Si8$g8XP2XwFmvPqmHJu7',$,'SkirtingBoard','Label to indicate the material or construction of the skirting board around the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2135=IFCSIMPLEPROPERTYTEMPLATE('1WonB_LzDEvAZCzQNbh9ga',$,'GrossPlannedArea','Total planned area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2136,$,$,.READWRITE.);
-#2136=IFCNAMEDUNIT($,.AREAUNIT.);
-#2137=IFCSIMPLEPROPERTYTEMPLATE('01I26D5UnDlQRUJmfpjGGZ',$,'NetPlannedArea',$,.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2138,$,$,.READWRITE.);
-#2138=IFCNAMEDUNIT($,.AREAUNIT.);
-#2139=IFCSIMPLEPROPERTYTEMPLATE('0XZOxpD_fE3eoPvlDvxtFT',$,'PubliclyAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as a publicly accessible space, e.g., for a public toilet (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2140=IFCSIMPLEPROPERTYTEMPLATE('0NBtfmrwf1zAeqjoiOGLQ2',$,'HandicapAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as an accessible space for handicapped people, e.g., for a public toilet (TRUE) or not (FALSE). This information is often used to declare the need for access for the disabled and for special design requirements of this space.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2141=IFCSIMPLEPROPERTYTEMPLATE('1bGmbG$6f6ZOakHh_gAdyS',$,'ConcealedFlooring','Indication whether this space is declared to be a concealed flooring (TRUE) or not (FALSE). A concealed flooring is normally meant to be the space beneath a raised floor.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2142=IFCSIMPLEPROPERTYTEMPLATE('2lP8BvJDr4te64Eeo8hHUm',$,'ConcealedCeiling','Indication whether this space is declared to be a concealed ceiling (TRUE) or not (FALSE). A concealed ceiling is normally meant to be the space between a slab and a suspended ceiling.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2143=IFCPROPERTYSETTEMPLATE('0VugnbRzLE5eOwIYFSx7Yu',$,'Pset_SpaceFireSafetyRequirements','Definition from IAI: Properties related to fire protection of spaces that apply to the occurrences of IfcSpace or IfcZone.',$,'IfcSpace,IfcZone',(#2144,#2145,#2146,#2147,#2148,#2149,#2150,#2151,#2152));
-#2144=IFCSIMPLEPROPERTYTEMPLATE('05uzISdj98aPffLU1lGIQU',$,'MainFireUse','Main fire use for the space which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2145=IFCSIMPLEPROPERTYTEMPLATE('2elijpiz5Br8Vw0CjJ0jdf',$,'AncillaryFireUse','Ancillary fire use for the space which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2146=IFCSIMPLEPROPERTYTEMPLATE('0DoPD2fMrEcOus2FHGsFDx',$,'FireRiskFactor','Fire Risk factor assigned to the space according to local building regulations.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2147=IFCSIMPLEPROPERTYTEMPLATE('3UMVOHiM1DExvHJXLLK7wu',$,'FireHazardFactor','Fire hazard code of the space. The coding depends on the national fire safety regulations.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2148=IFCSIMPLEPROPERTYTEMPLATE('0DobYbzgLDQBZ2EMDvcSUl',$,'FlammableStorage','Indication whether the space is intended to serve as a storage of flammable material (which is regarded as such by the presiding building code. (TRUE) indicates yes, (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2149=IFCSIMPLEPROPERTYTEMPLATE('2sgXkRln5B0QtGoq1XfiNs',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the space (in case of e.g., a corridor) is designed to serve as an exit space, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2150=IFCSIMPLEPROPERTYTEMPLATE('3ndGfeBPP7TRu6aSVz7RnD',$,'SprinklerProtection','Indication whether the space is sprinkler protected (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2151=IFCSIMPLEPROPERTYTEMPLATE('0toz1Ms$D5yQtgWZWBTflA',$,'SprinklerProtectionAutomatic','Indication whether the space has an automatic sprinkler protection (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2152=IFCSIMPLEPROPERTYTEMPLATE('0xKMY8i99FIg1FbZECG_mE',$,'AirPressurization','Indication whether the space is required to have pressurized air (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2153=IFCPROPERTYSETTEMPLATE('0eJXUFb2X3IwbL6AnRM4Tv',$,'Pset_SpaceLightingRequirements','Definition from IAI: Properties related to the lighting requirements that apply to the occurrences of IfcSpace or IfcZone. This includes the required artificial lighting, illuminance, etc.',$,'IfcSpace,IfcZone',(#2154,#2155));
-#2154=IFCSIMPLEPROPERTYTEMPLATE('3VM$Nk5qf2su4LYgPTDkoM',$,'ArtificialLighting','Indication whether this space requires artificial lighting (as natural lighting would be not sufficient). (TRUE) indicates yes (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2155=IFCSIMPLEPROPERTYTEMPLATE('33mw9RQu919f56xR1oRYRl',$,'Illuminance','Required average illuminance value for this space.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,#2156,$,$,.READWRITE.);
-#2156=IFCNAMEDUNIT($,.ILLUMINANCEUNIT.);
-#2157=IFCPROPERTYSETTEMPLATE('1VmvN9Hc94EQViLA1BGrLp',$,'Pset_SpaceOccupancyRequirements','Definition from IAI: Properties concerning work activities occurring or expected to occur within one or a set of similar spatial structure elements.',$,'IfcSpace,IfcZone',(#2158,#2159,#2160,#2161,#2163,#2165,#2167));
-#2158=IFCSIMPLEPROPERTYTEMPLATE('0Rks2m3M5E3vq1HNVNCj4m',$,'OccupancyType','Occupancy type for this object. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2159=IFCSIMPLEPROPERTYTEMPLATE('31ZDemWIX7JuTuybF3eHpf',$,'OccupancyNumber','Number of people required for the activity assigned to this space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2160=IFCSIMPLEPROPERTYTEMPLATE('0lUHlsoCn6IwIajj4C_d2R',$,'OccupancyNumberPeak','Maximal number of people required for the activity assigned to this space in peak time.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2161=IFCSIMPLEPROPERTYTEMPLATE('1edIFk2lzBgxXtJENiXkEl',$,'OccupancyTimePerDay','The amount of time during the day that the activity is required within this space.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2162,$,$,.READWRITE.);
-#2162=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2163=IFCSIMPLEPROPERTYTEMPLATE('3k0nJGZNHASOOROkHgxQ9P',$,'AreaPerOccupant','Design occupancy loading for this type of usage assigned to this space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2164,$,$,.READWRITE.);
-#2164=IFCNAMEDUNIT($,.AREAUNIT.);
-#2165=IFCSIMPLEPROPERTYTEMPLATE('2T8RaRbvvCiwL5HJ19YoZO',$,'MinimumHeadroom','Headroom required for the activity assigned to this space.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2166,$,$,.READWRITE.);
-#2166=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2167=IFCSIMPLEPROPERTYTEMPLATE('19EaO1xuP21u71GwF3_B1_',$,'IsOutlookDesirable','An indication of whether the outlook is desirable (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2168=IFCPROPERTYSETTEMPLATE('2lmitYYf93kf6HMCmnx8MY',$,'Pset_SpaceParking','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace which have an attribute value for ObjectType = ''Parking''. NOTE: Modified in IFC 2x3, properties ParkingUse and ParkingUnits added.',$,'IfcSpace',(#2169,#2170,#2171));
-#2169=IFCSIMPLEPROPERTYTEMPLATE('0Srn0rm2530QN6QyISuj4I',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\It is giving according to the requirements of the national building code. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2170=IFCSIMPLEPROPERTYTEMPLATE('1JcGFwDbD1VggkebRQhE_2',$,'ParkingUse','Identifies the type of transporation for which the parking space is designed. Values are not predefined but might include car, compact car, motorcycle, bicycle, truck, bus etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2171=IFCSIMPLEPROPERTYTEMPLATE('0rYg9bhhPDY87RJUExXLw6',$,'ParkingUnits','Indicates the number of transporation units of the type specified by the property ParkingUse that may be accommodated within the space. Generally, this value should default to 1 unit. However, where the parking space is for motorcycles or bicycles, provision may be made for more than one unit in the space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2172=IFCPROPERTYSETTEMPLATE('0ReqPuren0rw_jSciVaxwX',$,'Pset_SpaceParkingAisle','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace which have an attribute value for ObjectType = ''ParkingAisle''.',$,'IfcSpace',(#2173));
-#2173=IFCSIMPLEPROPERTYTEMPLATE('1wT5YZmQXEEelCjHJj8GzT',$,'IsOneWay','Indicates whether the parking aisle is designed for oneway traffic (TRUE) or twoway traffic (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2174=IFCPROPERTYSETTEMPLATE('0l$tC9FvLBLB7FbJ9Bk1gh',$,'Pset_SpaceThermalRequirements','Definition from IAI: Properties related to the comfort requirements for thermal and other thermal related performances of spaces that apply to the occurrences of IfcSpace or IfcZone. This includes the required design temperature, humidity, and air conditioning.',$,'IfcSpace,IfcZone',(#2175,#2177,#2179,#2181,#2183,#2185,#2187,#2188,#2189,#2190,#2191,#2192,#2193,#2194,#2195));
-#2175=IFCSIMPLEPROPERTYTEMPLATE('0q_y$$UFz2GQ8fud04FUaw',$,'SpaceTemperatureMax','Temperature of the space or zone, that is required from user/designer view point. If no summer or winter space temperature requirements are given, it applies all year, otherwise for the intermediate period.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2176,$,$,.READWRITE.);
-#2176=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2177=IFCSIMPLEPROPERTYTEMPLATE('2AauEJmWn3F8Q5lYgoiX3t',$,'SpaceTemperatureMin',' Minimal temperature of the space or zone, that is required from user/designer view point. If no summer or winter space temperature requirements are given, it applies all year, otherwise for the intermediate period. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2178,$,$,.READWRITE.);
-#2178=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2179=IFCSIMPLEPROPERTYTEMPLATE('0wvXQz6cnA188FtvT1QRRW',$,'SpaceTemperatureSummerMax','Maximal temperature of the space or zone for the hot (summer) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2180,$,$,.READWRITE.);
-#2180=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2181=IFCSIMPLEPROPERTYTEMPLATE('3qlM2kcxb0werXC1sUfjSy',$,'SpaceTemperatureSummerMin','Minimal temperature of the space or zone for the hot (summer) period, that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2182,$,$,.READWRITE.);
-#2182=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2183=IFCSIMPLEPROPERTYTEMPLATE('385lT67Bf8bQgevi985Jsy',$,'SpaceTemperatureWinterMax','Maximal temperature of the space or zone for the cold (winter) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2184,$,$,.READWRITE.);
-#2184=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2185=IFCSIMPLEPROPERTYTEMPLATE('2dM8wZXNjCDx2VS4tcf4Q2',$,'SpaceTemperatureWinterMin','Minimal temperature of the space or zone for the cold (winter) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2186,$,$,.READWRITE.);
-#2186=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2187=IFCSIMPLEPROPERTYTEMPLATE('1GpVlsIQv4dgaLZco9j0YH',$,'SpaceHumidity','Humidity of the space or zone that is required from user/designer view point. If no summer or winter space humidity requirements are given, it applies all year, otherwise for the intermediate period.',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2188=IFCSIMPLEPROPERTYTEMPLATE('32iQc68W5A7w8KDT21PUs8',$,'SpaceHumiditySummer','Humidity of the space or zone for the hot (summer) period, that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2189=IFCSIMPLEPROPERTYTEMPLATE('1oWTCF8JnAlwZQNZd9Oa3r',$,'SpaceHumidityWinter','Humidity of the space or zone for the cold (winter) period that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2190=IFCSIMPLEPROPERTYTEMPLATE('2VChikUH92lex5hc_4Ouj3',$,'DiscontinuedHeating','Indication whether discontinued heating is required/desirable from user/designer view point. (TRUE) if yes, (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2191=IFCSIMPLEPROPERTYTEMPLATE('1yMid7Gpz40h_XWJnZ_2zH',$,'NaturalVentilation','Indication whether the space is required to have natural ventilation (TRUE) or mechanical ventilation (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2192=IFCSIMPLEPROPERTYTEMPLATE('14eM2JBm99WfNyG$qqlvze',$,'NaturalVentilationRate','Indication of the requirement of a particular natural air ventilation rate, given in air changes per hour.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2193=IFCSIMPLEPROPERTYTEMPLATE('07g3S5LjX5DfvStUmWanyT',$,'MechanicalVentilationRate','Indication of the requirement of a particular mechanical air ventilation rate, given in air changes per hour.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2194=IFCSIMPLEPROPERTYTEMPLATE('3Hx1F55PfBFBXVRE2of6z7',$,'AirConditioning','Indication whether this space requires air conditioning provided (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2195=IFCSIMPLEPROPERTYTEMPLATE('1RUAYsmTv6B852qDuwWopi',$,'AirConditioningCentral','Indication whether the space requires a central air conditioning provided (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "AirConditioning" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2196=IFCPROPERTYSETTEMPLATE('2wT8VkuQP3MQRmdZC5tF3m',$,'Pset_TransportElementCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcTransportElement.',$,'IfcTransportElement',(#2197,#2198));
-#2197=IFCSIMPLEPROPERTYTEMPLATE('3FdTF9plL8muA$FvODPOkp',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2198=IFCSIMPLEPROPERTYTEMPLATE('1bQKJoKRXByhLu3AcXYyrq',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the transport element (in case of e.g., a lift) is designed to serve as a fire exit, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2199=IFCPROPERTYSETTEMPLATE('1OmH1PvMHFHgpOxU84A89U',$,'Pset_TransportElementElevator','Definition from IAI: Properties common to the definition of all occurrences of IfcTransportElement with the predefined type ="ELEVATOR"',$,'IfcTransportElement',(#2200,#2202,#2204));
-#2200=IFCSIMPLEPROPERTYTEMPLATE('0SgrfNnFr2w97i0LDsnc0y',$,'ClearWidth','Clear width of the object (elevator). It indicates the distance from the inner surfaces of the elevator car left and right from the elevator door. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2201,$,$,.READWRITE.);
-#2201=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2202=IFCSIMPLEPROPERTYTEMPLATE('0rmoxw8Tb72PkC0zDc7QEU',$,'ClearDepth','Clear depth of the object (elevator). It indicates the distance from the inner surface of the elevator door to the opposite surface of the elevator car. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2203,$,$,.READWRITE.);
-#2203=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2204=IFCSIMPLEPROPERTYTEMPLATE('3XGkBkNXHAefvSjTwOw0OU',$,'ClearHeight','Clear height of the object (elevator). \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2205,$,$,.READWRITE.);
-#2205=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2206=IFCPROPERTYSETTEMPLATE('1H7qQQM5z17hAvmd9THJYG',$,'Pset_ZoneCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcZone.',$,'IfcZone',(#2207,#2208,#2209,#2211,#2213,#2214));
-#2207=IFCSIMPLEPROPERTYTEMPLATE('1NoBEJ$d96wwHy6RlGjFDF',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2208=IFCSIMPLEPROPERTYTEMPLATE('3kapGV4F532Q7SoyvJ7GUe',$,'Category','Category of space usage or utilization of the area. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2209=IFCSIMPLEPROPERTYTEMPLATE('0Si3TAtDLDzx0hAy5ER24Z',$,'GrossAreaPlanned','Total planned gross area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2210,$,$,.READWRITE.);
-#2210=IFCNAMEDUNIT($,.AREAUNIT.);
-#2211=IFCSIMPLEPROPERTYTEMPLATE('03aJRwGb15X9emThvMXS71',$,'NetAreaPlanned','Total planned net area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2212,$,$,.READWRITE.);
-#2212=IFCNAMEDUNIT($,.AREAUNIT.);
-#2213=IFCSIMPLEPROPERTYTEMPLATE('2YLy961GjB_OC9gAtaLOnv',$,'PubliclyAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as a publicly accessible space, e.g., for a public toilet (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2214=IFCSIMPLEPROPERTYTEMPLATE('10b0Wr8Tn0uhwVEDM9L0$$',$,'HandicapAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as an accessible space for handicapped people, e.g., for a public toilet (TRUE) or not (FALSE). This information is often used to declare the need for access for the disabled and for special design requirements of this space.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2215=IFCPROPERTYSETTEMPLATE('1c930Xspn7QPmahgGxuzUx',$,'Pset_BeamCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcBeam.',$,'IfcBeam',(#2216,#2217,#2219,#2221,#2222,#2223));
-#2216=IFCSIMPLEPROPERTYTEMPLATE('3dCuxUH4j7tgF3jPXzeF8F',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2217=IFCSIMPLEPROPERTYTEMPLATE('3X8xXyOdv7Ues7k63O9Ma0',$,'Span','Clear span for this object.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2218,$,$,.READWRITE.);
-#2218=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2219=IFCSIMPLEPROPERTYTEMPLATE('2E0I4QkOvE3PKI$7Y68CY5',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2220,$,$,.READWRITE.);
-#2220=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2221=IFCSIMPLEPROPERTYTEMPLATE('2$pmewtOn6duoixqVp2p6b',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2222=IFCSIMPLEPROPERTYTEMPLATE('2x7fNhMgzFdh8GS7a14K_q',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2223=IFCSIMPLEPROPERTYTEMPLATE('2AUzviNhf2x8G7JCPANC8h',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2224=IFCPROPERTYSETTEMPLATE('28eqRwTdf2yhAwQfW6ZiGA',$,'Pset_ColumnCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcColumn.',$,'IfcColumn',(#2225,#2226,#2228,#2229,#2230));
-#2225=IFCSIMPLEPROPERTYTEMPLATE('1sGeZ5$J14d824K0IuosVa',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2226=IFCSIMPLEPROPERTYTEMPLATE('1U97ZGMVbEPxc7XxUO5kCg',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2227,$,$,.READWRITE.);
-#2227=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2228=IFCSIMPLEPROPERTYTEMPLATE('0sH9HJ2Lr4p9nowu5_naxX',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2229=IFCSIMPLEPROPERTYTEMPLATE('2BPARJ_6PCGBL1NXs6SEB_',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2230=IFCSIMPLEPROPERTYTEMPLATE('2GMPUivI96C94Mjmn1bYlr',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2231=IFCPROPERTYSETTEMPLATE('1ZtZD4MCT129a0acf7hr3p',$,'Pset_CurtainWallCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcCurtainWall.',$,'IfcCurtainWall',(#2232,#2233,#2234,#2235,#2236,#2237,#2239));
-#2232=IFCSIMPLEPROPERTYTEMPLATE('2xgzxjSDP6_h$4n2VxSNRU',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2233=IFCSIMPLEPROPERTYTEMPLATE('0quyHrjET28fTD3ZnCjvkp',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2234=IFCSIMPLEPROPERTYTEMPLATE('3CaaN2Atf7Tv9ClbGmW8dL',$,'FireRating','Fire rating given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2235=IFCSIMPLEPROPERTYTEMPLATE('3FIyuyoMb0bujgTfUDE$vA',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2236=IFCSIMPLEPROPERTYTEMPLATE('34JI0E2G9Ak9VkkqhFA17g',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2237=IFCSIMPLEPROPERTYTEMPLATE('0rRrb4EIXE7fnaf25bRuFq',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Here the total thermal transmittance coefficient through the wall (including all materials).',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2238,$,$,.READWRITE.);
-#2238=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2239=IFCSIMPLEPROPERTYTEMPLATE('0BT$JQ7KP2Qf_2cT8CxcHd',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2240=IFCPROPERTYSETTEMPLATE('0VSUmjws19Ch9umyDBrIDg',$,'Pset_DoorCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcDoor.',$,'IfcDoor',(#2241,#2242,#2243,#2244,#2245,#2246,#2248,#2250,#2251,#2252,#2253,#2254));
-#2241=IFCSIMPLEPROPERTYTEMPLATE('1aVO8CWlH9GAyDnkLLoq$f',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2242=IFCSIMPLEPROPERTYTEMPLATE('07W8hRES94exfhGS5RerTz',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2243=IFCSIMPLEPROPERTYTEMPLATE('2AHjGFTknAmecUGXGm3I$b',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2244=IFCSIMPLEPROPERTYTEMPLATE('2_nNz2Ax5ExBM$7AfoR6pN',$,'SecurityRating','Index based rating system indicating security level.\X2\000A\X0\It is giving according to the national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2245=IFCSIMPLEPROPERTYTEMPLATE('0UAWGeC9n6A8v2aQsPvS3U',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2246=IFCSIMPLEPROPERTYTEMPLATE('23JMwoX197fwO$XElPpwjx',$,'Infiltration','Infiltration flowrate of outside air for the filler object based on the area of the filler object at a pressure level of 50 Pascals. It shall be used, if the length of all joints is unknown. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2247,$,$,.READWRITE.);
-#2247=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2248=IFCSIMPLEPROPERTYTEMPLATE('3FC9dB5JnCmxWK7TG28ZI4',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2249,$,$,.READWRITE.);
-#2249=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2250=IFCSIMPLEPROPERTYTEMPLATE('2R0eSNbtn2xBswpAWLfJBh',$,'GlazingAreaFraction','Fraction of the glazing area relative to the total area of the filling element. \X2\000A\X0\It shall be used, if the glazing area is not given separately for all panels within the filling element. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2251=IFCSIMPLEPROPERTYTEMPLATE('03p44PiSX3OQ3u_CsHEUT8',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\It is giving according to the requirements of the national building code. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2252=IFCSIMPLEPROPERTYTEMPLATE('2wLbHC8r55NB54qQvVJMBb',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit door in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2253=IFCSIMPLEPROPERTYTEMPLATE('22rs1biev19fjknN_m3qhZ',$,'SelfClosing','Indication whether this object is designed to close automatically after use (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2254=IFCSIMPLEPROPERTYTEMPLATE('0U48cdD8D3S9oiQ6TIhmCL',$,'SmokeStop','Indication whether the object is designed to provide a smoke stop (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2255=IFCPROPERTYSETTEMPLATE('2xlKXrDpTEze$IuZZ4SJX$',$,'Pset_DoorWindowGlazingType','Definition from IAI: Properties common to the definition of the glazing component of occurrences of IfcDoor and IfcWindow, used for thermal and lighting calculations.',$,'IfcDoor,IfcWindow',(#2256,#2257,#2259,#2261,#2263,#2264,#2265,#2266,#2267,#2268,#2269,#2270,#2271,#2272,#2273,#2275));
-#2256=IFCSIMPLEPROPERTYTEMPLATE('1GcRXk0UH7Qul1ueuKrVzU',$,'GlassLayers','Number of glass layers within the frame. E.g. "2" for double glazing. ',.P_SINGLEVALUE.,'IfcCountMeasure ',$,$,$,$,$,.READWRITE.);
-#2257=IFCSIMPLEPROPERTYTEMPLATE('2Gii1CYhLDQwt6G3BL4tFy',$,'GlassThickness1','Thickness of the first (inner) glass layer. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2258,$,$,.READWRITE.);
-#2258=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2259=IFCSIMPLEPROPERTYTEMPLATE('2GgIYmp0P7DQjfVSFeasCK',$,'GlassThickness2','Thickness of the second (intermediate or outer) glass layer.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2260,$,$,.READWRITE.);
-#2260=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2261=IFCSIMPLEPROPERTYTEMPLATE('2MoHLRJc13$wNs3lyiCB6p',$,'GlassThickness3','Thickness of the third (outer) glass layer. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2262,$,$,.READWRITE.);
-#2262=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2263=IFCSIMPLEPROPERTYTEMPLATE('0hYUyPq4X5BwoMABeDZY_H',$,'FillGas','Name of the gas by which the gap between two glass layers is filled. It is given for information purposes only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2264=IFCSIMPLEPROPERTYTEMPLATE('1qV3vWNN90NQ8sOpId7b9h',$,'GlassColor','Color (tint) selection for this glazing. It is given for information purposes only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2265=IFCSIMPLEPROPERTYTEMPLATE('2yVFQhWxb0wQgDEhikr1_Q',$,'IsTempered','Indication whether the glass is tempered (TRUE) or not (FALSE) .',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2266=IFCSIMPLEPROPERTYTEMPLATE('34$ziiM5j8ZBqSF_bklIjZ',$,'IsLaminated','Indication whether the glass is layered with other materials (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2267=IFCSIMPLEPROPERTYTEMPLATE('17BFnoZ5b4Qg8uswPvVlUx',$,'IsCoated','Indication whether the glass is coated with a material (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2268=IFCSIMPLEPROPERTYTEMPLATE('3fZRhT00L6exGv2SRLia3n',$,'IsWired','Indication whether the glass includes a contained wire mesh to prevent break-in (TRUE) or not (FALSE) ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2269=IFCSIMPLEPROPERTYTEMPLATE('2nce3BaVDCcQKrVb$xNSYY',$,'Translucency','Fraction of the visible light that passes the glazing at normal incidence. It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2270=IFCSIMPLEPROPERTYTEMPLATE('12pUi2mInFu9d_I0IWg9f0',$,'Reflectivity','Fraction of the visible light that is reflected by the glazing at normal incidence. It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2271=IFCSIMPLEPROPERTYTEMPLATE('2t9HAF0wvDDhS_vXsW_5KG',$,'BeamRadiationTransmittance','Direct solar radiation transmittance that passes the glazing at normal incidence. It is a value without unit, often referred to as (Tsol). ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2272=IFCSIMPLEPROPERTYTEMPLATE('2HQFfgS5TCy8NptyoP$_Zs',$,'SolarHeatGainTransmittance','Total solar heat transmittance that passes the glazing at normal incidence. It is a value without unit, often referred to as (SHGC):.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2273=IFCSIMPLEPROPERTYTEMPLATE('0HN0BVP_v88w2e7XkQI8C6',$,'ThermalTransmittanceSummer','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Summer thermal transmittance coefficient of the glazing only, often referred to as (U-value) ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2274,$,$,.READWRITE.);
-#2274=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2275=IFCSIMPLEPROPERTYTEMPLATE('33Sf2pbqT37Ac0E19Dtsgu',$,'ThermalTransmittanceWinter','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Winter thermal transmittance coefficient of the glazing only, often referred to as (U-value) ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2276,$,$,.READWRITE.);
-#2276=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2277=IFCPROPERTYSETTEMPLATE('1Ie1wGUhjDNBD$f0Lrqjls',$,'Pset_DoorWindowShadingType','Definition from IAI: Properties common to the definition of the shading component of occurrences of IfcDoor and IfcWindow, used for static (simplified) shading calculations.',$,'IfcDoor,IfcWindow',(#2278,#2279,#2280));
-#2278=IFCSIMPLEPROPERTYTEMPLATE('0i1eZK695AvfDjTfhH8Tnw',$,'ExternalShadingCoefficient','Radiation transmission coefficient of the outside shading device. It is a value without unit.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2279=IFCSIMPLEPROPERTYTEMPLATE('3Omd3$74P2yQV1yN__0ZHg',$,'InternalShadingCoefficient','Radiation transmission coefficient of the inside shading device, symbol "b-value". It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2280=IFCSIMPLEPROPERTYTEMPLATE('0QP51Ivg55XhnCyAB9YT9P',$,'InsetShadingCoefficient','Radiation transmission coefficient of the shading device inside the glazing, symbol "b-value". It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2281=IFCPROPERTYSETTEMPLATE('2sFsnZEF92Xg0fndZUkiAK',$,'Pset_MemberCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcMember.',$,'IfcMember',(#2282,#2283,#2285,#2287,#2288,#2289));
-#2282=IFCSIMPLEPROPERTYTEMPLATE('2B2zKak555twJ4JCuQej4z',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2283=IFCSIMPLEPROPERTYTEMPLATE('0muuwnprLBOQ14CWmrfCM$',$,'Span','Clear span for this object.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2284,$,$,.READWRITE.);
-#2284=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2285=IFCSIMPLEPROPERTYTEMPLATE('1iYTlEJ8D2rPmAKRjcU986',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2286,$,$,.READWRITE.);
-#2286=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2287=IFCSIMPLEPROPERTYTEMPLATE('1ZmAb5R$T4PQXZVhVapmkT',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2288=IFCSIMPLEPROPERTYTEMPLATE('0maLmm9N55IAzpdVd97KqK',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2289=IFCSIMPLEPROPERTYTEMPLATE('2C0NFr27L1QPbSh0YF03XH',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2290=IFCPROPERTYSETTEMPLATE('0vD_FQ_K52i8Q$ollyYTVK',$,'Pset_PlateCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcPlate.',$,'IfcPlate',(#2291,#2292,#2293,#2294,#2295,#2296));
-#2291=IFCSIMPLEPROPERTYTEMPLATE('0Om4bx7cPAWu85tihb2Tz3',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2292=IFCSIMPLEPROPERTYTEMPLATE('0AAoYHZ2LBv9VWsXVWEu8S',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2293=IFCSIMPLEPROPERTYTEMPLATE('1yrLehAgPAC9duX2Ud_eu1',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2294=IFCSIMPLEPROPERTYTEMPLATE('2CQmaqHb5AIegG22mslUiC',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2295=IFCSIMPLEPROPERTYTEMPLATE('1ZW_x$fFHA5wFPa2Yk9Ymy',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2296=IFCSIMPLEPROPERTYTEMPLATE('0Sv1BlX4z32x7VyVG4KFvW',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2297,$,$,.READWRITE.);
-#2297=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2298=IFCPROPERTYSETTEMPLATE('2IRhHi4xT82QAETxRm9xpe',$,'Pset_RailingCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRailing.',$,'IfcRailing',(#2299,#2300,#2302,#2304));
-#2299=IFCSIMPLEPROPERTYTEMPLATE('13E35afInAYgKmVKYSEVqT',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2300=IFCSIMPLEPROPERTYTEMPLATE('3GyINZUarF8AsTIgFILdRx',$,'Height','Height of the object. It is the upper hight of the railing above the floor or stair.\X2\000A\X0\The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2301,$,$,.READWRITE.);
-#2301=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2302=IFCSIMPLEPROPERTYTEMPLATE('17zBkIyl9EcAu0RjOsHO0Y',$,'Diameter','Diameter of the object. It is the diameter of the handrail of the railing.\X2\000A\X0\The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.\X2\000A\X0\Here the diameter of the hand or guardrail within the railing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2303,$,$,.READWRITE.);
-#2303=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2304=IFCSIMPLEPROPERTYTEMPLATE('155VeElhTE$uKtLRk8YimC',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2305=IFCPROPERTYSETTEMPLATE('3Ju5vJ1Dr7AezXObWcS3kX',$,'Pset_RampCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRamp.',$,'IfcRamp',(#2306,#2307,#2309,#2311,#2312,#2313,#2314,#2315));
-#2306=IFCSIMPLEPROPERTYTEMPLATE('0pKAa9Mkf2BfLYlV2ZCNzv',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2307=IFCSIMPLEPROPERTYTEMPLATE('2jCtZEKUX2tA5x2wbg_Kcf',$,'RequiredHeadroom','Required headroom clearance for the passageway according to the applicable building code or additional requirements.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2308,$,$,.READWRITE.);
-#2308=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2309=IFCSIMPLEPROPERTYTEMPLATE('0BqnjQVvL8sfJgonBJARYx',$,'RequiredSlope','Required sloping angle of the object - relative to horizontal (0.0 degrees).\X2\000A\X0\Required maximum slope for the passageway according to the applicable building code or additional requirements ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2310,$,$,.READWRITE.);
-#2310=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2311=IFCSIMPLEPROPERTYTEMPLATE('0R$utGiHbCsPYwBiji_cBJ',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2312=IFCSIMPLEPROPERTYTEMPLATE('0glz31w8LEFRHn1tLuN2ZG',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2313=IFCSIMPLEPROPERTYTEMPLATE('3WQzmL05X9QwLFHdN0C4lH',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit ramp in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2314=IFCSIMPLEPROPERTYTEMPLATE('0MDBOPB4TBOhfVUSKvNu0d',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\Set to (TRUE) if this ramp is rated as handicap accessible according the local building codes, otherwise (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2315=IFCSIMPLEPROPERTYTEMPLATE('1dCCdyp5v6kA_$2XB5ObbU',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2316=IFCPROPERTYSETTEMPLATE('1ZrkfJkoT0oBaRMfvowUHu',$,'Pset_RampFlightCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRampFlight.',$,'IfcRampFlight',(#2317,#2318,#2320));
-#2317=IFCSIMPLEPROPERTYTEMPLATE('3eqLLDYt5F5v4o66D9$0Vq',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2318=IFCSIMPLEPROPERTYTEMPLATE('3FBI0nqin7LB1KcXBTnSYn',$,'Headroom','Actual headroom clearance for the passageway according to the current design. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2319,$,$,.READWRITE.);
-#2319=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2320=IFCSIMPLEPROPERTYTEMPLATE('3FKuTt2jX2jQ$8t1fVhnip',$,'Slope','Sloping angle of the object - relative to horizontal (0.0 degrees). \X2\000A\X0\Actual maximum slope for the passageway according to the current design.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2321,$,$,.READWRITE.);
-#2321=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2322=IFCPROPERTYSETTEMPLATE('31RwMN3nD7juJ42N68P$yh',$,'Pset_RoofCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRoof. Note: Properties for ProjectedArea and TotalArea added in IFC 2x3',$,'IfcRoof',(#2323,#2324,#2325,#2326,#2328));
-#2323=IFCSIMPLEPROPERTYTEMPLATE('0T1nGByi1CTgK9STI0lVvG',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2324=IFCSIMPLEPROPERTYTEMPLATE('1ZcnWUE8f959kifAk7U59l',$,'FireRating','Fire rating for this object. It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2325=IFCSIMPLEPROPERTYTEMPLATE('030HisNoTBQ83iFwlkq3_7',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2326=IFCSIMPLEPROPERTYTEMPLATE('35mKZ7kSD9cOvJtAJU954g',$,'ProjectedArea','Area of the roof projected onto a 2D horizontal plane',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2327,$,$,.READWRITE.);
-#2327=IFCNAMEDUNIT($,.AREAUNIT.);
-#2328=IFCSIMPLEPROPERTYTEMPLATE('2eEkUXxbbAA8555U0u9Pr8',$,'TotalArea','Total exposed area of the roof',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2329,$,$,.READWRITE.);
-#2329=IFCNAMEDUNIT($,.AREAUNIT.);
-#2330=IFCPROPERTYSETTEMPLATE('1hFclkCabFAAFI47sqCCcA',$,'Pset_SlabCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSlab. Note: Properties for PitchAngle added in IFC 2x3',$,'IfcSlab',(#2331,#2332,#2333,#2334,#2335,#2336,#2338,#2339,#2340,#2341));
-#2331=IFCSIMPLEPROPERTYTEMPLATE('0JYvkwho90teYF57B2xv17',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2332=IFCSIMPLEPROPERTYTEMPLATE('2WcTcpfav9cBYcV_s3wUxX',$,'AcousticRating','Acoustic rating for this object. It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2333=IFCSIMPLEPROPERTYTEMPLATE('1c1kHJJmb2Swg7eWtAy0i8',$,'FireRating',' Fire rating for this object. It is given according to the national fire safety classification. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2334=IFCSIMPLEPROPERTYTEMPLATE('0lIDqXXBP5lgbBgNodw0qX',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2335=IFCSIMPLEPROPERTYTEMPLATE('0kXxcWLJTFw9XXarkO2$zV',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface, It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2336=IFCSIMPLEPROPERTYTEMPLATE('1K1f1DO1H31uk3rJGZfVy1',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material. Here the total thermal transmittance coefficient through the slab (including all materials). ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure ',$,$,#2337,$,$,.READWRITE.);
-#2337=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2338=IFCSIMPLEPROPERTYTEMPLATE('26K12TjEnBlwXjufHIzesu',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2339=IFCSIMPLEPROPERTYTEMPLATE('3eEBoh$dP3kOQ$SsoG83AD',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2340=IFCSIMPLEPROPERTYTEMPLATE('32Yl9_1qb47hNF7DAd_28f',$,'Compartmentation','Indication whether the object is designed to serve as a fire compartmentation (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2341=IFCSIMPLEPROPERTYTEMPLATE('0yuvaaeyvEIOxE7WK0bwJ5',$,'PitchAngle','Angle of the slab to the horizontal when used as a component for the roof (specified as 0 degrees or not asserted for cases where the slab is not used as a roof component).',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2342,$,$,.READWRITE.);
-#2342=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2343=IFCPROPERTYSETTEMPLATE('1rvCjPeF95UukbbQjvxDK9',$,'Pset_StairCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcStair.',$,'IfcStair',(#2344,#2345,#2346,#2347,#2349,#2351,#2353,#2354,#2355,#2356,#2357));
-#2344=IFCSIMPLEPROPERTYTEMPLATE('2c4fraNX1AQRFzmelGmtck',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2345=IFCSIMPLEPROPERTYTEMPLATE('2hZEgQUdnEDOokbE3l9dWS',$,'NumberOfRiser','Total number of the risers included in the stair',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2346=IFCSIMPLEPROPERTYTEMPLATE('2P$4P39Wj8fBnMGO_4pHnx',$,'NumberOfTreads','Total number of treads included in the stair',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2347=IFCSIMPLEPROPERTYTEMPLATE('3oUjGlFOb5O9$8HJDSZmeh',$,'RiserHeight','Vertical distance from tread to tread. \X2\000A\X0\The riser height is supposed to be equal for all steps of a stair or stair flight.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2348,$,$,.READWRITE.);
-#2348=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2349=IFCSIMPLEPROPERTYTEMPLATE('0uECIBB9D19RuqXviieV4o',$,'TreadLength','Horizontal distance from the front of the thread to the front of the next tread. \X2\000A\X0\The tread length is supposed to be equal for all steps of the stair or stair flight at the walking line.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2350,$,$,.READWRITE.);
-#2350=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2351=IFCSIMPLEPROPERTYTEMPLATE('0autU6ctzE$x2FqgO$76ZF',$,'RequiredHeadroom','Required headroom clearance for the passageway according to the applicable building code or additional requirements',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2352,$,$,.READWRITE.);
-#2352=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2353=IFCSIMPLEPROPERTYTEMPLATE('3OxCF_n$1CaBMlxtvsGV5u',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\Set to (TRUE) if this stair is rated as handicap accessible according the local building codes, otherwise (FALSE). Accessibility maybe provided by additional means.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2354=IFCSIMPLEPROPERTYTEMPLATE('2OJ2azbbjADRoqsnZFP7ZJ',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2355=IFCSIMPLEPROPERTYTEMPLATE('11ZB3CgND9rxXxcoeC0ay8',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2356=IFCSIMPLEPROPERTYTEMPLATE('3xn7aTAuL2RPAc$VAHEgRw',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit stair in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2357=IFCSIMPLEPROPERTYTEMPLATE('3IK9G29Hv8KAvAv$dtYgZc',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2358=IFCPROPERTYSETTEMPLATE('1JeJFRQgvAx9FWNlmie9aC',$,'Pset_StairFlightCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcStairFlight.',$,'IfcStairFlight',(#2359,#2360,#2361,#2362,#2364,#2366,#2368,#2370,#2372,#2374,#2376));
-#2359=IFCSIMPLEPROPERTYTEMPLATE('3AE3EXb$DBlRbemamV5BOw',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2360=IFCSIMPLEPROPERTYTEMPLATE('0zUIWzbrHA1OUZfM3PTez$',$,'NumberOfRiser','Total number of the risers included in the stair flight',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2361=IFCSIMPLEPROPERTYTEMPLATE('2UKD_LAsvDshQlR5ZrE0jM',$,'NumberOfTreads','Total number of treads included in the stair flight',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2362=IFCSIMPLEPROPERTYTEMPLATE('2G$1YJBQLAj9o4H1Hmeica',$,'RiserHeight','Vertical distance from tread to tread. \X2\000A\X0\The riser height is supposed to be equal for all steps of a stair or stair flight.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2363,$,$,.READWRITE.);
-#2363=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2364=IFCSIMPLEPROPERTYTEMPLATE('1GPuLHbMvAuQulHSpoybkm',$,'TreadLength','Horizontal distance from the front of the thread to the front of the next tread. \X2\000A\X0\The tread length is supposed to be equal for all steps of the stair or stair flight at the walking line.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2365,$,$,.READWRITE.);
-#2365=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2366=IFCSIMPLEPROPERTYTEMPLATE('1sAH_UnmX9RwRSax8Z_ZHj',$,'NosingLength','Horizontal distance from the front of the tread to the riser underneath. It is the overhang of the tread.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2367,$,$,.READWRITE.);
-#2367=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2368=IFCSIMPLEPROPERTYTEMPLATE('0L$YE6l659QePA4rjOX7WN',$,'WalkingLineOffset','Offset of the walking line from the inner side of the flight. \X2\000A\X0\Note: the walking line may have a own shape representation (in case of inconsistencies, the value derived from the shape representation shall take precedence).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2369,$,$,.READWRITE.);
-#2369=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2370=IFCSIMPLEPROPERTYTEMPLATE('2ew9k9eTHAxQGDlKWtkxNo',$,'TreadLengthAtOffset','Length of treads at a given offset.\X2\000A\X0\Walking line position is given by the ''WalkingLineOffset''. The resulting value should normally be identical with TreadLength, it may be given in addition, if the walking line offset for building code calculations is different from that used in design.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2371,$,$,.READWRITE.);
-#2371=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2372=IFCSIMPLEPROPERTYTEMPLATE('3Q3olDpSjA5x4oSNiofB_R',$,'TreadLengthAtInnerSide','Minimum length of treads at the inner side of the winder. \X2\000A\X0\Only relevant in case of winding flights, for straight flights it is identical with IfcStairFlight.TreadLength. It is a pre-calculated value, in case of inconsistencies, the value derived from the shape representation shall take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2373,$,$,.READWRITE.);
-#2373=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2374=IFCSIMPLEPROPERTYTEMPLATE('2R51ZkgvjB3RQKCWa_bIky',$,'Headroom','Actual headroom clearance for the passageway according to the current design. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2375,$,$,.READWRITE.);
-#2375=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2376=IFCSIMPLEPROPERTYTEMPLATE('2ug$9ZJiP1tf7poo$fFZYU',$,'WaistThickness','Minimum thickness of the stair flight, measured perpendicular to the slope of the flight to the inner corner of riser and tread. It is a pre-calculated value, in case of inconsistencies, the value derived from the shape representation shall take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2377,$,$,.READWRITE.);
-#2377=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2378=IFCPROPERTYSETTEMPLATE('172wO35KLEcQLTa2H2YY$p',$,'Pset_WallCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcWall and IfcWallStandardCase.',$,'IfcWall,IfcWallStandardCase',(#2379,#2380,#2381,#2382,#2383,#2384,#2386,#2387,#2388,#2389));
-#2379=IFCSIMPLEPROPERTYTEMPLATE('0LiF0wE8j7U8LGYhCZ1CYm',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2380=IFCSIMPLEPROPERTYTEMPLATE('2OWonmTiP3NfoMessbYt0x',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2381=IFCSIMPLEPROPERTYTEMPLATE('22v28tbA5CHx5m1d3A0Qi4',$,'FireRating','Fire rating given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2382=IFCSIMPLEPROPERTYTEMPLATE('3vHFJIO4T9IOIPV3LVcj_Y',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2383=IFCSIMPLEPROPERTYTEMPLATE('3jtLr2XML9EgWwne2EJ69p',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2384=IFCSIMPLEPROPERTYTEMPLATE('0WLuCf1Dz82OMhnSIdb_lZ',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Here the total thermal transmittance coefficient through the wall (including all materials).',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2385,$,$,.READWRITE.);
-#2385=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2386=IFCSIMPLEPROPERTYTEMPLATE('16$TEhh1n739ASu224f8yU',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2387=IFCSIMPLEPROPERTYTEMPLATE('04y3vE0kH4CO2R_EqZD5N8',$,'ExtendToStructure','Indicates whether the object extend to the structure above (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2388=IFCSIMPLEPROPERTYTEMPLATE('2kX9O6bgrAovk2U1QUFzhS',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2389=IFCSIMPLEPROPERTYTEMPLATE('3605PrOSvFzPzb7Vle6w$t',$,'Compartmentation','Indication whether the object is designed to serve as a fire compartmentation (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2390=IFCPROPERTYSETTEMPLATE('0EVVeXPer2qeREHObMeLBe',$,'Pset_WindowCommon','Definition from IAI: Properties common to the definition of all occurrences of Window.',$,'IfcWindow',(#2391,#2392,#2393,#2394,#2395,#2396,#2398,#2400,#2401));
-#2391=IFCSIMPLEPROPERTYTEMPLATE('29qkgcVvT3jf077tJHJRT3',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2392=IFCSIMPLEPROPERTYTEMPLATE('1bySXZQWf1Uh3laWyRWg9U',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2393=IFCSIMPLEPROPERTYTEMPLATE('3d0PrRZX54dQ178ebNwH4Y',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2394=IFCSIMPLEPROPERTYTEMPLATE('29aiZui$rCyOt6LHb$vJvm',$,'SecurityRating','Index based rating system indicating security level.\X2\000A\X0\It is giving according to the national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2395=IFCSIMPLEPROPERTYTEMPLATE('2ZI6yQu1r0XR4xHPtU4BCL',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2396=IFCSIMPLEPROPERTYTEMPLATE('1$kAtdxrv3tRI1HqVo5gS$',$,'Infiltration','Infiltration flowrate of outside air for the filler object based on the area of the filler object at a pressure level of 50 Pascals. It shall be used, if the length of all joints is unknown. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2397,$,$,.READWRITE.);
-#2397=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2398=IFCSIMPLEPROPERTYTEMPLATE('02$arV9q90D8sXWEE_Sc2j',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,#2399,$,$,.READWRITE.);
-#2399=IFCDERIVEDUNIT($,.THERMALTRANSMITTANCEUNIT.,$,$);
-#2400=IFCSIMPLEPROPERTYTEMPLATE('1$800PeEPD$uCBxzAG42wi',$,'GlazingAreaFraction','Fraction of the glazing area relative to the total area of the filling element. \X2\000A\X0\It shall be used, if the glazing area is not given separately for all panels within the filling element. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2401=IFCSIMPLEPROPERTYTEMPLATE('3vS1YeF$HFLxuihjivBtIK',$,'SmokeStop','Indication whether the object is designed to provide a smoke stop (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2402=IFCPROPERTYSETTEMPLATE('2OmRtSYHjE_Rqlaa_zge7M',$,'Pset_AirSideSystemInformation','Definition from IAI: Attributes that apply to an air side HVAC system. HISTORY: New property set in IFC Release 1.0.',$,'IfcSpatialStructureElement,IfcSystem',(#2403,#2404,#2405,#2407,#2409,#2411,#2413,#2415,#2417,#2419,#2420,#2421,#2422,#2423,#2424,#2426,#2428,#2430));
-#2403=IFCSIMPLEPROPERTYTEMPLATE('1Fim$x2rT4CAM966eAEpfH',$,'Name','The name of the air side system ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2404=IFCSIMPLEPROPERTYTEMPLATE('2x$sxx$Sb3k8Tdv13cxLX7',$,'Description','The description of the air side system.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2405=IFCSIMPLEPROPERTYTEMPLATE('1z1OrZ81T1689a_Kcv$7Qf',$,'AirSideSystemType','This enumeration specifies the basic types of possible air side systems (e.g., Constant Volume, Variable Volume, etc.) ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2406,$,$,$,.READWRITE.);
-#2406=IFCPROPERTYENUMERATION('PEnum_AirSideSystemType',(IFCLABEL('CONSTANTVOLUME'),IFCLABEL('CONSTANTVOLUMESINGLEZONE'),IFCLABEL('CONSTANTVOLUMEMULTIPLEZONEREHEAT'),IFCLABEL('CONSTANTVOLUMEBYPASS'),IFCLABEL('VARIABLEAIRVOLUME'),IFCLABEL('VARIABLEAIRVOLUMEREHEAT'),IFCLABEL('VARIABLEAIRVOLUMEINDUCTION'),IFCLABEL('VARIABLEAIRVOLUMEFANPOWERED'),IFCLABEL('VARIABLEAIRVOLUMEDUALCONDUIT'),IFCLABEL('VARIABLEAIRVOLUMEVARIABLEDIFFUSERS'),IFCLABEL('VARIABLEAIRVOLUMEVARIABLETEMPERATURE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
-#2407=IFCSIMPLEPROPERTYTEMPLATE('2h05gaw4v5Ng2lFyMcA9L4',$,'AirSideSystemDistributionType','This enumeration defines the basic types of air side systems (e.g., SingleDuct, DualDuct, Multizone, etc.) ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2408,$,$,$,.READWRITE.);
-#2408=IFCPROPERTYENUMERATION('PEnum_AirSideSystemDistributionType',(IFCLABEL('SINGLEDUCT'),IFCLABEL('DUALDUCT'),IFCLABEL('MULTIZONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2409=IFCSIMPLEPROPERTYTEMPLATE('0AmIPi6Y1FgxhIHlfuOqXw',$,'TotalAirflow','The total design supply air flowrate required for the system for either heating or cooling conditions, whichever is greater. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2410,$,$,.READWRITE.);
-#2410=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2411=IFCSIMPLEPROPERTYTEMPLATE('3Yr54vX8vAZvD5AmOF7IKJ',$,'EnergyGainTotal','The total amount of energy gains for the spaces served by the system during the peak cooling conditions, plus any system-level total energy gains. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2412,$,$,.READWRITE.);
-#2412=IFCNAMEDUNIT($,.POWERUNIT.);
-#2413=IFCSIMPLEPROPERTYTEMPLATE('1RrjhPB_n5zuPqVVjSMHpF',$,'AirflowSensible','The air flowrate required to satisfy the sensible peak loads. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2414,$,$,.READWRITE.);
-#2414=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2415=IFCSIMPLEPROPERTYTEMPLATE('1EInmB0iT95OkdGpr4F4EA',$,'EnergyGainSensible','The sum of total energy gains for the spaces served by the system during the peak cooling conditions, plus any system-level sensible energy gains. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2416,$,$,.READWRITE.);
-#2416=IFCNAMEDUNIT($,.POWERUNIT.);
-#2417=IFCSIMPLEPROPERTYTEMPLATE('2APHV4SZTETvOAjGEAR$CV',$,'EnergyLoss','The sum of energy losses for the spaces served by the system during the peak heating conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2418,$,$,.READWRITE.);
-#2418=IFCNAMEDUNIT($,.POWERUNIT.);
-#2419=IFCSIMPLEPROPERTYTEMPLATE('0of4$JpGH9m9f8LrLP2mmG',$,'LightingDiversity','Lighting diversity. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2420=IFCSIMPLEPROPERTYTEMPLATE('0N9d1FLwj1J90A_$vmsmR_',$,'InfiltrationDiversitySummer','Diversity factor for Summer infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2421=IFCSIMPLEPROPERTYTEMPLATE('0TC9Wuu7z5Z8H3zKpttEEN',$,'InfiltrationDiversityWinter','Diversity factor for Winter infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2422=IFCSIMPLEPROPERTYTEMPLATE('0UTWculFD9RPHKS2_bWBVQ',$,'ApplianceDiversity','Diversity of appliance load. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2423=IFCSIMPLEPROPERTYTEMPLATE('1W$ANI4Pn3F9_h6mA6k_8p',$,'LoadSafetyFactor','Load safety factor. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2424=IFCSIMPLEPROPERTYTEMPLATE('0kIUoggrjAIRd_W5nAOAQq',$,'HeatingTemperatureDelta','Heating temperature difference for calculating space air flow rates ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2425,$,$,.READWRITE.);
-#2425=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2426=IFCSIMPLEPROPERTYTEMPLATE('0Roxjsn4L1g8S$bV0q_XWp',$,'CoolingTemperatureDelta','Cooling temperature difference for calculating space air flow rates ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2427,$,$,.READWRITE.);
-#2427=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2428=IFCSIMPLEPROPERTYTEMPLATE('0wFp5AD296jheNRcT2CxW_',$,'Ventilation','Required outside air ventilation. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2429,$,$,.READWRITE.);
-#2429=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2430=IFCSIMPLEPROPERTYTEMPLATE('2qK99Qa$X2mOndjDvgFNeP',$,'FanPower','Fan motor loads contributing to the cooling load. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2431,$,$,.READWRITE.);
-#2431=IFCNAMEDUNIT($,.POWERUNIT.);
-#2432=IFCPROPERTYSETTEMPLATE('29KWCuqL10JOZzyBBw5qvm',$,'Pset_DistributionChamberElementTypeFormedDuct','Definition from BS6100 100 3410: Space formed in the ground for the passage of pipes, cables, ducts.',$,'IfcDistributionChamberElementType',(#2433,#2435,#2437,#2438,#2440,#2441,#2443,#2444,#2445));
-#2433=IFCSIMPLEPROPERTYTEMPLATE('3JbWOItRr4mgPVQkfMUHGw',$,'ClearWidth','The width of the formed space in the duct.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2434,$,$,.READWRITE.);
-#2434=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2435=IFCSIMPLEPROPERTYTEMPLATE('3BTMQ$jBr4MwypanlCMFIX',$,'ClearDepth','The depth of the formed space in the duct.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2436,$,$,.READWRITE.);
-#2436=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2437=IFCSIMPLEPROPERTYTEMPLATE('2ugdpJxpH2deuuCYmGZDc0',$,'WallMaterial','The material from which the wall of the duct is constructed.\X2\000A\X0\NOTE: It is assumed that duct walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2438=IFCSIMPLEPROPERTYTEMPLATE('2_k_IqJtn8VQjjt9PR$Pmg',$,'WallThickness','The thickness of the duct wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2439,$,$,.READWRITE.);
-#2439=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2440=IFCSIMPLEPROPERTYTEMPLATE('1v3eWtqET1lOYuVJ4IJU05',$,'BaseMaterial','The material from which the base of the duct is constructed.\X2\000A\X0\NOTE: It is assumed that duct base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2441=IFCSIMPLEPROPERTYTEMPLATE('2jfQAuX8L11uFlb_d7EXDt',$,'BaseThickness','The thickness of the duct base construction\X2\000A\X0\NOTE: It is assumed that duct base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2442,$,$,.READWRITE.);
-#2442=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2443=IFCSIMPLEPROPERTYTEMPLATE('1Uo4CSTeL6UhxBSyLszvNI',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2444=IFCSIMPLEPROPERTYTEMPLATE('00j9dwYybFkhhhdR3lzi0G',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2445=IFCSIMPLEPROPERTYTEMPLATE('1YC1EHWzv5ahoqzYgqeIxE',$,'FillMaterial','The material that is used to fill the duct (where used).',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2446=IFCPROPERTYSETTEMPLATE('1X61$czn9E78V3QWoaGJd2',$,'Pset_DistributionChamberElementTypeInspectionChamber','Definition from IAI: Chamber constructed on a drain, sewer or pipeline and with a removable cover, that permits visible inspection.',$,'IfcDistributionChamberElementType',(#2447,#2449,#2451,#2453,#2455,#2456,#2458,#2459,#2461,#2462,#2463,#2465,#2467));
-#2447=IFCSIMPLEPROPERTYTEMPLATE('0ROslt6J9CUwgDqG$T7cs_',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2448,$,$,.READWRITE.);
-#2448=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2449=IFCSIMPLEPROPERTYTEMPLATE('1n8zV1sQn4YeTp1DHw9HGA',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2450,$,$,.READWRITE.);
-#2450=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2451=IFCSIMPLEPROPERTYTEMPLATE('33Xpy5JTnDqvdO75F41Uns',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2452,$,$,.READWRITE.);
-#2452=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2453=IFCSIMPLEPROPERTYTEMPLATE('1vDN6SoY1EvelxfLSly5A$',$,'SoffitLevel','Level of the highest internal part of the cross section. (BS6100 250 8002)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2454,$,$,.READWRITE.);
-#2454=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2455=IFCSIMPLEPROPERTYTEMPLATE('2TBHtfR1rF19UW3STBdiIH',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2456=IFCSIMPLEPROPERTYTEMPLATE('1ZCw$cFSz579I6r__nLZXs',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2457,$,$,.READWRITE.);
-#2457=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2458=IFCSIMPLEPROPERTYTEMPLATE('2sDvzhNKDDog2UVGcFHbWA',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2459=IFCSIMPLEPROPERTYTEMPLATE('37nIYiVOv8Ggmzj5yyUEyN',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2460,$,$,.READWRITE.);
-#2460=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2461=IFCSIMPLEPROPERTYTEMPLATE('2w0fjOKnX0muwrK5ujhuGq',$,'WithBackdrop','Indicates whether the chamber has a backdrop or tumbling bay (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2462=IFCSIMPLEPROPERTYTEMPLATE('0fjXDlwmv58fRBZ7gD$XD6',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2463=IFCSIMPLEPROPERTYTEMPLATE('0EcKxh4un4Av$_ExtB_pYx',$,'AccessLengthOrRadius','The length of the chamber access cover or, where the plan shape of the cover is circular, the radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2464,$,$,.READWRITE.);
-#2464=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2465=IFCSIMPLEPROPERTYTEMPLATE('1uvIEApJj1ufcEQd7Ynt2C',$,'AccessWidth','The width of the chamber access cover where the plan shape of the cover is not circular.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2466,$,$,.READWRITE.);
-#2466=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2467=IFCSIMPLEPROPERTYTEMPLATE('3b2CdnCUP8M94W$3kdqwrS',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2468=IFCPROPERTYSETTEMPLATE('0Cr8qVpyPDzAKOiTftZ3Rs',$,'Pset_DistributionChamberElementTypeInspectionPit','Definition from IAI: Recess or chamber formed to permit access for inspection of substructure and services (definition modified from BS6100 221 4128).',$,'IfcDistributionChamberElementType',(#2469,#2471,#2473));
-#2469=IFCSIMPLEPROPERTYTEMPLATE('3OZ2Sgrjb9nfhMROoZsJfO',$,'Length','The length of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2470,$,$,.READWRITE.);
-#2470=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2471=IFCSIMPLEPROPERTYTEMPLATE('1bBEDq7Ab5cxic05xzM5yz',$,'Width','The width of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2472,$,$,.READWRITE.);
-#2472=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2473=IFCSIMPLEPROPERTYTEMPLATE('3IEdYqJw5DpAqIv1Df4fWX',$,'Depth','The depth of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2474,$,$,.READWRITE.);
-#2474=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2475=IFCPROPERTYSETTEMPLATE('1BsWYthnnBmx6eMbdDtfPz',$,'Pset_DistributionChamberElementTypeManhole','Definition from IAI: Chamber constructed on a drain, sewer or pipeline and with a removable cover, that permits the entry of a person.',$,'IfcDistributionChamberElementType',(#2476,#2478,#2480,#2481,#2483,#2484,#2486,#2487,#2488,#2489,#2490,#2492,#2494));
-#2476=IFCSIMPLEPROPERTYTEMPLATE('0$rGqZThPC6xdG_NYyH8Gd',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2477,$,$,.READWRITE.);
-#2477=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2478=IFCSIMPLEPROPERTYTEMPLATE('01wybNvcHCoRjqpHrnZ8Km',$,'SoffitLevel','Level of the highest internal part of the cross section. (BS6100 250 8002)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2479,$,$,.READWRITE.);
-#2479=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2480=IFCSIMPLEPROPERTYTEMPLATE('0ODskUNlH9yBuzoNX87H8j',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2481=IFCSIMPLEPROPERTYTEMPLATE('3Wif6NT8f01RjxehMDGIkn',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2482,$,$,.READWRITE.);
-#2482=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2483=IFCSIMPLEPROPERTYTEMPLATE('1TICxZUpHAcAvvC4y5Z5Vm',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2484=IFCSIMPLEPROPERTYTEMPLATE('2bGhykdCL2ygGtJf07fo0B',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2485,$,$,.READWRITE.);
-#2485=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2486=IFCSIMPLEPROPERTYTEMPLATE('3hUCwqX111uRXTUfeHri2H',$,'IsShallow','Indicates whether the chamber has been designed as being shallow (TRUE) or deep (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2487=IFCSIMPLEPROPERTYTEMPLATE('3h70dT$YLETgPMlhPW0OGe',$,'HasSteps','Indicates whether the chamber has steps (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2488=IFCSIMPLEPROPERTYTEMPLATE('04l_RR9CDFJvBPkBR48aTC',$,'WithBackdrop','Indicates whether the chamber has a backdrop or tumbling bay (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2489=IFCSIMPLEPROPERTYTEMPLATE('0HYW3jF0v8J9eZfTigtLh2',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2490=IFCSIMPLEPROPERTYTEMPLATE('38yjpue$P4Ag0zoSXhDstu',$,'AccessLengthOrRadius','The length of the chamber access cover or, where the plan shape of the cover is circular, the radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2491,$,$,.READWRITE.);
-#2491=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2492=IFCSIMPLEPROPERTYTEMPLATE('2e0Sqhyr531eQJ9pGSKaiE',$,'AccessWidth','The width of the chamber access cover where the plan shape of the cover is not circular.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2493,$,$,.READWRITE.);
-#2493=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2494=IFCSIMPLEPROPERTYTEMPLATE('1sX2p9QKv7iAKZhMT4Chmt',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2495=IFCPROPERTYSETTEMPLATE('1jDH5qEtP6kxbqyHXAaWRO',$,'Pset_DistributionChamberElementTypeMeterChamber','Definition from IAI: Chamber that houses a meter(s) (definition modified from BS6100 250 6224).',$,'IfcDistributionChamberElementType',(#2496,#2498,#2500,#2501,#2503,#2504,#2506));
-#2496=IFCSIMPLEPROPERTYTEMPLATE('06mdgFtyf2HQlefYggh6WW',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2497,$,$,.READWRITE.);
-#2497=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2498=IFCSIMPLEPROPERTYTEMPLATE('0AeFnLkrPFeh4nuPcSPawu',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2499,$,$,.READWRITE.);
-#2499=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2500=IFCSIMPLEPROPERTYTEMPLATE('3pEkDSIMD7ARQ0Ph5lTXR1',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2501=IFCSIMPLEPROPERTYTEMPLATE('0w9y94$YXBhP9gMRZTcYg6',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2502,$,$,.READWRITE.);
-#2502=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2503=IFCSIMPLEPROPERTYTEMPLATE('09V98AFC51e8FZe6I53BB_',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2504=IFCSIMPLEPROPERTYTEMPLATE('0y4u6g1zD5RvvdTCKx8YwL',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2505,$,$,.READWRITE.);
-#2505=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2506=IFCSIMPLEPROPERTYTEMPLATE('0JSRLyCZDCUOlwdP252ZM6',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2507=IFCPROPERTYSETTEMPLATE('0XsTthIyT7RherUx0ulNMx',$,'Pset_DistributionChamberElementTypeSump','Definition from BS6100 100 3431: Recess or small chamber into which liquid is drained to facilitate its removal.',$,'IfcDistributionChamberElementType',(#2508,#2510,#2512));
-#2508=IFCSIMPLEPROPERTYTEMPLATE('19TYaoKCv7VhdniV3Kezv_',$,'Length','The length of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2509,$,$,.READWRITE.);
-#2509=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2510=IFCSIMPLEPROPERTYTEMPLATE('0CUlDbMerEcgFhumztlmXr',$,'Width','The width of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2511,$,$,.READWRITE.);
-#2511=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2512=IFCSIMPLEPROPERTYTEMPLATE('2UvIrLBvzBOwPY7WU9_RSt',$,'InvertLevel','The lowest point in the cross section of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2513,$,$,.READWRITE.);
-#2513=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2514=IFCPROPERTYSETTEMPLATE('1B1CO_E8rDJAe_EpoCqHVF',$,'Pset_DistributionChamberElementTypeTrench','Definition from BS6100 221 4118: Excavation, the length of which greatly exceeds the width.',$,'IfcDistributionChamberElementType',(#2515,#2517,#2519));
-#2515=IFCSIMPLEPROPERTYTEMPLATE('3JuKjYREP8UvsOLsQ8wz$R',$,'Width','The width of the trench.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2516,$,$,.READWRITE.);
-#2516=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2517=IFCSIMPLEPROPERTYTEMPLATE('3IDJVdwaD0JxljASkyVPAa',$,'Depth','The depth of the trench.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2518,$,$,.READWRITE.);
-#2518=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2519=IFCSIMPLEPROPERTYTEMPLATE('0joZB_pDb3e9o1nuKRzI6B',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2520,$,$,.READWRITE.);
-#2520=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2521=IFCPROPERTYSETTEMPLATE('0DOq2OpYL4ZBNT9PsIngQy',$,'Pset_DistributionChamberElementTypeValveChamber','Definition from BS6100 250 6224: Chamber that houses a valve(s).',$,'IfcDistributionChamberElementType',(#2522,#2524,#2526,#2527,#2529,#2530,#2532));
-#2522=IFCSIMPLEPROPERTYTEMPLATE('22zwnxdff6EBmbKE253qPT',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2523,$,$,.READWRITE.);
-#2523=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2524=IFCSIMPLEPROPERTYTEMPLATE('3pqao7yMXB4BE2zqSvFsmJ',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2525,$,$,.READWRITE.);
-#2525=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2526=IFCSIMPLEPROPERTYTEMPLATE('394XMNpIz35hjVdkcMWdgN',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2527=IFCSIMPLEPROPERTYTEMPLATE('288xDtBPH2SvqEQ8l1qBCy',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2528,$,$,.READWRITE.);
-#2528=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2529=IFCSIMPLEPROPERTYTEMPLATE('3TODOUvzj1jg40aTiwHw8k',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2530=IFCSIMPLEPROPERTYTEMPLATE('0Z48418Yz6kQ2F0_ur3hxL',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2531,$,$,.READWRITE.);
-#2531=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2532=IFCSIMPLEPROPERTYTEMPLATE('3yseZGSAP2lQF2vldcvvLJ',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
-#2533=IFCPROPERTYSETTEMPLATE('2_8jaa1P5B_8ZCoH4wgUSu',$,'Pset_DistributionFlowElementCommon','Definition from IAI: Common properties of all occurrences of IfcDistributionFlowElement and their subtypes.\X2\000A\X0\',$,'IfcDistributionFlowElement,IfcDistributionChamberElement,IfcEnergyConversionDevice,IfcFlowController,IfcFlowFitting,IfcFlowMovingDevice,IfcFlowSegment,IfcFlowStorageDevice,IfcFlowTerminal,IfcFlowTreatmentDevice',(#2534));
-#2534=IFCSIMPLEPROPERTYTEMPLATE('2oM2cs4AXEsAEyEeFPtzP4',$,'Reference','Reference ID for this specific instance (e.g. ''WWS/VS1/400/001'', which indicates the occurrence belongs to system WWS, subsystems VSI/400, and has the component number 001) ',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2535=IFCPROPERTYSETTEMPLATE('0yVnXDuE51_u$Wes5_7AGN',$,'Pset_DistributionPortDuct','Definition from IAI: Duct port occurrence attributes attached to an instance of IfcDistributionPort.\X2\000A\X0\',$,'IfcDistributionPort',(#2536,#2537));
-#2536=IFCSIMPLEPROPERTYTEMPLATE('0TNNHx3MnFaQ1Fgv$JXGBV',$,'PortNumber','The index of the port as it relates to the related object. Each index must be unique for any given related object.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2537=IFCSIMPLEPROPERTYTEMPLATE('0Xty_rn8nByQQ1Dyc8Ug$e',$,'ConnectionType','The end-style treatment of the duct port:\X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\OTHER: Another type of end-style has been applied.\X2\000A\X0\NONE: No end-style has been applied.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2538,$,$,$,.READWRITE.);
-#2538=IFCPROPERTYENUMERATION('PEnum_DuctConnectionType',(IFCLABEL('BEADEDSLEEVE'),IFCLABEL('COMPRESSION'),IFCLABEL('CRIMP'),IFCLABEL('DRAWBAND'),IFCLABEL('DRIVESLIP'),IFCLABEL('FLANGED'),IFCLABEL('OUTSIDESLEEVE'),IFCLABEL('SLIPON'),IFCLABEL('SOLDERED'),IFCLABEL('SSLIP'),IFCLABEL('STANDINGSEAM'),IFCLABEL('SWEDGE'),IFCLABEL('WELDED'),IFCLABEL('OTHER'),IFCLABEL('NONE'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#2539=IFCPROPERTYSETTEMPLATE('2k6_zGnOf60BLDwDagkMt0',$,'Pset_DistributionPortPipe','Definition from IAI: Pipe port occurrence attributes attached to an instance of IfcDistributionPort.\X2\000A\X0\',$,'IfcDistributionPort',(#2540,#2541));
-#2540=IFCSIMPLEPROPERTYTEMPLATE('0q9XcEis1AwODDCjL66QA8',$,'PortNumber','The index of the port as it relates to the related object. Each index must be unique for any given related object.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2541=IFCSIMPLEPROPERTYTEMPLATE('0WRUXDwmbBJ9etd_q4_wu4',$,'ConnectionType','The end-style treatment of the pipe port:\X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\OTHER: Another type of end-style has been applied.\X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\USERDEFINED: User-defined port connection type. \X2\000A\X0\NOTDEFINED: Undefined port connection type. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2542,$,$,$,.READWRITE.);
-#2542=IFCPROPERTYENUMERATION('PEnum_PipeEndStyleTreatment',(IFCLABEL('BRAZED'),IFCLABEL('COMPRESSION'),IFCLABEL('FLANGED'),IFCLABEL('GROOVED'),IFCLABEL('OUTSIDESLEEVE'),IFCLABEL('SOLDERED'),IFCLABEL('SWEDGE'),IFCLABEL('THREADED'),IFCLABEL('WELDED'),IFCLABEL('OTHER'),IFCLABEL('NONE'),IFCLABEL('UNSET')),$);
-#2543=IFCPROPERTYSETTEMPLATE('07RJO1_5X8w9RRPD4Se9ZP',$,'Pset_EnergyConversionDeviceCoil','Definition from IAI: Coil occurrence attributes attached to an instance of IfcEnergyConversionDevice.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#2544));
-#2544=IFCSIMPLEPROPERTYTEMPLATE('1wLUhI5tvBj9JtO9GDV9zj',$,'HasSoundAttentuation','TRUE if the coil has sound attenuation, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2545=IFCPROPERTYSETTEMPLATE('2F9kgsGhPD8eGhMSRY_SF5',$,'Pset_EnergyConversionDeviceSpaceHeaterPanel','Definition from IAI: Panel space heater type occurrence attributes.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#2546));
-#2546=IFCSIMPLEPROPERTYTEMPLATE('1Lx7cXgoL1ouzMN0VZaMuu',$,'NumberOfPanels','Number of panels.',.P_SINGLEVALUE.,'IfcInteger',$,$,#2547,$,$,.READWRITE.);
-#2547=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#2548=IFCPROPERTYSETTEMPLATE('1d$t6e_q1CQBNo0yiAn8LD',$,'Pset_EnergyConversionDeviceSpaceHeaterSectional','Definition from IAI: Sectional space heater type occurrence attributes.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#2549));
-#2549=IFCSIMPLEPROPERTYTEMPLATE('2XPVVSFn94Fv5gvYJ_4UKI',$,'NumberOfSections','Number of vertical sections, measured in the direction of flow.',.P_SINGLEVALUE.,'IfcInteger',$,$,#2550,$,$,.READWRITE.);
-#2550=IFCDERIVEDUNIT($,.INTEGERCOUNTRATEUNIT.,$,$);
-#2551=IFCPROPERTYSETTEMPLATE('3wtkzzgWPDkR4msTd_ZqJH',$,'Pset_FireRatingProperties','Definition from IAI: Properties related to the combustion of materials for purposes of assessing fire hazard.',$,'IfcSpatialStructureElement,IfcElement',(#2552,#2553,#2554));
-#2552=IFCSIMPLEPROPERTYTEMPLATE('0DpRpyDTf7Tf67UWx1VSzo',$,'FireResistanceRating','Fire rating identifying the entity''s fire resistive value (e.g., 1-hour, 2-hour, etc.) so that its resistance to fire can be compared to that of the surrounding structure.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2553=IFCSIMPLEPROPERTYTEMPLATE('1$8FOoMBP1pAC5_oVQlRrD',$,'IsCombustible','Combustibility (YES it is combustible or NO it is not combustible).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2554=IFCSIMPLEPROPERTYTEMPLATE('00AfDkRe90tBSrvseD9Q_n',$,'SurfaceSpreadOfFlame','Surface spread of flame characteristics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2555=IFCPROPERTYSETTEMPLATE('1op_bYu8P2l8dGfY$clZVl',$,'Pset_FlowControllerDamper','Definition from IAI: Damper occurrence attributes attached to an instance of IfcFlowController.\X2\000A\X0\',$,'IfcFlowController',(#2556));
-#2556=IFCSIMPLEPROPERTYTEMPLATE('0Un1MTqEPEO8ITaZcdu5sX',$,'SizingMethod','Identifies whether the damper is sized nominally or with exact measurements:\X2\000A\X0\NOMINAL: Nominal sizing method. \X2\000A\X0\EXACT: Exact sizing method. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2557,$,$,$,.READWRITE.);
-#2557=IFCPROPERTYENUMERATION('PEnum_DamperSizingMethod',(IFCLABEL('NOMINAL'),IFCLABEL('EXACT'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2558=IFCPROPERTYSETTEMPLATE('2wSHCustT94ugOmR3igDHn',$,'Pset_FlowControllerFlowMeter','Definition from IAI: Flow meter occurrence common attributes.\X2\000A\X0\',$,'IfcFlowController',(#2559));
-#2559=IFCSIMPLEPROPERTYTEMPLATE('0YwO_WiQf7lxjDLjGPfoUb',$,'Purpose','Enumeration defining the purpose of the flow meter occurrence.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2560,$,$,$,.READWRITE.);
-#2560=IFCPROPERTYENUMERATION('PEnum_FlowMeterPurpose',(IFCLABEL('MASTER'),IFCLABEL('SUBMASTER'),IFCLABEL('SUBMETER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2561=IFCPROPERTYSETTEMPLATE('3XC7itZvr90QmY$DSmtXVg',$,'Pset_FlowFittingDuctFitting','Definition from IAI: Duct fitting occurrence attributes attached to an instance of IfcFlowFitting.\X2\000A\X0\',$,'IfcFlowFitting',(#2562,#2564,#2565));
-#2562=IFCSIMPLEPROPERTYTEMPLATE('3t_bnUqJ915hJ9gAgG0bZJ',$,'AbsoluteRoughnessFactor','The absolute roughness factor of the duct fitting.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2563,$,$,.READWRITE.);
-#2563=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2564=IFCSIMPLEPROPERTYTEMPLATE('0vuj4G4gT8MRg6w_5Aj_Nl',$,'HasLiner','TRUE if the fitting has interior duct insulating lining, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2565=IFCSIMPLEPROPERTYTEMPLATE('3EZYsxPEL2aBcu06K5_9Cj',$,'Color','The color of the duct fitting.\X2\000A000A\X0\Note: This is typically used for any duct fittings with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2566=IFCPROPERTYSETTEMPLATE('1FL3MZ$jv0rxm4pLqTcVKD',$,'Pset_FlowFittingPipeFitting','Definition from IAI: Pipe fitting occurrence attributes attached to an instance of IfcFlowFitting.\X2\000A\X0\',$,'IfcFlowFitting',(#2567,#2569));
-#2567=IFCSIMPLEPROPERTYTEMPLATE('2Db60aGXz3ABWadSDdOCMn',$,'InteriorRoughnessCoefficient','The interior roughness of the pipe fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2568,$,$,.READWRITE.);
-#2568=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2569=IFCSIMPLEPROPERTYTEMPLATE('39NTA_$8f3IRZwDcmG0WoR',$,'Color','The color of the pipe fitting.\X2\000A000A\X0\Note: This is typically used only for plastic pipe fittings. However, it may be used for any pipe fittings with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2570=IFCPROPERTYSETTEMPLATE('0KGSBLmtn3Pwnplo6zazq$',$,'Pset_FlowMovingDeviceCompressor','Definition from IAI: Compressor occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#2571));
-#2571=IFCSIMPLEPROPERTYTEMPLATE('3oKNP9Iv50lu5KmQsNbeEb',$,'ImpellerDiameter','Diameter of compressor impeller - used to scale performance of geometrically similar compressors.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2572,$,$,.READWRITE.);
-#2572=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2573=IFCPROPERTYSETTEMPLATE('147B1M6hHD9QktJYs9T6Hg',$,'Pset_FlowMovingDeviceFan','Definition from IAI: Fan occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#2574,#2576,#2578,#2580,#2582,#2584,#2585));
-#2574=IFCSIMPLEPROPERTYTEMPLATE('0HzzVogsj9dfQDAvXyf65K',$,'DischargeType','Defines the type of connection at the fan discharge.\X2\000A\X0\Duct: Discharge into ductwork.\X2\000A\X0\Screen: Discharge into screen outlet.\X2\000A\X0\Louver: Discharge into a louver.\X2\000A\X0\Damper: Discharge into a damper.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2575,$,$,$,.READWRITE.);
-#2575=IFCPROPERTYENUMERATION('PEnum_FanDischargeType',(IFCLABEL('DUCT'),IFCLABEL('SCREEN'),IFCLABEL('LOUVER'),IFCLABEL('DAMPER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2576=IFCSIMPLEPROPERTYTEMPLATE('3CyufIuCL3YxG6373hMIxu',$,'ApplicationOfFan','The functional application of the fan:\X2\000A\X0\SUPPLYAIR: Supply air fan. \X2\000A\X0\RETURNAIR: Return air fan. \X2\000A\X0\EXHAUSTAIR: Exhaust air fan. \X2\000A\X0\OTHER: Other type of application not defined above.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2577,$,$,$,.READWRITE.);
-#2577=IFCPROPERTYENUMERATION('PEnum_FanApplicationType',(IFCLABEL('SUPPLY'),IFCLABEL('RETURN'),IFCLABEL('EXHAUST'),IFCLABEL('COOLINGTOWER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2578=IFCSIMPLEPROPERTYTEMPLATE('0iw82ihk96RvZMKHbLUKmj',$,'CoilPosition','Defines the relationship between a fan and a coil.\X2\000A\X0\DrawThrough: Fan located downstream of the coil.\X2\000A\X0\BlowThrough: Fan located upstream of the coil.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2579,$,$,$,.READWRITE.);
-#2579=IFCPROPERTYENUMERATION('PEnum_FanCoilPosition',(IFCLABEL('DRAWTHROUGH'),IFCLABEL('BLOWTHROUGH'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2580=IFCSIMPLEPROPERTYTEMPLATE('1irNb0J1P1YQ7pc5uQHHqg',$,'MotorPosition','Defines the location of the motor relative to the air stream.\X2\000A\X0\InAirStream: Fan motor is in the air stream.\X2\000A\X0\OutOfAirStream: Fan motor is out of the air stream.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2581,$,$,$,.READWRITE.);
-#2581=IFCPROPERTYENUMERATION('PEnum_FanMotorPosition',(IFCLABEL('INAIRSTREAM'),IFCLABEL('OUTOFAIRSTREAM'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2582=IFCSIMPLEPROPERTYTEMPLATE('12LGFqsM18zxXonWx3hLER',$,'FanMountingType','Defines the method of mounting the fan in the building. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2583,$,$,$,.READWRITE.);
-#2583=IFCPROPERTYENUMERATION('PEnum_FanMountingType',(IFCLABEL('MANUFACTUREDCURB'),IFCLABEL('FIELDERECTEDCURB'),IFCLABEL('CONCRETEPAD'),IFCLABEL('SUSPENDED'),IFCLABEL('WALLMOUNTED'),IFCLABEL('DUCTMOUNTED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2584=IFCSIMPLEPROPERTYTEMPLATE('3t7hjEdKH0SB$CTM1BpLU2',$,'FractionOfMotorHeatToAirStream','Fraction of the motor heat released into the fluid flow.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2585=IFCSIMPLEPROPERTYTEMPLATE('13viQsi0n1PQ0SoBGuivKD',$,'ImpellerDiameter','Diameter of fan wheel - used to scale performance of geometrically similar fans.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2586,$,$,.READWRITE.);
-#2586=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2587=IFCPROPERTYSETTEMPLATE('1dLjnLLdfCfgSUb8t9QpBz',$,'Pset_FlowMovingDeviceFanCentrifugal','Definition from IAI: Centrifugal fan occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#2588,#2590,#2592));
-#2588=IFCSIMPLEPROPERTYTEMPLATE('1rUPcm5yH9UvtlZIm6fodK',$,'DischargePosition','Centrifugal fan discharge position:\X2\000A\X0\TOPHORIZONTAL: Top horizontal discharge. \X2\000A\X0\TOPANGULARDOWN: Top angular down discharge. \X2\000A\X0\DOWNBLAST: Downblast discharge. \X2\000A\X0\BOTTOMANGULARDOWN: Bottom angular down discharge. \X2\000A\X0\BOTTOMHORIZONTAL: Bottom horizontal discharge. \X2\000A\X0\BOTTOMANGULARUP: Bottom angular up discharge. \X2\000A\X0\UPBLAST: Upblast discharge. \X2\000A\X0\TOPANGULARUP: Top angular up discharge. \X2\000A\X0\OTHER: Other type of fan arrangement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2589,$,$,$,.READWRITE.);
-#2589=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanDischargePosition',(IFCLABEL('TOPHORIZONTAL'),IFCLABEL('TOPANGULARDOWN'),IFCLABEL('TOPANGULARUP'),IFCLABEL('DOWNBLAST'),IFCLABEL('BOTTOMANGULARDOWN'),IFCLABEL('BOTTOMHORIZONTAL'),IFCLABEL('BOTTOMANGULARUP'),IFCLABEL('UPBLAST'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2590=IFCSIMPLEPROPERTYTEMPLATE('1y7RjglkL8U8mWibLAWkb6',$,'DirectionOfRotation','The direction of the centrifugal fan wheel rotation when viewed from the drive side of the fan:\X2\000A\X0\CLOCKWISE: Clockwise. \X2\000A\X0\COUNTERCLOCKWISE: Counter-clockwise. \X2\000A\X0\OTHER: Other type of fan rotation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2591,$,$,$,.READWRITE.);
-#2591=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanRotation',(IFCLABEL('CLOCKWISE'),IFCLABEL('COUNTERCLOCKWISE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2592=IFCSIMPLEPROPERTYTEMPLATE('1R5c3kdiX4oOifXRCFqlfN',$,'Arrangement','Defines the fan and motor drive arrangement as defined by AMCA:\X2\000A\X0\ARRANGEMENT1: Arrangement 1. \X2\000A\X0\ARRANGEMENT2: Arrangement 2. \X2\000A\X0\ARRANGEMENT3: Arrangement 3. \X2\000A\X0\ARRANGEMENT4: Arrangement 4. \X2\000A\X0\ARRANGEMENT7: Arrangement 7. \X2\000A\X0\ARRANGEMENT8: Arrangement 8. \X2\000A\X0\ARRANGEMENT9: Arrangement 9. \X2\000A\X0\ARRANGEMENT10: Arrangement 10. \X2\000A\X0\OTHER: Other type of fan drive arrangement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2593,$,$,$,.READWRITE.);
-#2593=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanArrangement',(IFCLABEL('ARRANGEMENT1'),IFCLABEL('ARRANGEMENT2'),IFCLABEL('ARRANGEMENT3'),IFCLABEL('ARRANGEMENT4'),IFCLABEL('ARRANGEMENT7'),IFCLABEL('ARRANGEMENT8'),IFCLABEL('ARRANGEMENT9'),IFCLABEL('ARRANGEMENT10'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2594=IFCPROPERTYSETTEMPLATE('3chcboh6vE2hxfL$jc2fEY',$,'Pset_FlowMovingDevicePump','Definition from IAI: Pump occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#2595,#2597,#2599));
-#2595=IFCSIMPLEPROPERTYTEMPLATE('088YqJwZv2tOgWkOrbruWI',$,'ImpellerDiameter','Diameter of pump impeller - used to scale performance of geometrically similar pumps.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2596,$,$,.READWRITE.);
-#2596=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2597=IFCSIMPLEPROPERTYTEMPLATE('0c97$bNVfCJe66oX$KAcAR',$,'BaseType','Defines general types of pump bases:\X2\000A\X0\FRAME: Frame. \X2\000A\X0\BASE: Base. \X2\000A\X0\NONE: There is no pump base, such as an inline pump. \X2\000A\X0\OTHER: Other type of pump base. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2598,$,$,$,.READWRITE.);
-#2598=IFCPROPERTYENUMERATION('PEnum_PumpBaseType',(IFCLABEL('FRAME'),IFCLABEL('BASE'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2599=IFCSIMPLEPROPERTYTEMPLATE('2Rsh8VUGH5fQKSL237ibDy',$,'DriveConnectionType','The way the pump drive mechanism is connected to the pump:\X2\000A\X0\DIRECTDRIVE: Direct drive. \X2\000A\X0\BELTDRIVE: Belt drive. \X2\000A\X0\COUPLING: Coupling. \X2\000A\X0\OTHER: Other type of drive connection. \X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2600,$,$,$,.READWRITE.);
-#2600=IFCPROPERTYENUMERATION('PEnum_PumpDriveConnectionType',(IFCLABEL('DIRECTDRIVE'),IFCLABEL('BELTDRIVE'),IFCLABEL('COUPLING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2601=IFCPROPERTYSETTEMPLATE('2aIKa_zWv5HO2Gj1zr5JN9',$,'Pset_FlowSegmentDuctSegment','Definition from IAI: Duct segment occurrence attributes attached to an instance of IfcFlowSegment.\X2\000A\X0\',$,'IfcFlowSegment',(#2602,#2604,#2606,#2607,#2609));
-#2602=IFCSIMPLEPROPERTYTEMPLATE('2R3IhvlAL5Vu3th6LHCZIC',$,'MaterialThickness','The thickness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2603,$,$,.READWRITE.);
-#2603=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2604=IFCSIMPLEPROPERTYTEMPLATE('0l9UB9kKLAGeGfA4w0mz0h',$,'InteriorRoughnessCoefficient','The interior roughness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2605,$,$,.READWRITE.);
-#2605=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2606=IFCSIMPLEPROPERTYTEMPLATE('2HSG8tYaL7K8QNVhV$2xk7',$,'HasLiner','TRUE if the fitting has interior duct insulating lining, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2607=IFCSIMPLEPROPERTYTEMPLATE('3T8mjdlqTCtREwFloRYECj',$,'Length','Length of the duct segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2608,$,$,.READWRITE.);
-#2608=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2609=IFCSIMPLEPROPERTYTEMPLATE('2R6G5ZfXb5NA_kOZGgL4c8',$,'Color','The color of the duct segment.\X2\000A000A\X0\Note: This is typically used for any duct segments with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2610=IFCPROPERTYSETTEMPLATE('0uzAVYIkfAGAyNOkSmtTT1',$,'Pset_FlowSegmentPipeSegment','Definition from IAI: Pipe segment occurrence attributes attached to an instance of IfcFlowSegment.\X2\000A\X0\',$,'IfcFlowSegment',(#2611,#2613,#2615,#2616,#2617));
-#2611=IFCSIMPLEPROPERTYTEMPLATE('1qYopyzvjAmOYAs4uHwVQf',$,'InteriorRoughnessCoefficient','The interior roughness coefficient of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2612,$,$,.READWRITE.);
-#2612=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2613=IFCSIMPLEPROPERTYTEMPLATE('3L54NrBnrCKx9ZTU0tWONL',$,'Length','Length of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2614,$,$,.READWRITE.);
-#2614=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2615=IFCSIMPLEPROPERTYTEMPLATE('1eDbAO6IrAwfWuAExwm1je',$,'Color','The color of the pipe segment.\X2\000A000A\X0\Note: This is typically used only for plastic pipe segments. However, it may be used for any pipe segments with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2616=IFCSIMPLEPROPERTYTEMPLATE('36PEwtNgD3au1OiF5TXRhC',$,'Gradient','The gradient of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2617=IFCSIMPLEPROPERTYTEMPLATE('2jAYoT0u53a8cRoLFclqUO',$,'InvertElevation','The invert elevation relative to the datum established for the project.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,#2618,$,$,.READWRITE.);
-#2618=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2619=IFCPROPERTYSETTEMPLATE('0W1$l_ZlXDOQRz7IcX2uCv',$,'Pset_FlowStorageDeviceTank','Definition from IAI: Properties that relate to an instance of a flow storage device that is typed as a tank. Note that a partial tank may be considered as a compartment within a compartmentalized tank.',$,'IfcFlowStorageDevice',(#2620,#2622,#2623));
-#2620=IFCSIMPLEPROPERTYTEMPLATE('3u6e9I6rnBR8jKkY$UyM9z',$,'TankComposition','Defines the level of element composition where:\X2\000A000A\X0\COMPLEX = A set of elementary units aggregated together to fulfill the overall required purpose.\X2\000A\X0\ELEMENT = A single elementary unit that may exist of itself or as an aggregation of partial units..\X2\000A\X0\PARTIAL ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2621,$,$,$,.READWRITE.);
-#2621=IFCPROPERTYENUMERATION('PEnum_TankComposition',(IFCLABEL('COMPLEX'),IFCLABEL('ELEMENT'),IFCLABEL('PARTIAL'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2622=IFCSIMPLEPROPERTYTEMPLATE('1jGp9RIu18puCNn08NpLTs',$,'HasLadder','Indication of whether the tank is provided with a ladder (set TRUE) for access to the top. If no ladder is provided then value is set FALSE.\X2\000A000A\X0\Note: No indication is given of the type of ladder (gooseneck etc.)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2623=IFCSIMPLEPROPERTYTEMPLATE('2iSgzS7gX15OBQq8vxM2U6',$,'HasVisualIndicator','Indication of whether the tank is provided with a visual indicator (set TRUE) that shows the water level in the tank. If no visual indicator is provided then value is set FALSE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2624=IFCPROPERTYSETTEMPLATE('1qLEj7E1LDzPa_DJ4IMDXv',$,'Pset_FlowTerminalAirTerminal','Definition from IAI: Air terminal occurrence attributes attached to an instance of IfcFlowTerminal.\X2\000A\X0\',$,'IfcFlowTerminal',(#2625,#2627));
-#2625=IFCSIMPLEPROPERTYTEMPLATE('3nSbyZUX93peV4qEFk47te',$,'AirflowType','Enumeration defining the functional type of air flow through the terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2626,$,$,$,.READWRITE.);
-#2626=IFCPROPERTYENUMERATION('PEnum_AirTerminalAirflowType',(IFCLABEL('SUPPLYAIR'),IFCLABEL('RETURNAIR'),IFCLABEL('EXHAUSTAIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2627=IFCSIMPLEPROPERTYTEMPLATE('0ppvbKgt19ARK9pmDIQWPZ',$,'Location','Location (a single type of diffuser can be used for multiple locations); high means close to ceiling.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2628,$,$,$,.READWRITE.);
-#2628=IFCPROPERTYENUMERATION('PEnum_AirTerminalLocation',(IFCLABEL('SIDEWALLHIGH'),IFCLABEL('SIDEWALLLOW'),IFCLABEL('CEILINGPERIMETER'),IFCLABEL('CEILINGINTERIOR'),IFCLABEL('FLOOR'),IFCLABEL('SILL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2629=IFCPROPERTYSETTEMPLATE('3Eyxi_GbD20QDRZj7lkQFc',$,'Pset_OutsideDesignCriteria','Definition from IAI: Outside air conditions used as the basis for calculating thermal loads at peak conditions, as well as the weather data location from which these conditions were obtained. HISTORY: New property set in IFC Release 1.0.',$,'IfcBuilding',(#2630,#2632,#2634,#2635,#2637,#2639,#2640,#2641,#2642,#2644,#2646));
-#2630=IFCSIMPLEPROPERTYTEMPLATE('0dWyVRL3rBKgWR6ps2Q_Wo',$,'HeatingDryBulb','Outside dry bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2631,$,$,.READWRITE.);
-#2631=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2632=IFCSIMPLEPROPERTYTEMPLATE('21$U_YwGz9DfdtqcGJpdJB',$,'HeatingWetBulb','Outside wet bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2633,$,$,.READWRITE.);
-#2633=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2634=IFCSIMPLEPROPERTYTEMPLATE('2IxAKxVIL81fX3z13uB_CA',$,'HeatingDesignDay','The month, day and time that has been selected for the heating design calculations.',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
-#2635=IFCSIMPLEPROPERTYTEMPLATE('37Tz17QUD2ceSIxHMKi3U3',$,'CoolingDryBulb','Outside dry bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2636,$,$,.READWRITE.);
-#2636=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2637=IFCSIMPLEPROPERTYTEMPLATE('3IgUMAXCb2quVl4yfNq9xy',$,'CoolingWetBulb','Outside wet bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2638,$,$,.READWRITE.);
-#2638=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2639=IFCSIMPLEPROPERTYTEMPLATE('0123jATPTD0BxJuX8UK$E9',$,'CoolingDesignDay','The month, day and time that has been selected for the cooling design calculations.',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
-#2640=IFCSIMPLEPROPERTYTEMPLATE('2HQA8wx8zCphYSBzMIYS8I',$,'WeatherDataStation','The site weather data station description or reference to the data source from which weather data was obtained for use in calculations. ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2641=IFCSIMPLEPROPERTYTEMPLATE('2DfIVfCYPEIvJuhy3eP$lW',$,'WeatherDataDate','The date for which the weather data was gathered. ',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
-#2642=IFCSIMPLEPROPERTYTEMPLATE('0XGK1VvMX4OP4gTLfkpFci',$,'BuildingThermalExposure','The thermal exposure expected by the building based on surrounding site conditions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2643,$,$,$,.READWRITE.);
-#2643=IFCPROPERTYENUMERATION('PEnum_BuildingThermalExposure',(IFCLABEL('LIGHT'),IFCLABEL('MEDIUM'),IFCLABEL('HEAVY'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
-#2644=IFCSIMPLEPROPERTYTEMPLATE('1cYwu2yCj81QkcQ0bvKo6x',$,'PrevailingWindDirection','The prevailing wind angle direction measured from True North (0 degrees) in a clockwise direction.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#2645,$,$,.READWRITE.);
-#2645=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#2646=IFCSIMPLEPROPERTYTEMPLATE('3hxUSDH8j4yOIzr2aeUro_',$,'PrevailingWindVelocity','The design wind velocity coming from the direction specified by the PrevailingWindDirection attribute.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,#2647,$,$,.READWRITE.);
-#2647=IFCDERIVEDUNIT($,.LINEARVELOCITYUNIT.,$,$);
-#2648=IFCPROPERTYSETTEMPLATE('1VHRtwRRTFTfagS$RiMTSR',$,'Pset_SpaceThermalDesign','Definition from IAI: Space or zone HVAC design requirements. HISTORY: New property set in IFC Release 1.0 (Pset_SpaceHvacInformation); renamed to Pset_SpaceThermalDesign and revised in IFC2x2.',$,'IfcSpace',(#2649,#2651,#2653,#2655,#2657,#2659,#2661,#2662,#2664,#2665,#2667,#2669,#2670));
-#2649=IFCSIMPLEPROPERTYTEMPLATE('2ft4NyWKHFN8Z$iZyz$rn_',$,'CoolingDesignAirflow','The air flowrate required during the peak cooling conditions. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2650,$,$,.READWRITE.);
-#2650=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2651=IFCSIMPLEPROPERTYTEMPLATE('2pWzmgkf13MxZcj19vf5LE',$,'HeatingDesignAirflow','The air flowrate required during the peak heating conditions, but could also be determined by minimum ventilation requirement or minimum air change requirements. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2652,$,$,.READWRITE.);
-#2652=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2653=IFCSIMPLEPROPERTYTEMPLATE('0fkEh72p1CCOioVBUOS3Ih',$,'TotalSensibleHeatGain','The total sensible heat or energy gained by the space during the peak cooling conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2654,$,$,.READWRITE.);
-#2654=IFCNAMEDUNIT($,.POWERUNIT.);
-#2655=IFCSIMPLEPROPERTYTEMPLATE('0lESGb8B5DIx7bqRRkqfKx',$,'TotalHeatGain','The total amount of heat or energy gained by the space at the time of the space''s peak cooling conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2656,$,$,.READWRITE.);
-#2656=IFCNAMEDUNIT($,.POWERUNIT.);
-#2657=IFCSIMPLEPROPERTYTEMPLATE('0xX5ENdAX6del6GcQP_V4I',$,'TotalHeatLoss','The total amount of heat or energy lost by the space at the time of the space''s peak heating conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2658,$,$,.READWRITE.);
-#2658=IFCNAMEDUNIT($,.POWERUNIT.);
-#2659=IFCSIMPLEPROPERTYTEMPLATE('1Q2ll0AQLFxOlkLHiw5X76',$,'CoolingDryBulb','Inside dry bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2660,$,$,.READWRITE.);
-#2660=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2661=IFCSIMPLEPROPERTYTEMPLATE('1F$_8Ppsb7UulO0Ou2Kl$S',$,'CoolingRelativeHumidity','Inside relative humidity for cooling design. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2662=IFCSIMPLEPROPERTYTEMPLATE('3gSZSMhXHDtvQVHLsZPFVG',$,'HeatingDryBulb','Inside dry bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure ',$,$,#2663,$,$,.READWRITE.);
-#2663=IFCNAMEDUNIT($,.THERMODYNAMICTEMPERATUREUNIT.);
-#2664=IFCSIMPLEPROPERTYTEMPLATE('23Md3nOJL96ua8XZAy4mWR',$,'HeatingRelativeHumidity','Inside relative humidity for heating design. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2665=IFCSIMPLEPROPERTYTEMPLATE('1dx5zVZ1P34gNlgYMxrz1j',$,'VentilationAirFlowrate','Ventilation outside air requirement for the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2666,$,$,.READWRITE.);
-#2666=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2667=IFCSIMPLEPROPERTYTEMPLATE('0zgHWI4Az9BvzLtuhxct6J',$,'ExhaustAirFlowrate','Design exhaust air flow rate for the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2668,$,$,.READWRITE.);
-#2668=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2669=IFCSIMPLEPROPERTYTEMPLATE('27GmaC7GX4ggEYYQwCjQsD',$,'CeilingRAPlenum','Ceiling plenum used for return air or not. TRUE = Yes, FALSE = No. ',.P_SINGLEVALUE.,'IfcBoolean ',$,$,$,$,$,.READWRITE.);
-#2670=IFCSIMPLEPROPERTYTEMPLATE('0bwFMIw3fB1hN3AhFzYHpQ',$,'BoundaryAreaHeatLoss','Heat loss per unit area for the boundary object. This is a design input value for use in the absence of calculated load data. ',.P_SINGLEVALUE.,'IfcHeatFluxDensityMeasure',$,$,#2671,$,$,.READWRITE.);
-#2671=IFCDERIVEDUNIT($,.HEATFLUXDENSITYUNIT.,$,$);
-#2672=IFCPROPERTYSETTEMPLATE('02OWE88IPDHQYblFwztuSK',$,'Pset_ThermalLoadAggregate','Definition from IAI: The aggregated thermal loads experienced by one or many spaces, zones, or buildings. This aggregate thermal load information is typically addressed by a system or plant. HISTORY: New property set in IFC Release 1.0 (Pset_AggregateLoadInformation); renamed Pset_ThermalLoadAggregate in IFC2x2.',$,'IfcZone,IfcSpatialStructureElement,IfcSystem',(#2673,#2675,#2677,#2678,#2679,#2680,#2681));
-#2673=IFCSIMPLEPROPERTYTEMPLATE('1$nZZl$ab2Ogm9nLt2tLYU',$,'TotalCoolingLoad','The peak total cooling load for the building, zone or space.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2674,$,$,.READWRITE.);
-#2674=IFCNAMEDUNIT($,.POWERUNIT.);
-#2675=IFCSIMPLEPROPERTYTEMPLATE('2CtN5AwkvDAvYkzAwLuNs2',$,'TotalHeatingLoad','The peak total heating load for the building, zone or space.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,#2676,$,$,.READWRITE.);
-#2676=IFCNAMEDUNIT($,.POWERUNIT.);
-#2677=IFCSIMPLEPROPERTYTEMPLATE('2Z6ZK_KKP7PvrHodvN5$Ag',$,'LightingDiversity','Lighting diversity. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2678=IFCSIMPLEPROPERTYTEMPLATE('3aDvED$iX7G8WtbvLxUGTX',$,'InfiltrationDiversitySummer','Diversity factor for Summer infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2679=IFCSIMPLEPROPERTYTEMPLATE('0y9MYq_t105fH1Bnd55aYg',$,'InfiltrationDiversityWinter','Diversity factor for Winter infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2680=IFCSIMPLEPROPERTYTEMPLATE('09bvecIT5EGhjcaHOj6_Bb',$,'ApplianceDiversity','Diversity of appliance load. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2681=IFCSIMPLEPROPERTYTEMPLATE('2JVndG0cL9LfBC6nWWCdiJ',$,'LoadSafetyFactor','Load safety factor. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#2682=IFCPROPERTYSETTEMPLATE('1e3HDNZrv9qhNpbI2Qj6hh',$,'Pset_ThermalLoadDesignCriteria','Definition from IAI: Building thermal load design data that are used for calculating thermal loads in a space or building. HISTORY: New property set in IFC Release 1.0 (Pset_LoadDesignCriteria); renamed Pset_ThermalLoadDesignCriteria in IFC2x2.',$,'IfcSpatialStructureElement,IfcSystem,IfcBuilding,IfcZone',(#2683,#2684,#2686,#2688,#2689,#2691));
-#2683=IFCSIMPLEPROPERTYTEMPLATE('3S3JahhSTB8w7LA8ksGAe_',$,'OccupancyDiversity','Diversity factor that may be applied to the number of people in the space. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2684=IFCSIMPLEPROPERTYTEMPLATE('0nAZZr9GvA7AQIAfYWP$fc',$,'OutsideAirPerPerson','Design quantity of outside air to be provided per person in the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,#2685,$,$,.READWRITE.);
-#2685=IFCDERIVEDUNIT($,.VOLUMETRICFLOWRATEUNIT.,$,$);
-#2686=IFCSIMPLEPROPERTYTEMPLATE('20wMfZO8bFQAjE6mNC6du7',$,'ReceptacleLoadIntensity','Average power use intensity of appliances and other non-HVAC equipment.in the space per unit area.(PowerMeasure/IfcAreaMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,#2687,$,$,.READWRITE.);
-#2687=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#2688=IFCSIMPLEPROPERTYTEMPLATE('2sbx$helXCch8TbZAyApmv',$,'AppliancePercentLoadToRadiant','Percent of sensible load to radiant heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2689=IFCSIMPLEPROPERTYTEMPLATE('1Kp2tfmHH7GxBs5gaZ_E0e',$,'LightingLoadIntensity','Average lighting load intensity in the space per unit area (PowerMeasure/IfcAreaMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,#2690,$,$,.READWRITE.);
-#2690=IFCDERIVEDUNIT($,.USERDEFINED.,$,$);
-#2691=IFCSIMPLEPROPERTYTEMPLATE('3TGyY0aTbAGAnxREF9Ax7s',$,'LightingPercentLoadToReturnAir','Percent of lighting load to the return air plenum. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure ',$,$,$,$,$,.READWRITE.);
-#2692=IFCPROPERTYSETTEMPLATE('0nxVo5RobBL8AnUNXPymst',$,'Pset_UtilityConsumption','Definition from IAI: Consumption of utility resources, typically applied to the IfcBuilding instance, used to identify how much was consumed on I.e., a monthly basis.',$,'IfcBuilding',(#2693,#2694,#2695,#2696,#2697));
-#2693=IFCSIMPLEPROPERTYTEMPLATE('0R836bVbjEQ9T$oFB40Qch',$,'Heat','The amount of heat energy consumed during the period specified in the time series.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCENERGYMEASURE($),$,$,.READWRITE.);
-#2694=IFCSIMPLEPROPERTYTEMPLATE('0gma$JlBLCjOl3oiDtQZbY',$,'Electricity','The amount of electricity consumed during the period specified in the time series.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCENERGYMEASURE($),$,$,.READWRITE.);
-#2695=IFCSIMPLEPROPERTYTEMPLATE('3aRBST0G1C7e4EiViXik8a',$,'Water','The amount of water consumed during the period specified in the time series.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMEMEASURE($),$,$,.READWRITE.);
-#2696=IFCSIMPLEPROPERTYTEMPLATE('2Dr5mFfDDEVBwTbyKBPFky',$,'Fuel','The amount of fuel consumed during the period specified in the time series.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCVOLUMEMEASURE($),$,$,.READWRITE.);
-#2697=IFCSIMPLEPROPERTYTEMPLATE('3Lcxn4cDrBIgn3SZSMNHgt',$,'Steam','The amount of steam consumed during the period specified in the time series.',.P_SINGLEVALUE.,'IfcTimeSeries',$,$,IFCMASSMEASURE($),$,$,.READWRITE.);
-#2698=IFCPROPERTYSETTEMPLATE('1bfhSyRT58agmP5lq15YRc',$,'Pset_DiscreteAccessoryAnchorBolt','Definition from IAI: Properties common to different types of anchor bolts.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2699,#2701,#2703,#2705));
-#2699=IFCSIMPLEPROPERTYTEMPLATE('01K2P4cX12oxYC$kjhItzf',$,'AnchorBoltLength','The length of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2700,$,$,.READWRITE.);
-#2700=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2701=IFCSIMPLEPROPERTYTEMPLATE('24W08CPyf7NRQ6uG1s97d_',$,'AnchorBoltDiameter','The nominal diameter of the anchor bolt bar(s).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2702,$,$,.READWRITE.);
-#2702=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2703=IFCSIMPLEPROPERTYTEMPLATE('0JH$YMK85BZu1PchPc4iZo',$,'AnchorBoltThreadLength','The length of the threaded part of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2704,$,$,.READWRITE.);
-#2704=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2705=IFCSIMPLEPROPERTYTEMPLATE('2JetmKsZXCgAcchWzTlrHq',$,'AnchorBoltProtrusionLength','The length of the protruding part of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2706,$,$,.READWRITE.);
-#2706=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2707=IFCPROPERTYSETTEMPLATE('2ARhxiku12kPbFFB6mqnAl',$,'Pset_DiscreteAccessoryColumnShoe','Definition from IAI: Shape properties common to column shoes.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2708,#2710,#2712,#2714,#2716,#2718));
-#2708=IFCSIMPLEPROPERTYTEMPLATE('0CBMBH5$zFlwhU8W$vAGsK',$,'ColumnShoeBasePlateThickness','The thickness of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2709,$,$,.READWRITE.);
-#2709=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2710=IFCSIMPLEPROPERTYTEMPLATE('0ntjT45ZrBI89AE5qFn33Q',$,'ColumnShoeBasePlateWidth','The width of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2711,$,$,.READWRITE.);
-#2711=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2712=IFCSIMPLEPROPERTYTEMPLATE('2pwm6cz5b2P8Nahl2u_prj',$,'ColumnShoeBasePlateDepth','The depth of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2713,$,$,.READWRITE.);
-#2713=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2714=IFCSIMPLEPROPERTYTEMPLATE('1gWyaDthv0IPyibzbWdrxw',$,'ColumnShoeCasingHeight','The height of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2715,$,$,.READWRITE.);
-#2715=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2716=IFCSIMPLEPROPERTYTEMPLATE('0GgT28KX1DtgvT4JOjCmuk',$,'ColumnShoeCasingWidth','The width of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2717,$,$,.READWRITE.);
-#2717=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2718=IFCSIMPLEPROPERTYTEMPLATE('1drZC5KKH0DeF6XwUMfoij',$,'ColumnShoeCasingDepth','The depth of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2719,$,$,.READWRITE.);
-#2719=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2720=IFCPROPERTYSETTEMPLATE('0IRqt0azn1EBvJkaoMazbW',$,'Pset_DiscreteAccessoryCornerFixingPlate','Definition from IAI: Properties specific to corner fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2721,#2723,#2725,#2727));
-#2721=IFCSIMPLEPROPERTYTEMPLATE('1ukKuEOSzAVe0noB2tz9k$',$,'CornerFixingPlateLength','The length of the L-shaped corner plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2722,$,$,.READWRITE.);
-#2722=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2723=IFCSIMPLEPROPERTYTEMPLATE('19Q4YBU39D5Plz5v67_b85',$,'CornerFixingPlateThickness','The thickness of the L-shaped corner plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2724,$,$,.READWRITE.);
-#2724=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2725=IFCSIMPLEPROPERTYTEMPLATE('2f9itHUILCBuDd6Cvs5Hbs',$,'CornerFixingPlateFlangeWidthInPlaneZ','The flange width of the L-shaped corner plate in plane Z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2726,$,$,.READWRITE.);
-#2726=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2727=IFCSIMPLEPROPERTYTEMPLATE('1JiC79R4T2Qe85AIa1CcRq',$,'CornerFixingPlateFlangeWidthInPlaneX','The flange width of the L-shaped corner plate in plane X.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2728,$,$,.READWRITE.);
-#2728=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2729=IFCPROPERTYSETTEMPLATE('0IzQpN$MH74vORhjwiqQ4T',$,'Pset_DiscreteAccessoryDiagonalTrussConnector','Definition from IAI: Shape properties specific to connecting accessories in truss form with diagonal cross-bars.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2730,#2732,#2734,#2736,#2738,#2740));
-#2730=IFCSIMPLEPROPERTYTEMPLATE('2xLs0vcJD0$As0LK3poM8b',$,'DiagonalTrussHeight','The overall height of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2731,$,$,.READWRITE.);
-#2731=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2732=IFCSIMPLEPROPERTYTEMPLATE('1Ei$AQGZTC7xbLOFMpqCob',$,'DiagonalTrussLength','The overall length of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2733,$,$,.READWRITE.);
-#2733=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2734=IFCSIMPLEPROPERTYTEMPLATE('1RUPO0Bg5EhOWiYIutxP4L',$,'DiagonalTrussCrossBarSpacing','The spacing between diagonal cross-bar sections.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2735,$,$,.READWRITE.);
-#2735=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2736=IFCSIMPLEPROPERTYTEMPLATE('33xD91vpbEnBXTho3U1cfD',$,'DiagonalTrussBaseBarDiameter','The nominal diameter of the base bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2737,$,$,.READWRITE.);
-#2737=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2738=IFCSIMPLEPROPERTYTEMPLATE('3uAgqg3o94M9mA$NYeWc9q',$,'DiagonalTrussSecondaryBarDiameter','The nominal diameter of the secondary bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2739,$,$,.READWRITE.);
-#2739=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2740=IFCSIMPLEPROPERTYTEMPLATE('1SYvFbfzX78Rt6EuUggnYP',$,'DiagonalTrussCrossBarDiameter','The nominal diameter of the diagonal cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2741,$,$,.READWRITE.);
-#2741=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2742=IFCPROPERTYSETTEMPLATE('04LJQzxGX3vO$xPVIt1de9',$,'Pset_DiscreteAccessoryEdgeFixingPlate','Definition from IAI: Properties specific to edge fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2743,#2745,#2747,#2749));
-#2743=IFCSIMPLEPROPERTYTEMPLATE('3bB3tlzaP92PYWHrRC_n9F',$,'EdgeFixingPlateLength','The length of the L-shaped edge plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2744,$,$,.READWRITE.);
-#2744=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2745=IFCSIMPLEPROPERTYTEMPLATE('1eIiQZrQ5EdRqqMltmBXiH',$,'EdgeFixingPlateThickness','The thickness of the L-shaped edge plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2746,$,$,.READWRITE.);
-#2746=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2747=IFCSIMPLEPROPERTYTEMPLATE('1Mly7K0KzAaALcxoXDzXXW',$,'EdgeFixingPlateFlangeWidthInPlaneZ','The flange width of the L-shaped edge plate in plane Z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2748,$,$,.READWRITE.);
-#2748=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2749=IFCSIMPLEPROPERTYTEMPLATE('1cltH0zYT8OR_ZTuK9_ZvK',$,'EdgeFixingPlateFlangeWidthInPlaneX','The flange width of the L-shaped edge plate in plane X.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2750,$,$,.READWRITE.);
-#2750=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2751=IFCPROPERTYSETTEMPLATE('18kqj0uyb1Uu0pNWC76zI7',$,'Pset_DiscreteAccessoryFixingSocket','Definition from IAI: Properties common to fixing sockets.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2752,#2753,#2755,#2757));
-#2752=IFCSIMPLEPROPERTYTEMPLATE('2ODKwYHPT4phDGek5GAia1',$,'FixingSocketTypeReference','Type reference for the fixing socket according to local standards. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#2753=IFCSIMPLEPROPERTYTEMPLATE('1yhqfAOZjCyuvvDeTqeByM',$,'FixingSocketHeight','The overall height of the fixing socket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2754,$,$,.READWRITE.);
-#2754=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2755=IFCSIMPLEPROPERTYTEMPLATE('35A7Je9kPD_OmesCYHUopv',$,'FixingSocketThreadDiameter','The nominal diameter of the thread.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2756,$,$,.READWRITE.);
-#2756=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2757=IFCSIMPLEPROPERTYTEMPLATE('24bBCKg6nF7v_N27qZeV$E',$,'FixingSocketThreadLength','The length of the threaded part of the fixing socket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2758,$,$,.READWRITE.);
-#2758=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2759=IFCPROPERTYSETTEMPLATE('3W3Y9VU$9DnO6m4qD3qeFB',$,'Pset_DiscreteAccessoryLadderTrussConnector','Definition from IAI: Shape properties specific to connecting accessories in truss form with straight cross-bars in ladder shape.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2760,#2762,#2764,#2766,#2768,#2770));
-#2760=IFCSIMPLEPROPERTYTEMPLATE('2IcmOEFzbElAQR4Nw55AFT',$,'LadderTrussHeight','The overall height of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2761,$,$,.READWRITE.);
-#2761=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2762=IFCSIMPLEPROPERTYTEMPLATE('19c8ylQLv1uQcPPrySDpV6',$,'LadderTrussLength','The overall length of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2763,$,$,.READWRITE.);
-#2763=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2764=IFCSIMPLEPROPERTYTEMPLATE('1Nt4eaUkv3EuCk7PR891f4',$,'LadderTrussCrossBarSpacing','The spacing between the straight cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2765,$,$,.READWRITE.);
-#2765=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2766=IFCSIMPLEPROPERTYTEMPLATE('02AziTPlfCMxOKOTD6arfj',$,'LadderTrussBaseBarDiameter','The nominal diameter of the base bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2767,$,$,.READWRITE.);
-#2767=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2768=IFCSIMPLEPROPERTYTEMPLATE('3sxemk4GP2KfrzC57$V$hN',$,'LadderTrussSecondaryBarDiameter','The nominal diameter of the secondary bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2769,$,$,.READWRITE.);
-#2769=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2770=IFCSIMPLEPROPERTYTEMPLATE('2cLQDWeW92jPo4$zM_QRGX',$,'LadderTrussCrossBarDiameter','The nominal diameter of the straight cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2771,$,$,.READWRITE.);
-#2771=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2772=IFCPROPERTYSETTEMPLATE('1LFvnLCMnDxP$PFFPZFt_9',$,'Pset_DiscreteAccessoryStandardFixingPlate','Definition from IAI: Properties specific to standard fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2773,#2775,#2777));
-#2773=IFCSIMPLEPROPERTYTEMPLATE('1V_3yvDnjCVBbQtxKaTqkd',$,'StandardFixingPlateWidth','The width of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2774,$,$,.READWRITE.);
-#2774=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2775=IFCSIMPLEPROPERTYTEMPLATE('24u52z0nP5Gx$ReyTSxQZc',$,'StandardFixingPlateDepth','The depth of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2776,$,$,.READWRITE.);
-#2776=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2777=IFCSIMPLEPROPERTYTEMPLATE('2FsTMR28n9evLbIIuhJMVf',$,'StandardFixingPlateThickness','The thickness of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2778,$,$,.READWRITE.);
-#2778=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2779=IFCPROPERTYSETTEMPLATE('1Kb1VZUhL2UesVmXtqqfaN',$,'Pset_DiscreteAccessoryWireLoop','Definition from IAI: Shape properties common to wire loop joint connectors.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2780,#2782,#2784,#2786,#2788,#2790));
-#2780=IFCSIMPLEPROPERTYTEMPLATE('2i$QGDwmv5AeYgd8JVi1df',$,'WireLoopBasePlateThickness','The thickness of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2781,$,$,.READWRITE.);
-#2781=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2782=IFCSIMPLEPROPERTYTEMPLATE('2zd7JEkbf51uEkReiV2EZy',$,'WireLoopBasePlateWidth','The width of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2783,$,$,.READWRITE.);
-#2783=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2784=IFCSIMPLEPROPERTYTEMPLATE('3i8wCMyuT44gv5Xbu4$4pQ',$,'WireLoopBasePlateLength','The length of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2785,$,$,.READWRITE.);
-#2785=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2786=IFCSIMPLEPROPERTYTEMPLATE('0ufpTxaSbCQOphEo0pu$Vc',$,'WireDiameter','The nominal diameter of the wire.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2787,$,$,.READWRITE.);
-#2787=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2788=IFCSIMPLEPROPERTYTEMPLATE('0rdIF3JGL4V8v9II74a8RY',$,'WireEmbeddingLength','The length of the part of wire which is embedded in the precast concrete element.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2789,$,$,.READWRITE.);
-#2789=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2790=IFCSIMPLEPROPERTYTEMPLATE('3UYkVP1$z4yfey7_plTRXx',$,'WireLoopLength','The length of the fastening loop part of the wire.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2791,$,$,.READWRITE.);
-#2791=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2792=IFCPROPERTYSETTEMPLATE('2LbrqtsXr0ChCwAfTehGHc',$,'Pset_Asset','Definition from IAI: An asset is a uniquely identifiable element which has a financial value and against which maintenance actions are recorded. \X2\000A\X0\',$,'IfcAsset',(#2793,#2795,#2797));
-#2793=IFCSIMPLEPROPERTYTEMPLATE('1CkFfXIe977u2RM7V8_hGE',$,'AssetAccountingType','Identifies the predefined types of risk from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2794,$,$,$,.READWRITE.);
-#2794=IFCPROPERTYENUMERATION('PEnum_AssetAccountingType',(IFCLABEL('Fixed'),IFCLABEL('NonFixed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2795=IFCSIMPLEPROPERTYTEMPLATE('2b$IIZTSrFOg$KIQJzoMCV',$,'AssetTaxType','Identifies the predefined types of taxation group from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2796,$,$,$,.READWRITE.);
-#2796=IFCPROPERTYENUMERATION('PEnum_AssetTaxType',(IFCLABEL('Capitalised'),IFCLABEL('Expensed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2797=IFCSIMPLEPROPERTYTEMPLATE('2TZZaYCRb8$xRSgq56sgqa',$,'AssetInsuranceType','Identifies the predefined types of insurance rating from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2798,$,$,$,.READWRITE.);
-#2798=IFCPROPERTYENUMERATION('PEnum_AssetInsuranceType',(IFCLABEL('Personal'),IFCLABEL('Real'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2799=IFCPROPERTYSETTEMPLATE('0uecFZXUv1OQm2jG1d4$iv',$,'Pset_FurnitureTypeChair','Definition from IAI: A set of specific properties for furniture type chair. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Chair\X2\000A\X0\',$,'IfcFurnitureType',(#2800,#2802,#2804));
-#2800=IFCSIMPLEPROPERTYTEMPLATE('16zvvOpD50fR00iPS0yh6X',$,'SeatingHeight','The value of seating height if the chair height is not adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2801,$,$,.READWRITE.);
-#2801=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2802=IFCSIMPLEPROPERTYTEMPLATE('0Hr8tKO8D3Bu2dUCHrG3Q7',$,'HighestSeatingHeight','The value of seating height of high level if the chair height is adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2803,$,$,.READWRITE.);
-#2803=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2804=IFCSIMPLEPROPERTYTEMPLATE('3_vxEfZVb5xQhBfV4EgD9L',$,'LowestSeatingHeight','The value of seating height of low level if the chair height is adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2805,$,$,.READWRITE.);
-#2805=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2806=IFCPROPERTYSETTEMPLATE('1aG4QEOm91IgiG8XvQEZIF',$,'Pset_FurnitureTypeCommon','Definition from IAI: Common properties for all types of furniture such as chair, desk, table, and file cabinet. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FurnitureCommon',$,'IfcFurnitureType',(#2807,#2808,#2809,#2811,#2813,#2815));
-#2807=IFCSIMPLEPROPERTYTEMPLATE('0ZwkECB9r8WurOftjKe7ra',$,'Description','Specific description of this type of furniture.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2808=IFCSIMPLEPROPERTYTEMPLATE('2hMDAmvq1BSw665vr0WXKx',$,'Style','Description of the furniture style',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2809=IFCSIMPLEPROPERTYTEMPLATE('2Qh$5B2lHCZ90OxT4TDcNU',$,'NominalHeight','The nominal height of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2810,$,$,.READWRITE.);
-#2810=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2811=IFCSIMPLEPROPERTYTEMPLATE('087qkE4tjCp9a_buZoC$FE',$,'NominalLength','The nominal length of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2812,$,$,.READWRITE.);
-#2812=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2813=IFCSIMPLEPROPERTYTEMPLATE('355zHo3LrExBCoV5GxzhnF',$,'NominalDepth','The nominal depth of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2814,$,$,.READWRITE.);
-#2814=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2815=IFCSIMPLEPROPERTYTEMPLATE('1NU6Wmcuz40QaGzzAWyd_R',$,'MainColor','The main color of the furniture of this type',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2816=IFCPROPERTYSETTEMPLATE('0E6YbxDaX52w7gqYQajou5',$,'Pset_FurnitureTypeDesk','Definition from IAI: A set of specific properties for furniture type desk. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Desk\X2\000A\X0\',$,'IfcFurnitureType',(#2817));
-#2817=IFCSIMPLEPROPERTYTEMPLATE('0JWU8Q9ev7D8sbc07H1BMD',$,'WorksurfaceArea','The value of the work surface area of the desk.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2818,$,$,.READWRITE.);
-#2818=IFCNAMEDUNIT($,.AREAUNIT.);
-#2819=IFCPROPERTYSETTEMPLATE('0tsRLZHpz1xQCRQ2brto_Y',$,'Pset_FurnitureTypeFileCabinet','Definition from IAI: A set of specific properties for furniture type file cabinet HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FileCabinet\X2\000A\X0\',$,'IfcFurnitureType',(#2820));
-#2820=IFCSIMPLEPROPERTYTEMPLATE('3kTDj37hLB8g8BdD44$1R2',$,'WithLock','Indicates whether the file cabinet is lockable (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2821=IFCPROPERTYSETTEMPLATE('2iDvemq0PEexx50AH1QwoT',$,'Pset_FurnitureTypeTable','A set of specific properties for furniture type table. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Table\X2\000A\X0\',$,'IfcFurnitureType',(#2822,#2824));
-#2822=IFCSIMPLEPROPERTYTEMPLATE('2OU9jdhr13TQSYOaqEd4tJ',$,'WorksurfaceArea','The value of the work surface area of the desk..',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2823,$,$,.READWRITE.);
-#2823=IFCNAMEDUNIT($,.AREAUNIT.);
-#2824=IFCSIMPLEPROPERTYTEMPLATE('31llnGRL5EegLKFCTxLgZo',$,'NumberOfChairs','Maximum number of chairs that can fit with the table for normal use.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#2825=IFCPROPERTYSETTEMPLATE('2zGyXRagnA7A2L8EdIrj6y',$,'Pset_ManufacturerOccurrence','Definition from IAI: Defines properties of individual instances of manufactured products that may be given by the manufacturer.',$,'IfcElement',(#2826,#2827,#2828,#2829));
-#2826=IFCSIMPLEPROPERTYTEMPLATE('1cePrpj_H7yRXy26kV3V1Z',$,'AcquisitionDate','The date that the manufactured item was purchased.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2827=IFCSIMPLEPROPERTYTEMPLATE('1UeMxAbwbBtPcp3CfrkK5x',$,'BarCode','The identity of the bar code given to an occurrence of the product',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2828=IFCSIMPLEPROPERTYTEMPLATE('12gBHCeBj5Chx2ZtF2IyKV',$,'SerialNumber','The serial number assigned to an occurrence of a product',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2829=IFCSIMPLEPROPERTYTEMPLATE('12u5$iyiv3yh7jQjsFCG1x',$,'BatchReference','The identity of the batch reference from which an occurrence of a product is taken.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2830=IFCPROPERTYSETTEMPLATE('2DQbVCFPf5Uuv7r0NvMX8a',$,'Pset_ManufacturerTypeInformation','Definition from IAI: Defines characteristics of manufactured products that may be given by the manufacturer. Note that the term ''manufactured'' may also be used to refer to products that are supplied and identified by the supplier or that are assembled off site by a third party provider. \X2\000A\X0\This property set replaces the entity IfcManufacturerInformation from previous IFC releases.',$,'IfcElement',(#2831,#2832,#2833,#2834,#2835));
-#2831=IFCSIMPLEPROPERTYTEMPLATE('2ECx3aPh1CHethhRsmwgbA',$,'ArticleNumber','Article number or reference that may be applied to a product according to a standard scheme for article number definition (e.g. UN, EAN)',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2832=IFCSIMPLEPROPERTYTEMPLATE('0dtXAHj1PA7x$wocPBfpMA',$,'ModelReference','The name of the manufactured item as used by the manufacturer.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2833=IFCSIMPLEPROPERTYTEMPLATE('3TsbPER6jEHRLJvgXKzVg7',$,'ModelLabel','The model number and/or unit designator assigned by the manufacturer of the manufactured item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2834=IFCSIMPLEPROPERTYTEMPLATE('1$SjMGg_j9nQsguVZMNfQL',$,'Manufacturer','The organization that manufactured and/or assembled the item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2835=IFCSIMPLEPROPERTYTEMPLATE('17Zf0qfxr2KO51aCYQTULy',$,'ProductionYear','The year of production of the manufactured item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2836=IFCPROPERTYSETTEMPLATE('2yc27o4qzCYOUg_xP4NKWL',$,'Pset_PropertyAgreement','Definition from IAI: A property agreement is an agreement that enables the occupation of a property for a period of time.\X2\000A000A\X0\The objective is to capture the information within an agreement that is relevant to a facilities manager. Design and construction information associated with the property is not considered. A property agreement may be applied to an instance of IfcSpatialStructureElement including to compositions defined through the IfcSpatialStructureElement.Element.CompositionEnum.\X2\000A000A\X0\Note that the associated actors are captured by the IfcOccupant class.\X2\000A\X0\',$,'IfcSpatialStructureElement',(#2837,#2839,#2840,#2841,#2842,#2843,#2844,#2845,#2847,#2848,#2849,#2850));
-#2837=IFCSIMPLEPROPERTYTEMPLATE('1CICNu8B52oQ1ABT3ME3_w',$,'AgreementType','Identifies the predefined types of property agreement from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2838,$,$,$,.READWRITE.);
-#2838=IFCPROPERTYENUMERATION('PEnum_PropertyAgreementType',(IFCLABEL('Assignment'),IFCLABEL('Lease'),IFCLABEL('Tenant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2839=IFCSIMPLEPROPERTYTEMPLATE('2PNnuOsrfBTeNeN4DPFZg1',$,'Identifier','The identifier assigned to the agreement for the purposes of tracking.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2840=IFCSIMPLEPROPERTYTEMPLATE('1edl$yW7TEjgB6tMAv_hR$',$,'Version','The version number of the agreement that is identified',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2841=IFCSIMPLEPROPERTYTEMPLATE('0r7wjUMMHCmQKO1OEbCunq',$,'VersionDate','The date on which the version of the agreement became applicable',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2842=IFCSIMPLEPROPERTYTEMPLATE('2qqORiv6X31vy$fZMe8J9l',$,'PropertyName','Addressing details of the property as stated within the agreement',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2843=IFCSIMPLEPROPERTYTEMPLATE('2mh$vMfn13BheqC7L70lf5',$,'CommencementDate','Date on which the agreement commences',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2844=IFCSIMPLEPROPERTYTEMPLATE('2MsH$srzvAvfoRwqnjWo0u',$,'TerminationDate','Date on which the agreement terminates',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2845=IFCSIMPLEPROPERTYTEMPLATE('2ynNkadRr0pA90yaS5Pkq9',$,'Duration','The period of time for the lease. Note that values should be given in year/day/month and not in hour/minute/second.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2846,$,$,.READWRITE.);
-#2846=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2847=IFCSIMPLEPROPERTYTEMPLATE('0GwcgwjUT4$vq0CrfpeuXd',$,'Options','A statement of the options available in the agreement',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2848=IFCSIMPLEPROPERTYTEMPLATE('2sc7G7QQb6N9OEbGY1_LHi',$,'ConditionCommencement','Condition of property provided on commencement of the agreement e.g. cold shell, warm lit shell, broom clean, turn-key',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2849=IFCSIMPLEPROPERTYTEMPLATE('1o0Yubpd1CrQ2bSnnHDdbp',$,'Restrictions','Restrictions that may be placed by a competent authority',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2850=IFCSIMPLEPROPERTYTEMPLATE('17BoqyZgjBYhaXCO1lZ85S',$,'ConditionTermination','Condition of property required on termination of the agreement e.g. cold shell, warm lit shell, broom clean, turn-key',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2851=IFCPROPERTYSETTEMPLATE('1wqf1VKw52FP_1dLcUOxY0',$,'Pset_Reliability','Definition from IAI: Indication of the expected reliability of a product\X2\000A\X0\',$,'IfcProduct',(#2852));
-#2852=IFCSIMPLEPROPERTYTEMPLATE('37S3qeWhj2luj$42Zxijos',$,'MeanTimeBetweenFailure','The average time duration between instances of failure of a product.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2853,$,$,.READWRITE.);
-#2853=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2854=IFCPROPERTYSETTEMPLATE('1vYFkRHpzCb9V6$0tMgYYJ',$,'Pset_Risk','Definition from IAI: An indication of exposure to mischance, peril, menace, hazard or loss. \X2\000A000A\X0\HISTORY: Extended in IFC2x3\X2\000A000A\X0\There are various types of risk that may be encountered and there may be several instances of Pset_Risk associated in an instance of an IfcObject (either a physical object, a grouping of physical objects such as an asset or a process).\X2\000A\X0\Specification of this property set incorporates the values of the Incom risk analysis matrix (satisfying AS/NZS 4360) together with additional identified requirements.\X2\000A\X0\',$,'IfcObject',(#2855,#2857,#2858,#2859,#2860,#2861,#2863,#2865,#2867,#2869,#2870));
-#2855=IFCSIMPLEPROPERTYTEMPLATE('11B3mAiyv8qwznkcUD5MyP',$,'RiskType','Identifies the predefined types of risk from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2856,$,$,$,.READWRITE.);
-#2856=IFCPROPERTYENUMERATION('PEnum_RiskType',(IFCLABEL('Business'),IFCLABEL('Hazard'),IFCLABEL('HealthAndSafety'),IFCLABEL('Insurance'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2857=IFCSIMPLEPROPERTYTEMPLATE('10fUZ4kaf4ce8cIUytKkPu',$,'NatureOfRisk','An indication of the generic nature of the risk that might be encountered. \X2\000A000A\X0\NOTE: It is anticipated that there will be a local agreement that constrains the values that might be assigned to this property. An example might be ''Fall'' or ''Fall of grille unit'' causing injury and damage to person and property',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2858=IFCSIMPLEPROPERTYTEMPLATE('3GgLFHtQLEAe$J8v6oqoW3',$,'SubNatureOfRisk1','A first subsidiary value that might be assigned to designate a more specific type of risk.\X2\000A000A\X0\NOTE: Nature of risk may be identified in various ways depending upon the place where risk assessment takes place and according to local agreement. This property set allows for a generic nature of risk and up to two subsidiary natures. An example might be ''causing injury and damage''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2859=IFCSIMPLEPROPERTYTEMPLATE('05bdE5BVnDyesO8Dhgbk1L',$,'SubNatureOfRisk2','A second subsidiary value that might be assigned to designate a more specific type of risk. An example might be ''o person and property''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2860=IFCSIMPLEPROPERTYTEMPLATE('3_kVmjy_fA_ubdccfOnBYD',$,'RiskCause','A value that may be assigned to capture the cause or trigger for the risk. An example might be ''poor fixing''',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2861=IFCSIMPLEPROPERTYTEMPLATE('0NAG$3tqX55uxTWErVmNa5',$,'AssessmentOfRisk','Likelihood of risk event occurring.\X2\000A000A\X0\Note that assessment of risk may frequently be associated with the physical location of the object for which the risk is assessed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2862,$,$,$,.READWRITE.);
-#2862=IFCPROPERTYENUMERATION('PEnum_RiskAssessment',(IFCLABEL('AlmostCertain'),IFCLABEL('VeryLikely'),IFCLABEL('Likely'),IFCLABEL('VeryPossible'),IFCLABEL('Possible'),IFCLABEL('SomewhatPossible'),IFCLABEL('Unlikely'),IFCLABEL('VeryUnlikely'),IFCLABEL('Rare'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
-#2863=IFCSIMPLEPROPERTYTEMPLATE('2SwLnqKM579QK2qk0dTGyl',$,'RiskConsequence','Indicates the level of severity of the consequences that the risk would have in case it happens',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2864,$,$,$,.READWRITE.);
-#2864=IFCPROPERTYENUMERATION('PEnum_RiskConsequence',(IFCLABEL('Catastrophic'),IFCLABEL('Severe'),IFCLABEL('Major'),IFCLABEL('Considerable'),IFCLABEL('Moderate'),IFCLABEL('Some'),IFCLABEL('Minor'),IFCLABEL('VeryLow'),IFCLABEL('Insignificant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2865=IFCSIMPLEPROPERTYTEMPLATE('3R0Sd4q4P46RIryp6O$VzR',$,'RiskRating','A general rating of the risk that may be determined from a combination of the risk assessment and risk consequence',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2866,$,$,$,.READWRITE.);
-#2866=IFCPROPERTYENUMERATION('PEnum_RiskRating',(IFCLABEL('Critical'),IFCLABEL('VeryHigh'),IFCLABEL('High'),IFCLABEL('Considerable'),IFCLABEL('Moderate'),IFCLABEL('Some'),IFCLABEL('Low'),IFCLABEL('VeryLow'),IFCLABEL('Insignificant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2867=IFCSIMPLEPROPERTYTEMPLATE('1ty2AfKQnFqhLyECmOn4Dd',$,'RiskOwner','A determination of who is the owner of the risk by reference to principal roles of organizations within a project. Determination of the specific organization should be by reference to instances of IfcActorRole assigned to instances of IfcOrganization (if assigned).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2868,$,$,$,.READWRITE.);
-#2868=IFCPROPERTYENUMERATION('PEnum_RiskOwner',(IFCLABEL('Designer'),IFCLABEL('Specifier'),IFCLABEL('Constructor'),IFCLABEL('Installer'),IFCLABEL('Maintainer'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2869=IFCSIMPLEPROPERTYTEMPLATE('3UCQwtgXL6XARhuIamx9tG',$,'AffectsSurroundings','Indicates wether the risk affects only to the person assigned to that task (FALSE) or if it can also affect to the people in the surroundings (TRUE).\X2\000A000A\X0\For example, the process of painting would affect all the people in the vicinity of the process ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2870=IFCSIMPLEPROPERTYTEMPLATE('2pBXMnMtbBW9nMc1nrzLnZ',$,'PreventiveMeassures','Identifies preventive measures to be taken to mitigate risk',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2871=IFCPROPERTYSETTEMPLATE('2KSPTgD$T3D93znJt66Z6c',$,'Pset_SystemFurnitureElementTypeCommon','Definition from IAI: Common properties for all systems furniture (I.e. modular furniture) element types (e.g. vertical panels, work surfaces, and storage). HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FurnitureElementCommon',$,'IfcSystemFurnitureElementType',(#2872,#2873,#2874,#2876,#2878));
-#2872=IFCSIMPLEPROPERTYTEMPLATE('19xIhv6ZX5Zgb7VVX8EqIq',$,'IsUsed','Indicates whether the element is being used in a workstation (= TRUE) or not.(= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2873=IFCSIMPLEPROPERTYTEMPLATE('3AEuLHB_r7AeURC$SCEjQO',$,'GroupCode','e.g. panels, worksurfaces, storage, etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2874=IFCSIMPLEPROPERTYTEMPLATE('1JlWeTg4T9GhVIByAq195Y',$,'NominalWidth','The nominal width of the system furniture elements of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2875,$,$,.READWRITE.);
-#2875=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2876=IFCSIMPLEPROPERTYTEMPLATE('0QmWdwX$15$Q2m664sAuIj',$,'NominalHeight','The nominal height of the system furniture elements of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2877,$,$,.READWRITE.);
-#2877=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2878=IFCSIMPLEPROPERTYTEMPLATE('2JNXjq9_1BYPLDY$LeBQu9',$,'Finishing','The finishing applied to system furniture elements of this type e.g. walnut, fabric.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2879=IFCPROPERTYSETTEMPLATE('0lclgn1CD94fpEIse3Y8_G',$,'Pset_SystemFurnitureElementTypePanel','Definition from IAI: A set of specific properties for vertical panels that assembly workstations.. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Panel',$,'IfcSystemFurnitureElementType',(#2880,#2881,#2883));
-#2880=IFCSIMPLEPROPERTYTEMPLATE('2v9LYTRDrD1vw5WXKo2$jq',$,'HasOpening','indicates whether the panel has an opening (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2881=IFCSIMPLEPROPERTYTEMPLATE('2WVp_Rj091GRoY$xngkMmu',$,'FurniturePanelType','Available panel types from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2882,$,$,$,.READWRITE.);
-#2882=IFCPROPERTYENUMERATION('PEnum_FurniturePanelType',(IFCLABEL('Acoustical'),IFCLABEL('Glazed'),IFCLABEL('Horz_Seg'),IFCLABEL('Monolithic'),IFCLABEL('Open'),IFCLABEL('Ends'),IFCLABEL('Door'),IFCLABEL('Screen'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2883=IFCSIMPLEPROPERTYTEMPLATE('1L67l853zCWBOEZ3LqN5qA',$,'NominalThickness','The nominal thickness of the panel',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2884,$,$,.READWRITE.);
-#2884=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2885=IFCPROPERTYSETTEMPLATE('0$OX3x4Pz3qPdw_hnJAuPK',$,'Pset_SystemFurnitureElementTypeWorkSurface','Definition from IAI: A set of specific properties for work surfaces used in workstations. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Worksurface',$,'IfcSystemFurnitureElementType',(#2886,#2887,#2889,#2891,#2893));
-#2886=IFCSIMPLEPROPERTYTEMPLATE('282y0_2xX109qVZiiw$ONt',$,'UsePurpose','The principal purpose for which the work surface is intended to be used e.g. writing/reading, computer, meeting, printer, reference files, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2887=IFCSIMPLEPROPERTYTEMPLATE('1c$3psOe593QFAiM9tHqUI',$,'SupportType','Available support types from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2888,$,$,$,.READWRITE.);
-#2888=IFCPROPERTYENUMERATION('PEnum_FurniturePanelType',(IFCLABEL('Freestanding'),IFCLABEL('Supported'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2889=IFCSIMPLEPROPERTYTEMPLATE('3$AXYaC1H67QrJG7p5kQJa',$,'HangingHeight','The hanging height of the worksurface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2890,$,$,.READWRITE.);
-#2890=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2891=IFCSIMPLEPROPERTYTEMPLATE('1c1zDiBbP8RBe9pkbUU0iY',$,'NominalThickness','The nominal thickness of the work surface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure ',$,$,#2892,$,$,.READWRITE.);
-#2892=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2893=IFCSIMPLEPROPERTYTEMPLATE('3FW$E0ISzBq91Z4RhMFvjf',$,'ShapeDescription','A description of the shape of the work surface e.g. corner square, rectangle, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2894=IFCPROPERTYSETTEMPLATE('0XfgYxeFbEPOfD791it$f7',$,'Pset_Warranty','Definition from IAI: An assurance given by the seller or provider of an artefact that the artefact is without defects and will operate as described for a defined period of time without failure and that if a defect does arise during that time, that it will be corrected by the seller or provider.\X2\000A\X0\',$,'IFCKERNEL/IfcProduct,IFCPRODUCTEXTENSION/IfcSystem',(#2895,#2896,#2897,#2898,#2899,#2901,#2902,#2903));
-#2895=IFCSIMPLEPROPERTYTEMPLATE('2I4f7euYH8TP0isUXz5Oim',$,'WarrantyIdentifier','The identifier assigned to a warranty.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2896=IFCSIMPLEPROPERTYTEMPLATE('0xdRHkFrr7yuHssP8p12j7',$,'WarrantyStartDate','The date on which the warranty commences',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2897=IFCSIMPLEPROPERTYTEMPLATE('0B3odyAEH8Txu7zRGCths_',$,'WarrantyEndDate','The date on which the warranty expires.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
-#2898=IFCSIMPLEPROPERTYTEMPLATE('3rqUzB01fEjPl5pday40Sw',$,'IsExtendedWarranty','Indication of whether this is an extended warranty whose duration is greater than that normally assigned to an artefact (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2899=IFCSIMPLEPROPERTYTEMPLATE('3ovkT6rSjF48aH3yHhSlul',$,'WarrantyPeriod','The time duration during which a manufacturer or supplier guarantees or warrants the performance of an artefact.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2900,$,$,.READWRITE.);
-#2900=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2901=IFCSIMPLEPROPERTYTEMPLATE('1cZqpKgtj7QvglraXKGHaN',$,'PointOfContact','The organization that should be contacted for action under the terms of the warranty. Note that the role of the organization (manufacturer, supplier, installer etc.) is determined by the IfcActorRole attribute of IfcOrganization.',.P_REFERENCEVALUE.,'IfcOrganization',$,$,$,$,$,.READWRITE.);
-#2902=IFCSIMPLEPROPERTYTEMPLATE('0SFfnJU6H7YgWB_bNLFuBE',$,'WarrantyContent','The content of the warranty',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2903=IFCSIMPLEPROPERTYTEMPLATE('27NpHegPf1_w2ViuBDrd5M',$,'Exclusions','Items, conditions or actions that may be excluded from the warranty or that may cause the warranty to become void.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2904=IFCPROPERTYSETTEMPLATE('3EB2qpNovF_BOS_nFutkja',$,'Pset_ProjectOrderChangeOrder','Definition from IAI: A change order is an instruction to make a change to a product or work being undertake. Note that the change order status is defined in the same way as a work order status since a change order implies a work requirement.\X2\000A\X0\',$,'IfcProjectOrder',(#2905,#2906,#2907));
-#2905=IFCSIMPLEPROPERTYTEMPLATE('07Ol713Vf3aBAQOtjHwaja',$,'ChangeDescription','A general description of the change.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2906=IFCSIMPLEPROPERTYTEMPLATE('1CQmT2P4TESfO6foRkzeqo',$,'ReasonForChange','A description of the problem for why a change is needed.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2907=IFCSIMPLEPROPERTYTEMPLATE('0iWkCnXaD4BA7$HhvpRxXd',$,'BudgetSource','The budget source requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2908=IFCPROPERTYSETTEMPLATE('1PzMLIC998n91qRGr9eHJU',$,'Pset_ProjectOrderMaintenanceWorkOrder','Definition from IAI: A MaintenanceWorkOrder is a detailed description of maintenance work that is to be performed. Note that the Scheduled Frequency property of the maintenance work order is used when the order is required as an instance of a scheduled work order.',$,'IfcProjectOrder',(#2909,#2910,#2911,#2912,#2913,#2914,#2915,#2917,#2919,#2921));
-#2909=IFCSIMPLEPROPERTYTEMPLATE('1g7z597UT0090ROvMQ4D2v',$,'ProductDescription','A textual description of the products that require the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2910=IFCSIMPLEPROPERTYTEMPLATE('1DPpJonXX16Q$dPUlHgmAv',$,'ShortJobDescription','Short description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2911=IFCSIMPLEPROPERTYTEMPLATE('15O8DlnU14Nh7tAzQs9seu',$,'LongJobDescription','Description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2912=IFCSIMPLEPROPERTYTEMPLATE('1$f4Ooweb7B9Ck_ZvciHha',$,'WorkTypeRequested','Work type requested in circumstances where there are categorizations of types of work task. It could be used to identify a remedial task, minor work task, electrical task etc.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2913=IFCSIMPLEPROPERTYTEMPLATE('0$bxEKN9n5LRlQcc9qgefi',$,'ContractualType','The contractual type of the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2914=IFCSIMPLEPROPERTYTEMPLATE('1SIBFqkSf18uNVqJMvmbgU',$,'IfNotAccomplished','Comments if the job is not accomplished.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2915=IFCSIMPLEPROPERTYTEMPLATE('3Bw9drRpr7hf0ULOQOK1sw',$,'MaintenaceType','Identifies the predefined types of maintenance that can be done from which the type that generates the maintenance work order may be set where:\X2\000A000A\X0\ConditionBased = generated as a result of the condition of an asset or artefact being less than a determined value.\X2\000A\X0\Corrective = generated as a result of an immediate and urgent need for maintenance action.\X2\000A\X0\PlannedCorrective = generated as a result of immediate corrective action being needed but with sufficient time available for the work order to be included in maintenance planning.\X2\000A\X0\Scheduled = generated as a result of a fixed, periodic maintenance requirement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2916,$,$,$,.READWRITE.);
-#2916=IFCPROPERTYENUMERATION('PEnum_MaintenanceType',(IFCLABEL('ConditionBased'),IFCLABEL('Corrective'),IFCLABEL('PlannedCorrective'),IFCLABEL('Scheduled'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2917=IFCSIMPLEPROPERTYTEMPLATE('2hn0PvOXn6fu$z88BB5eep',$,'FaultPriorityType','Identifies the predefined types of priority that can be assigned from which the type may be set where:\X2\000A000A\X0\High = action is required urgently.\X2\000A\X0\Medium = action can occur within a reasonable period of time.\X2\000A\X0\Low = action can occur when convenient.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2918,$,$,$,.READWRITE.);
-#2918=IFCPROPERTYENUMERATION('PEnum_PriorityType',(IFCLABEL('High'),IFCLABEL('Medium'),IFCLABEL('Low'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2919=IFCSIMPLEPROPERTYTEMPLATE('1bFpo117H1Vg_u5j1dvnzJ',$,'LocationPriorityType','Identifies the predefined types of priority that can be assigned from which the type may be set where:\X2\000A000A\X0\High = action is required urgently.\X2\000A\X0\Medium = action can occur within a reasonable period of time.\X2\000A\X0\Low = action can occur when convenient.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2920,$,$,$,.READWRITE.);
-#2920=IFCPROPERTYENUMERATION('PEnum_PriorityType',(IFCLABEL('High'),IFCLABEL('Medium'),IFCLABEL('Low'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
-#2921=IFCSIMPLEPROPERTYTEMPLATE('045_GaqPP2nwg_o90D$cBK',$,'ScheduledFrequency','The period of time between expected instantiations of a work order that may have been predefined.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2922,$,$,.READWRITE.);
-#2922=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2923=IFCPROPERTYSETTEMPLATE('3z6TK1zsn80BZM6wbuKxYu',$,'Pset_ProjectOrderMoveOrder','Definition from IAI: Defines the requirements for move orders. Note that the move order status is defined in the same way as a work order status since a move order implies a work requirement.\X2\000A\X0\',$,'IfcProjectOrder',(#2924,#2925));
-#2924=IFCSIMPLEPROPERTYTEMPLATE('0SzxFGW1f3599EDvqYYlMA',$,'MoveDescription','A textual description of the move required.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2925=IFCSIMPLEPROPERTYTEMPLATE('1nbA3yJDP7dvwbOfxnHGks',$,'SpecialInstructions','Special instructions that affect the move.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2926=IFCPROPERTYSETTEMPLATE('2p4EQ$_dTCghDfdDSMadxx',$,'Pset_ProjectOrderPurchaseOrder','Definition from IAI: Defines the requirements for purchase orders in a project.\X2\000A\X0\',$,'IfcProjectOrder',(#2927,#2928));
-#2927=IFCSIMPLEPROPERTYTEMPLATE('3WbEXiuCH8hfah98b71aL7',$,'IsFOB','Indication of whether contents of the purchase order are delivered ''Free on Board'' (= True) or not (= False). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
-#2928=IFCSIMPLEPROPERTYTEMPLATE('3Uvt1$Gi9EkQ5wmNELKqN_',$,'ShipMethod','Method of shipping that will be used for goods or services. ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2929=IFCPROPERTYSETTEMPLATE('1zo8WEaZPFfAkYrBi0$eKL',$,'Pset_ProjectOrderWorkOrder','Definition from IAI: Defines the requirements for purchase orders in a project.\X2\000A\X0\',$,'IfcProjectOrder',(#2930,#2931,#2932,#2933,#2934,#2935));
-#2930=IFCSIMPLEPROPERTYTEMPLATE('1A3_s0lgX8kAatSkbx2ey6',$,'ProductDescription','A textual description of the products that require the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2931=IFCSIMPLEPROPERTYTEMPLATE('1tmpYv1oz3rxjmcJMq89Bp',$,'ShortJobDescription','Short description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2932=IFCSIMPLEPROPERTYTEMPLATE('2xCFWif$95r9d1JEcvx5SM',$,'LongJobDescription','Description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2933=IFCSIMPLEPROPERTYTEMPLATE('2_8wgLauHBzR1BLe8$48v1',$,'WorkTypeRequested','Work type requested in circumstances where there are categorizations of types of work task. It could be used to identify a remedial task, minor work task, electrical task etc.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2934=IFCSIMPLEPROPERTYTEMPLATE('0fWZD28xr31A$1hNnl19kj',$,'ContractualType','The contractual type of the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2935=IFCSIMPLEPROPERTYTEMPLATE('1K0lmtKhD4L9rXUJ5DnP0E',$,'IfNotAccomplished','Comments if the job is not accomplished.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2936=IFCPROPERTYSETTEMPLATE('3m$qb$lrfCm8CaXwXkqVd6',$,'Pset_ConcreteElementGeneral','Definition from IAI: General properties common to different types of concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2937,#2938,#2939,#2940,#2942,#2943,#2944,#2945,#2946,#2948));
-#2937=IFCSIMPLEPROPERTYTEMPLATE('3eRCgkfrT5g8YqQkATKtDH',$,'StructuralClass','The structural class defined for the concrete structure (e.g. ''1'').',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2938=IFCSIMPLEPROPERTYTEMPLATE('3DefkGKzr6Tu6jEoN0sOEe',$,'EnvironmentalClass','The environmental class for the concrete structure (e.g. ''Y1'')',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2939=IFCSIMPLEPROPERTYTEMPLATE('02$m$C_FX36PeLIMsNNPTQ',$,'FireRating','Fire rating given according to the national fire safety classification',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2940=IFCSIMPLEPROPERTYTEMPLATE('0ODApwYQ52b9h0VQwmEcE6',$,'ServiceLife','Expected service life (usually measured in years)',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,#2941,$,$,.READWRITE.);
-#2941=IFCNAMEDUNIT($,.TIMEUNIT.);
-#2942=IFCSIMPLEPROPERTYTEMPLATE('1rU3hv66f1EemWe39bnaaE',$,'LifeCycleEnvironmentalLoad','Description of the life-cycle environmental load',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2943=IFCSIMPLEPROPERTYTEMPLATE('2ItYGDl792AvKF6Z4Vz_gT',$,'DimensionalAccuracyClass','Classification designation of the dimensional accuracy requirement according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2944=IFCSIMPLEPROPERTYTEMPLATE('20C7kSRvH7TBNGQEuHudjr',$,'ConstructionToleranceClass','Classification designation of the on-site construction tolerances according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2945=IFCSIMPLEPROPERTYTEMPLATE('1pWpTNyJTElPKVf9J9jFjh',$,'ConstructionType','Designator for whether the concrete element is constructed on site or prefabricated. Allowed values are: ''Insitu'' vs ''Precast''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2946=IFCSIMPLEPROPERTYTEMPLATE('0Q125r2jnAoeRI2M9ZKYeV',$,'ConcreteCoverAtMainBars','The protective concrete cover at the main reinforcing bars according to local building regulations.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2947,$,$,.READWRITE.);
-#2947=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2948=IFCSIMPLEPROPERTYTEMPLATE('1AikZbS3j4Qwc5BKa_ewws',$,'ConcreteCoverAtLinks','The protective concrete cover at the reinforcement links according to local building regulations.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2949,$,$,.READWRITE.);
-#2949=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2950=IFCPROPERTYSETTEMPLATE('1iIhZfvDf8qx5te2PjfE$x',$,'Pset_ConcreteElementQuantityGeneral','Definition from IAI: Bill-of-Quantity properties common to different types of precast concrete elements. The Pset is used to express the total bulk quantities per element. The quantities may include the concrete, reinforcement, and different kinds of accessories. The Pset can be used by a number of subtypes of IfcBuildingElement. Note: Bulk quantities for parts used for surface finish, tiles, bricks, etc. are included as area quantities in Pset_ConcreteElementSurfaceFinishQuantityGeneral.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2951,#2953,#2960));
-#2951=IFCSIMPLEPROPERTYTEMPLATE('0fVaYvMInFuhAWQMWX2R9l',$,'TotalConcreteQuantity','The total bulk quantity of concrete used for the precast concrete element expressed as the volume of concrete in cubic meter (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2952,$,$,.READWRITE.);
-#2952=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2953=IFCCOMPLEXPROPERTYTEMPLATE('26c5Tvpp1CbQ1FWBEb3IUL',$,'TotalRebarQuantity','The total bulk quantity of rebar per size used for the precast concrete element expressed as the mass measure of rebar in kg. Note: several complex properties of this type, one for each rebar size, may be attached to the Pset.','CP_RebarQuantity',.P_COMPLEX.,(#2954,#2955,#2956,#2958));
-#2954=IFCSIMPLEPROPERTYTEMPLATE('1LOItjFRf7TwuiqMxrEryI',$,'RebarSteelGrade','The rebar steel grade (e.g. ''A500HW'') for which the total quantity is specified. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2955=IFCSIMPLEPROPERTYTEMPLATE('3BLIyilxP1WO1V5C4mMF0v',$,'RebarSteelGradeSpecificationReference','Reference to steel grade standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#2956=IFCSIMPLEPROPERTYTEMPLATE('1PMRcUDsjEeO83X5iPDC2d',$,'RebarDiameter','The rebar size (nominal diameter) for which the total quantity is specified. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2957,$,$,.READWRITE.);
-#2957=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2958=IFCSIMPLEPROPERTYTEMPLATE('0h2NN0oVLD4wiiXt45yZBd',$,'RebarQuantity','The total quantity of rebar for the specified bar size expressed as the mass measure of rebar in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#2959,$,$,.READWRITE.);
-#2959=IFCNAMEDUNIT($,.MASSUNIT.);
-#2960=IFCCOMPLEXPROPERTYTEMPLATE('3S_GNXPzn7wPUUALgm4Fm3',$,'TotalAccessoryQuantity','The total bulk quantity of accessories per type of accessory for the precast concrete element. The quantity may be expressed as number of items or mass measure in kg or both. Note: several complex properties of this type, one for each accessory type, may be attached to the Pset.','CP_AccessoryQuantity',.P_COMPLEX.,(#2961,#2962,#2963,#2964,#2965,#2966,#2967,#2968,#2969));
-#2961=IFCSIMPLEPROPERTYTEMPLATE('14AncWfD55sP2WuZL6KGBd',$,'AccessoryType','Type designation of the accessory according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2962=IFCSIMPLEPROPERTYTEMPLATE('0kEZADFJj2j9kqX0Uep0Lr',$,'AccessoryGroupCode',' Classification code of the accessory type group according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2963=IFCSIMPLEPROPERTYTEMPLATE('1Rl8sdCg59yQyVsz3ZB4P6',$,'AccessoryTypeSpecificationReference',' Reference to the accessory standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#2964=IFCSIMPLEPROPERTYTEMPLATE('3_n2Y2_Yz9Kxd92XDYBA43',$,'AccessoryDescription',' Short textual description of the accessory. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2965=IFCSIMPLEPROPERTYTEMPLATE('1Ghew5pQr1DRxx7YuHAoRk',$,'AccessoryMaterial',' Material designation according to local classification standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2966=IFCSIMPLEPROPERTYTEMPLATE('0IoT1YiVP408OzXYUUidAH',$,'AccessoryMaterialSpecificationReference',' Reference to the accessory material standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#2967=IFCSIMPLEPROPERTYTEMPLATE('1xWRKizt94$P111Pq1mfM$',$,'AccessorySize',' Size designation according to local classification standards or manufacturer practices.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2968=IFCSIMPLEPROPERTYTEMPLATE('2kxbBYuOv7a9$2Co8aioE8',$,'AccessoryQuantityByNumberOfItems',' The total quantity of accessories of the specified accessory type expressed as number of items.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
-#2969=IFCSIMPLEPROPERTYTEMPLATE('15p5q_Plv4N9srYku6jV1g',$,'AccessoryQuantityByWeight',' The total quantity of accessories of the specified accessory type expressed as mass measure in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#2970,$,$,.READWRITE.);
-#2970=IFCNAMEDUNIT($,.MASSUNIT.);
-#2971=IFCPROPERTYSETTEMPLATE('2ZFF7sW996jPtlseXB6nHe',$,'Pset_ConcreteElementSurfaceFinishQuantityGeneral','Definition from IAI: Surface finish related properties common to different types of concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement, like IfcBeam, IfcColumn, IfcWall, etc. If a precast concrete element is a sandwich wall panel each structural layer or shell represented by an IfcBuildingElementPart may be attached to a separate Pset.The surface finishes are expressed as area quantities only for each surface finish type. The exact details (location, area shape, overlaps, tile joints, patterns, etc.) of the surface finishes are expressed in external documents using the IfcDocumentReference mechanism. Each of the defined properties are instantiated as needed, and multiple instantiations of the same property for each different surface classification are possible.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2972,#2977,#2982));
-#2972=IFCCOMPLEXPROPERTYTEMPLATE('38bKCNV2H3IwC71Sc1$6EQ',$,'FormSurface','Formwork surface area quantity. Several complex properties of this type may be attached to this Pset, one for each formwork subsurface with different properties.','CP_FormSurface',.P_COMPLEX.,(#2973,#2974,#2975));
-#2973=IFCSIMPLEPROPERTYTEMPLATE('16eO46vJ5A3hyxICi$TDpV',$,'FormSurfaceClass','Classification designation for the formwork surface according to local standards, e.g. E, 1, 2, or 3.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2974=IFCSIMPLEPROPERTYTEMPLATE('3$9DRyOZD6Sh$Pk5UQKz9O',$,'FormSurfaceTextureDescription','Textual description of the form surface texture pattern. Used only if the form work includes sub-areas with textures.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#2975=IFCSIMPLEPROPERTYTEMPLATE('3P2DitpXr6Wu_CeXkvqkJo',$,'FormSurfaceArea','The form surface area quantity for which the particular form surface finish and possibly texture type is defined. Usually expressed in square meter (m2).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2976,$,$,.READWRITE.);
-#2976=IFCNAMEDUNIT($,.AREAUNIT.);
-#2977=IFCCOMPLEXPROPERTYTEMPLATE('0IaErMTOvFDQP9s8eCrmvc',$,'ExternalSurface','External surface area quantity.Several complex properties of this type may be attached to this Pset, one for each external subsurface with different properties','CP_ExternalSurface',.P_COMPLEX.,(#2978,#2979,#2980));
-#2978=IFCSIMPLEPROPERTYTEMPLATE('3Gzo_8wcTA2P4enB8RhARS',$,'ExternalSurfaceType','Type designation for the surface. Typical surface treatments include: hewing, acid treatment, brushing, sand blasting, grinding, sanding, painting, cleansing, parging, roller application, and different kinds of tile cladding, e.g. bricks, brick tiles, clinker and mosaic tiles, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2979=IFCSIMPLEPROPERTYTEMPLATE('2WRBqDPnTCUQCVAemSwBTp',$,'ExternalSurfaceClass','Class designation for the surface. This usually depends on what kind of surface type is used and how the classification is expressed in local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2980=IFCSIMPLEPROPERTYTEMPLATE('3oEMSxsmHCNAabHOpb0LZI',$,'ExternalSurfaceArea','The external surface area quantity for which the particular surface finish is defined. Usually expressed in square meter (m2).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,#2981,$,$,.READWRITE.);
-#2981=IFCNAMEDUNIT($,.AREAUNIT.);
-#2982=IFCSIMPLEPROPERTYTEMPLATE('1yOlOk7PH8uhkjSB5glZLE',$,'SurfaceDescriptionDocReference','Reference to an external document describing the details of the surface of the concrete element, i.e. a drawing or textual document file.',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#2983=IFCPROPERTYSETTEMPLATE('0k2ZoyF_b0YeFOvvtBQw1k',$,'Pset_PrecastConcreteElementGeneral','Definition from IAI: Production and manufacturing related properties common to different types of precast concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement. If the precast concrete element is a sandwich wall panel each structural layer or shell represented by an IfcBuildingElementPart may be attached to a separate Pset of this type, if needed. Some of the properties apply only for specific types of precast concrete elements.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2984,#2985,#2986,#2987,#2989,#2991,#2993,#2995,#2996,#2998,#3000,#3002,#3004,#3006,#3007,#3009,#3010,#3011));
-#2984=IFCSIMPLEPROPERTYTEMPLATE('2lsEKmwIz8ogzgMdf5Mw4h',$,'TypeDesignator','Type designator for the precast concrete element. The content depends on local standards. For instance in Finland it usually a one-letter acronym, e.g. P=Column, K=reinforced concrete beam,etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2985=IFCSIMPLEPROPERTYTEMPLATE('39uQC8$rj0$9DnjvoC6Xj3',$,'ProductionLotId','The manufacturer''s production lot identifier.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2986=IFCSIMPLEPROPERTYTEMPLATE('0xYLY3FWD2mgVQf$D8Oz6c',$,'SerialNumber','The manufacturer''s serial number for the precast concrete element.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
-#2987=IFCSIMPLEPROPERTYTEMPLATE('04BdtYHx94R9tBz3xt$KPq',$,'ElementWeight','The weight of the concrete element. Usually expressed in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,#2988,$,$,.READWRITE.);
-#2988=IFCNAMEDUNIT($,.MASSUNIT.);
-#2989=IFCSIMPLEPROPERTYTEMPLATE('2GOMh4y81AkA1v4p0Bn3lX',$,'ElementGrossVolume','The gross volume of concrete element. Usually expressed in cubic metre (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2990,$,$,.READWRITE.);
-#2990=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2991=IFCSIMPLEPROPERTYTEMPLATE('2rgskfxpr0Y9RRdqpqSNzv',$,'ElementNetVolume','The net volume of concrete element. Openings, voids, chamfers, etc. are subtracted from the gross volume. Usually expressed in cubic metre (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,#2992,$,$,.READWRITE.);
-#2992=IFCNAMEDUNIT($,.VOLUMEUNIT.);
-#2993=IFCSIMPLEPROPERTYTEMPLATE('2cq90Pz7zF0fw2Cg7TfaVO',$,'CornerChamfer','The chamfer in the corners of the precast element. The chamfer is presumed to be equal in both directions.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#2994,$,$,.READWRITE.);
-#2994=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#2995=IFCSIMPLEPROPERTYTEMPLATE('1oOONi0OT3Ihzr3bWHqaG3',$,'ManufacturingToleranceClass','Classification designation of the manufacturing tolerances according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#2996=IFCSIMPLEPROPERTYTEMPLATE('27wBcp9afEN80kqYLzo1pv',$,'FormStrippingStrength','The minimum required compressive strength of the concrete at form stripping time.',.P_SINGLEVALUE.,'IfcPressureMeasure ',$,$,#2997,$,$,.READWRITE.);
-#2997=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#2998=IFCSIMPLEPROPERTYTEMPLATE('0vf3L9RZf5Zvr6skOlqUme',$,'LiftingStrength','The minimum required compressive strength of the concrete when the concrete element is lifted.',.P_SINGLEVALUE.,'IfcPressureMeasure ',$,$,#2999,$,$,.READWRITE.);
-#2999=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#3000=IFCSIMPLEPROPERTYTEMPLATE('2HQcFI1ST9ww_O2jj4cYep',$,'ReleaseStrength','The minimum required compressive strength of the concrete when the tendon stress is released. This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPressureMeasure ',$,$,#3001,$,$,.READWRITE.);
-#3001=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#3002=IFCSIMPLEPROPERTYTEMPLATE('24uTFvDdn8xhHlc13y0LKl',$,'MinimumAllowableSupportLength','The minimum allowable support length.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3003,$,$,.READWRITE.);
-#3003=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3004=IFCSIMPLEPROPERTYTEMPLATE('0fiaCBho93FRMbBu5TeG7K',$,'InitialTension','The initial stress of the tendon. This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPressureMeasure ',$,$,#3005,$,$,.READWRITE.);
-#3005=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#3006=IFCSIMPLEPROPERTYTEMPLATE('0EPi_9K7H8aO$ExVkzMghr',$,'TendonRelaxation','The maximum allowable relaxation of the tendon (usually expressed as %/1000 h).This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
-#3007=IFCSIMPLEPROPERTYTEMPLATE('3GW0oS6c90AAQIo9TIGSrk',$,'TransportationStrength','The minimum required compressive strength of the concrete required for transportation.',.P_SINGLEVALUE.,'IfcPressureMeasure ',$,$,#3008,$,$,.READWRITE.);
-#3008=IFCNAMEDUNIT($,.PRESSUREUNIT.);
-#3009=IFCSIMPLEPROPERTYTEMPLATE('26ij$7$vH0yvYLg0Ndt_K6',$,'SupportDuringTransportDescription','Textual description of how the concrete element is supported during transportation',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3010=IFCSIMPLEPROPERTYTEMPLATE('3ZlywA$vH6l92FGAUJQfmC',$,'SupportDuringTransportDocReference','Reference to an external document defining how the concrete element is supported during transportation',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
-#3011=IFCSIMPLEPROPERTYTEMPLATE('1JO6usP2D7Vw6_twYLN6Fc',$,'HollowCorePlugging','A descriptive label for how the hollow core ends are treated: they may be left open, closed with a plug, or sealed with cast concrete. Values would be, for example: ''Unplugged'', ''Plugged'', ''SealedWithConcrete''. This property applies to hollow core slabs only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3012=IFCPROPERTYSETTEMPLATE('12g_OuPan3dBP6Q7SSDIE_',$,'Pset_ReinforcementBarCountOfIndependentFooting','Definition from IAI: Reinforcement Concrete parameter [ST-2]: The amount number information of reinforcement bar with the independent footing. The X and Y direction are based on the local coordinate system of building storey. The X and Y direction of the reinforcement bar are parallel to the X and Y axis of the IfcBuildingStorey''s local coordinate system, respectively.',$,'IfcFooting',(#3013,#3014,#3015,#3016,#3017,#3018));
-#3013=IFCSIMPLEPROPERTYTEMPLATE('1NEBSnQUT0dRaxwm44y5cH',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3014=IFCSIMPLEPROPERTYTEMPLATE('1L40Tl8Sr3lvosEW9qP_Fr',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3015=IFCSIMPLEPROPERTYTEMPLATE('0FLx2XYGL4MRlZP5S5X_F_',$,'XDirectionLowerBarCount','The number of bars with X direction lower bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3016=IFCSIMPLEPROPERTYTEMPLATE('0GYhmY_BjClODmROs_nFb7',$,'YDirectionLowerBarCount','The number of bars with Y direction lower bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3017=IFCSIMPLEPROPERTYTEMPLATE('1gA4NB5qP0TP2GVjLkAomb',$,'XDirectionUpperBarCount','The number of bars with X direction upper bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3018=IFCSIMPLEPROPERTYTEMPLATE('3cQdYSsUH0mBwUgl1o6kpy',$,'YDirectionUpperBarCount','The number of bars with Y direction upper bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3019=IFCPROPERTYSETTEMPLATE('3aG_KZEcPCI8i1Z$g_b6xI',$,'Pset_ReinforcementBarPitchOfBeam','Definition from IAI: The ptich length information of reinforcement bar with the beam.',$,'IfcBeam',(#3020,#3021,#3022,#3024));
-#3020=IFCSIMPLEPROPERTYTEMPLATE('1ElvqGkJfFcv$cm63G8stv',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3021=IFCSIMPLEPROPERTYTEMPLATE('3k7QAVwt98svpwwpNhKszs',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3022=IFCSIMPLEPROPERTYTEMPLATE('0ppCev5gD4qhbF$oxoY0fi',$,'StirrupBarPitch','The pitch length of the stirrup bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3023,$,$,.READWRITE.);
-#3023=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3024=IFCSIMPLEPROPERTYTEMPLATE('00ntkFtmP8YugZRPUibqnK',$,'SpacingBarPitch','The pitch length of the spacing bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3025,$,$,.READWRITE.);
-#3025=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3026=IFCPROPERTYSETTEMPLATE('1CbK477dP0JAfcq6B53IgA',$,'Pset_ReinforcementBarPitchOfColumn','Definition from IAI: The pitch length information of reinforcement bar with the column. The X and Y direction are based on the local coordinate system of building storey. The X and Y direction of the reinforcement bar are parallel to the X and Y axis of the IfcBuildingStorey''s local coordinate system, respectively.',$,'IfcColumn',(#3027,#3028,#3029,#3031,#3033,#3035,#3036,#3038));
-#3027=IFCSIMPLEPROPERTYTEMPLATE('1x_AMkaoLCPhRbgeDs3n0Y',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3028=IFCSIMPLEPROPERTYTEMPLATE('16EAFmBPf9VgMf0rW2IOde',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3029=IFCSIMPLEPROPERTYTEMPLATE('0ODgZ3fTbAkRDrea8PyyDO',$,'ReinforcementBarType','Defines the type of the reinforcement bar.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#3030,$,$,$,.READWRITE.);
-#3030=IFCPROPERTYENUMERATION('PEnum_ReinforcementBarType',(IFCLABEL('RING'),IFCLABEL('SPIRAL'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#3031=IFCSIMPLEPROPERTYTEMPLATE('0sdEF33DD7rOL5e_ssizc2',$,'HoopBarPitch','The pitch length of the hoop bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3032,$,$,.READWRITE.);
-#3032=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3033=IFCSIMPLEPROPERTYTEMPLATE('0ZEih1oqbB8enfMZxm3C0N',$,'XDirectionTieHoopBarPitch','The X direction pitch length of the tie hoop.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3034,$,$,.READWRITE.);
-#3034=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3035=IFCSIMPLEPROPERTYTEMPLATE('36vl6KmLT0ygqD0z867ffy',$,'XDirectionTieHoopCount','The number of bars with X direction tie hoop bars.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3036=IFCSIMPLEPROPERTYTEMPLATE('0TPemw3Qb5geOpITLOdlNe',$,'YDirectionTieHoopBarPitch','The Y direction pitch length of the tie hoop.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3037,$,$,.READWRITE.);
-#3037=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3038=IFCSIMPLEPROPERTYTEMPLATE('09CggvfNfCwv3OdBIUatn3',$,'YDirectionTieHoopCount','The number of bars with Y direction tie hoop bars.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
-#3039=IFCPROPERTYSETTEMPLATE('1Eh3O33IHDtup0k0UthoaS',$,'Pset_ReinforcementBarPitchOfContinuousFooting','Definition from IAI: Reinforcement Concrete parameter [ST-2]: The pitch length information of reinforcement bar with the continuous footing.',$,'IfcFooting',(#3040,#3041,#3042,#3044));
-#3040=IFCSIMPLEPROPERTYTEMPLATE('2U_tedUEzBJeM2zT2ZRcNw',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3041=IFCSIMPLEPROPERTYTEMPLATE('3y_aB8fA9AeRge46GaVA2r',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3042=IFCSIMPLEPROPERTYTEMPLATE('3t0s0Q6Ez4WfaL5pvWDaiq',$,'CrossingUpperBarPitch','The pitch length of the crossing upper bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3043,$,$,.READWRITE.);
-#3043=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3044=IFCSIMPLEPROPERTYTEMPLATE('0SLIkrfvrDaRF3sIB2ZH96',$,'CrossingLowerBarPitch','The pitch length of the crossing lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3045,$,$,.READWRITE.);
-#3045=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3046=IFCPROPERTYSETTEMPLATE('3F$KN5TdHCrugfmVUZlBSr',$,'Pset_ReinforcementBarPitchOfSlab','Definition from IAI: The pitch length information of reinforcement bar with the slab.',$,'IfcSlab',(#3047,#3048,#3049,#3051,#3053,#3055,#3057,#3059,#3061,#3063,#3065,#3067,#3069,#3071));
-#3047=IFCSIMPLEPROPERTYTEMPLATE('1rbKD2qzL1lRefSn5NSunG',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3048=IFCSIMPLEPROPERTYTEMPLATE('0L2Su1VmD1heX17$HxK2k2',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3049=IFCSIMPLEPROPERTYTEMPLATE('35QdzlKAn1FBbnD3hGDVF2',$,'LongOutsideTopBarPitch','The pitch length of the long outside top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3050,$,$,.READWRITE.);
-#3050=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3051=IFCSIMPLEPROPERTYTEMPLATE('0$IDN2IfHEMOxdzS2h7jB7',$,'LongInsideCenterTopBarPitch','The pitch length of the long inside center top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3052,$,$,.READWRITE.);
-#3052=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3053=IFCSIMPLEPROPERTYTEMPLATE('0qyACuRo9AJhOynKGeMXV7',$,'LongInsideEndTopBarPitch','The pitch length of the long inside end top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3054,$,$,.READWRITE.);
-#3054=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3055=IFCSIMPLEPROPERTYTEMPLATE('1J1WzftqzCZORQTpWurFYE',$,'ShortOutsideTopBarPitch','The pitch length of the short outside top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3056,$,$,.READWRITE.);
-#3056=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3057=IFCSIMPLEPROPERTYTEMPLATE('1Si_krV91CwgT$UtvKmuLG',$,'ShortInsideCenterTopBarPitch','The pitch length of the short inside center top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3058,$,$,.READWRITE.);
-#3058=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3059=IFCSIMPLEPROPERTYTEMPLATE('3vvHWgNVrDR8LcJfA2UI_e',$,'ShortInsideEndTopBarPitch','The pitch length of the short inside end top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3060,$,$,.READWRITE.);
-#3060=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3061=IFCSIMPLEPROPERTYTEMPLATE('3KF6HL1lr3cOCS8SrHT5G_',$,'LongOutsideLowerBarPitch','The pitch length of the long outside lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3062,$,$,.READWRITE.);
-#3062=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3063=IFCSIMPLEPROPERTYTEMPLATE('0lUneEy9j0y8_eC3HCu_VI',$,'LongInsideCenterLowerBarPitch','The pitch length of the long inside center lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3064,$,$,.READWRITE.);
-#3064=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3065=IFCSIMPLEPROPERTYTEMPLATE('0Wygar02DD98rGZjxYrbwf',$,'LongInsideEndLowerBarPitch','The pitch length of the long inside end lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3066,$,$,.READWRITE.);
-#3066=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3067=IFCSIMPLEPROPERTYTEMPLATE('0w9dphg4jEP920Ut38GfUK',$,'ShortOutsideLowerBarPitch','The pitch length of the short outside lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3068,$,$,.READWRITE.);
-#3068=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3069=IFCSIMPLEPROPERTYTEMPLATE('0rlZmKyjn6qwTc0dl5JGob',$,'ShortInsideCenterLowerBarPitch','The pitch length of the short inside center lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3070,$,$,.READWRITE.);
-#3070=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3071=IFCSIMPLEPROPERTYTEMPLATE('0jIEXpdM1AFvd8M7gLcoU4',$,'ShortInsideEndLowerBarPitch','The pitch length of the short inside end lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3072,$,$,.READWRITE.);
-#3072=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3073=IFCPROPERTYSETTEMPLATE('0TFAkO$Kb1T8vu5hRpq5ur',$,'Pset_ReinforcementBarPitchOfWall','Definition from IAI: The pitch length information of reinforcement bar with the wall.',$,'IfcWall',(#3074,#3075,#3076,#3078,#3080,#3082));
-#3074=IFCSIMPLEPROPERTYTEMPLATE('1Rb12LXxz2JhKvxVftHiX_',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
-#3075=IFCSIMPLEPROPERTYTEMPLATE('3I5JsrgcbFYurVU4tb5QcE',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3076=IFCSIMPLEPROPERTYTEMPLATE('1EKx5yf7zBYPrerAKNLwUf',$,'BarAllocationType','Defines the type of the reinforcement bar allocation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#3077,$,$,$,.READWRITE.);
-#3077=IFCPROPERTYENUMERATION('PEnum_ReinforcementBarAllocationType',(IFCLABEL('SINGLE'),IFCLABEL('DOUBLE'),IFCLABEL('ALTERNATE'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
-#3078=IFCSIMPLEPROPERTYTEMPLATE('0xVWsGuiTE6g4PJMv7yYw0',$,'VerticalBarPitch','The pitch length of the vertical bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3079,$,$,.READWRITE.);
-#3079=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3080=IFCSIMPLEPROPERTYTEMPLATE('19kYy1Prr3wvlBbiglOrXf',$,'HorizontalBarPitch','The pitch length of the horizontal bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3081,$,$,.READWRITE.);
-#3081=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3082=IFCSIMPLEPROPERTYTEMPLATE('1NKhtKAnH1FvU3isJlWBHT',$,'SpacingBarPitch','The pitch length of the spacing bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3083,$,$,.READWRITE.);
-#3083=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3084=IFCPROPERTYSETTEMPLATE('3_YzE9D3DAQh_HSOsvvtri',$,'Pset_ReinforcingBarBendingsBECCommon','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are defined according to the local Finnish BEC standard with minor adjustements (only bar bending information is included). The bending shape property definitions apply to both reinforcing bars (IfcReinforcingBar) and reinforcing meshes (IfcReinforcingMesh). It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism.',$,'IfcReinforcingBar,IfcReinforcingMesh',(#3085,#3086,#3088,#3090,#3092,#3094,#3096,#3098,#3100,#3102,#3104,#3106,#3108,#3110,#3112,#3114,#3116,#3118,#3120,#3122,#3124));
-#3085=IFCSIMPLEPROPERTYTEMPLATE('0k2gGPNdD6axoAZ1$3vIS$',$,'BECBarShapeCode','The bending type code for the specific bending shape as defined in the BEC standard. Note: depending on the standardized shape different combinations of following parameters a...e (f...l), TD, u, v, u1, v1, aid_x, and aid_y are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3086=IFCSIMPLEPROPERTYTEMPLATE('2j6QXHJ7jEpwp5D3U4OwOa',$,'BECCuttingLength','Usually calculated from the sum of the partial length parameters with corrections for the bendings.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3087,$,$,.READWRITE.);
-#3087=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3088=IFCSIMPLEPROPERTYTEMPLATE('2rpk_o8nz8xuFMvE_6ijpM',$,'BECShapeParameter_a','Bar shape parameter a.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3089,$,$,.READWRITE.);
-#3089=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3090=IFCSIMPLEPROPERTYTEMPLATE('000FmKUqX9UAczKkY7mxms',$,'BECShapeParameter_b','Bar shape parameter b.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3091,$,$,.READWRITE.);
-#3091=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3092=IFCSIMPLEPROPERTYTEMPLATE('0A3OWFmuP16v36U9vRE74O',$,'BECShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3093,$,$,.READWRITE.);
-#3093=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3094=IFCSIMPLEPROPERTYTEMPLATE('1hkwmh45118uSyu6ZMblkC',$,'BECShapeParameter_d','Bar shape parameter d.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3095,$,$,.READWRITE.);
-#3095=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3096=IFCSIMPLEPROPERTYTEMPLATE('3rsXFHjuL6UPLvOeI212NU',$,'BECShapeParameter_e','Bar shape parameter e.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3097,$,$,.READWRITE.);
-#3097=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3098=IFCSIMPLEPROPERTYTEMPLATE('0vkR5IQHr4EwYuiAUecHDU',$,'BECShapeParameter_f','Bar shape parameter f.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3099,$,$,.READWRITE.);
-#3099=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3100=IFCSIMPLEPROPERTYTEMPLATE('3lfFgFknL3_9RY_yETq6nf',$,'BECShapeParameter_g','Bar shape parameter g.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3101,$,$,.READWRITE.);
-#3101=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3102=IFCSIMPLEPROPERTYTEMPLATE('2GHXGXusH9TRSoeWzIxiV8',$,'BECShapeParameter_h','Bar shape parameter h.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3103,$,$,.READWRITE.);
-#3103=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3104=IFCSIMPLEPROPERTYTEMPLATE('3u_3pCT5PFTBKBgR8scJ8X',$,'BECShapeParameter_i','Bar shape parameter i.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3105,$,$,.READWRITE.);
-#3105=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3106=IFCSIMPLEPROPERTYTEMPLATE('0kBRdHPpn39RUD2VOW3ezx',$,'BECShapeParameter_j','Bar shape parameter j.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3107,$,$,.READWRITE.);
-#3107=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3108=IFCSIMPLEPROPERTYTEMPLATE('2HLXmJnC11jOe7r13wxeFo',$,'BECShapeParameter_k','Bar shape parameter k.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3109,$,$,.READWRITE.);
-#3109=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3110=IFCSIMPLEPROPERTYTEMPLATE('0hZVFUCYfBgBMBrvZU_KY7',$,'BECShapeParameter_l','Bar shape parameter l.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3111,$,$,.READWRITE.);
-#3111=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3112=IFCSIMPLEPROPERTYTEMPLATE('01QIHH8ZnDz8q6sQew9U9u',$,'BECBendingParameter_u','Bar bending angle parameter u.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3113,$,$,.READWRITE.);
-#3113=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#3114=IFCSIMPLEPROPERTYTEMPLATE('3y24VN8abDKeij4pPJ2iAX',$,'BECBendingParameter_v','Bar bending angle parameter v.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3115,$,$,.READWRITE.);
-#3115=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#3116=IFCSIMPLEPROPERTYTEMPLATE('2N3$OGVSP9nvifXaQXJQlr',$,'BECBendingParameter_u1','Bar bending angle parameter u1.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3117,$,$,.READWRITE.);
-#3117=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#3118=IFCSIMPLEPROPERTYTEMPLATE('0rrSlxBELCJfrnABWkGTeE',$,'BECBendingParameter_v1','Bar bending angle parameter v1.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3119,$,$,.READWRITE.);
-#3119=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#3120=IFCSIMPLEPROPERTYTEMPLATE('2S2L7XZV52DB97GZj1OykX',$,'BECShapeAid_x','Bar shape measure aid x.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3121,$,$,.READWRITE.);
-#3121=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3122=IFCSIMPLEPROPERTYTEMPLATE('0T_3tMhj9F7BNGCYsMfOdd',$,'BECShapeAid_y','Bar shape measure aid y.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3123,$,$,.READWRITE.);
-#3123=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3124=IFCSIMPLEPROPERTYTEMPLATE('0VFRCI9Bb0evDFcvGiQ5HH',$,'BECRollerDiameter','Diameter of bending roller.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3125,$,$,.READWRITE.);
-#3125=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3126=IFCPROPERTYSETTEMPLATE('0uPsbn2mL99fZvCn9hevHX',$,'Pset_ReinforcingBarBendingsBS8666Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to BS8666. It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism.',$,'IfcReinforcingBar',(#3127,#3128,#3130,#3132,#3134,#3136,#3138));
-#3127=IFCSIMPLEPROPERTYTEMPLATE('2m8MJa$cX809BbIAXJZJxF',$,'BS8666ShapeCode','The bending type code for the specific bending shape as defined in the BS8666 standard. Note: depending on the standardized shape different combinations of following parameters A...E and r are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3128=IFCSIMPLEPROPERTYTEMPLATE('0Whn6Ifzz3PfifYjO$RDUR',$,'BS8666ShapeParameter_A','Bar shape parameter A.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3129,$,$,.READWRITE.);
-#3129=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3130=IFCSIMPLEPROPERTYTEMPLATE('3zMP9gbJ97MgSxOuXvcb2U',$,'BS8666ShapeParameter_B','Bar shape parameter B.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3131,$,$,.READWRITE.);
-#3131=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3132=IFCSIMPLEPROPERTYTEMPLATE('1qj7fLOKT6IxQ8jjqL5Z2n',$,'BS8666ShapeParameter_C','Bar shape parameter C.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3133,$,$,.READWRITE.);
-#3133=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3134=IFCSIMPLEPROPERTYTEMPLATE('1x792MrOj2ue0Oz4lSxT$m',$,'BS8666ShapeParameter_D','Bar shape parameter D.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3135,$,$,.READWRITE.);
-#3135=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3136=IFCSIMPLEPROPERTYTEMPLATE('2XzLUVffz2y8PBNJbXXPTJ',$,'BS8666ShapeParameter_E','Bar shape parameter E.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3137,$,$,.READWRITE.);
-#3137=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3138=IFCSIMPLEPROPERTYTEMPLATE('2ZAH23mgjFnRFxok1FwNm7',$,'BS8666ShapeParameter_r','Bar shape parameter r. Used for bending radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3139,$,$,.READWRITE.);
-#3139=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3140=IFCPROPERTYSETTEMPLATE('3_45i7PtzFQO5jvKdpOP8D',$,'Pset_ReinforcingBarBendingsDIN135610Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to DIN 1356 Teil 10 with some minor omissions: the shape type X2 is not considered since it is better represented by the explicit shape geometry. It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism. Note: This bending standard is presumably to be replaced by the upcoming ISO 3766 standard. ',$,'IfcReinforcingBar',(#3141,#3142,#3144,#3146,#3148,#3150,#3152));
-#3141=IFCSIMPLEPROPERTYTEMPLATE('33likFz6n3M9EXBh9tOVdu',$,'DIN135610ShapeCode','The bending type code for the specific bending shape as defined in the DIN 1356 Teil 10 standard. Note: depending on the standardized shape different combinations of following parameters a...z are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3142=IFCSIMPLEPROPERTYTEMPLATE('2EKhMbIA94Yv$J6SeQmmrl',$,'DIN135610ShapeParameter_a','Bar shape parameter a. Note: this parameter is also used for parameter a0 (shape code B3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3143,$,$,.READWRITE.);
-#3143=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3144=IFCSIMPLEPROPERTYTEMPLATE('0fGNI26a54FBQZaAbX9BEk',$,'DIN135610ShapeParameter_b','Bar shape parameter b. Note: this parameter is also used for parameter b0 (shape codes C2 and C3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3145,$,$,.READWRITE.);
-#3145=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3146=IFCSIMPLEPROPERTYTEMPLATE('0rEsE7CWfBDAo9Bqo9zSF0',$,'DIN135610ShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3147,$,$,.READWRITE.);
-#3147=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3148=IFCSIMPLEPROPERTYTEMPLATE('0mnvuELIP0Fe0DFWks4jFD',$,'DIN135610ShapeParameter_d','Bar shape parameter d. Note: this parameter is also used for parameter d0 (shape code B3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3149,$,$,.READWRITE.);
-#3149=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3150=IFCSIMPLEPROPERTYTEMPLATE('3VOa_w6hH55hxrcstbExqQ',$,'DIN135610ShapeParameter_e','Bar shape parameter e. Note: this parameter is also used for parameter e0 (shape codes A4 and C3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3151,$,$,.READWRITE.);
-#3151=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3152=IFCSIMPLEPROPERTYTEMPLATE('2BtqJmyQT4TgcQHC4Kjkcb',$,'DIN135610ShapeParameter_z','Bar shape parameter z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3153,$,$,.READWRITE.);
-#3153=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3154=IFCPROPERTYSETTEMPLATE('2aTEArdmjE3xGAlXfDS_Ip',$,'Pset_ReinforcingBarBendingsISOCD3766Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to ISO/CD 3766 with some minor changes in how the hooks are defined (explicit angle measures instead of coded parameters). It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism. Note: This standard is still under development and the Pset will be changed accordingly if so required.',$,'IfcReinforcingBar',(#3155,#3156,#3158,#3160,#3162,#3164,#3166,#3168,#3170));
-#3155=IFCSIMPLEPROPERTYTEMPLATE('2tuAB8epLDYxz50mvgVYNe',$,'ISOCD3766ShapeCode','The bending type code for the specific bending shape as defined in the ISO/CD 3766 standard. Note: depending on the standardized shape different combinations of following parameters a...e and R are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
-#3156=IFCSIMPLEPROPERTYTEMPLATE('3cbBgdPxT1mO0diZnJjw$a',$,'ISOCD3766ShapeParameter_a','Bar shape parameter a.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3157,$,$,.READWRITE.);
-#3157=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3158=IFCSIMPLEPROPERTYTEMPLATE('1DlY1JQFH7UAL8m_3UR$c1',$,'ISOCD3766ShapeParameter_b','Bar shape parameter b.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3159,$,$,.READWRITE.);
-#3159=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3160=IFCSIMPLEPROPERTYTEMPLATE('0iLuahr7PDvOdzoq67ojZ_',$,'ISOCD3766ShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3161,$,$,.READWRITE.);
-#3161=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3162=IFCSIMPLEPROPERTYTEMPLATE('1lAaNug_vCXPMJTYPjj4yy',$,'ISOCD3766ShapeParameter_d','Bar shape parameter d.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3163,$,$,.READWRITE.);
-#3163=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3164=IFCSIMPLEPROPERTYTEMPLATE('2srwcGasX4FuwN6KUokROS',$,'ISOCD3766ShapeParameter_e','Bar shape parameter e.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3165,$,$,.READWRITE.);
-#3165=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3166=IFCSIMPLEPROPERTYTEMPLATE('3od6xpBgfE4BOkXunRmmgo',$,'ISOCD3766ShapeParameter_R','Bar shape parameter R. Used for bending radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,#3167,$,$,.READWRITE.);
-#3167=IFCNAMEDUNIT($,.LENGTHUNIT.);
-#3168=IFCSIMPLEPROPERTYTEMPLATE('0wE_$fRUjC_fZk6Bd2yW1V',$,'ISOCD3766BendingStartHook','The angle of the hook at start of the bar. If the property is not included the bar has no start hook. Note: this differs from how ISO/CD 3766 handles end hooks.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3169,$,$,.READWRITE.);
-#3169=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
-#3170=IFCSIMPLEPROPERTYTEMPLATE('1H50lh_FDF6PnkVSibPN6$',$,'ISOCD3766BendingEndHook','The angle of the hook at end of the bar. If the property is not included the bar has no end hook. Note: this differs from how ISO/CD 3766 handles end hooks.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,#3171,$,$,.READWRITE.);
-#3171=IFCNAMEDUNIT($,.PLANEANGLEUNIT.);
+#16=IFCSIMPLEPROPERTYTEMPLATE('2BsFhxc6D5Qusx6dAldKbQ',$,'ManualOverride','Identifies whether hand-operated operation is provided as an override (= TRUE) or not (= FALSE). Note that this value should be set to FALSE by default in the case of a Hand Operated Actuator.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#17=IFCPROPERTYSETTEMPLATE('0Z3BgOOPvDaRX2ev9Ak57E',$,'Pset_ActuatorTypeElectricActuator','Definition from IAI: A device that electrically actuates a control element. ',$,'IfcActuatorType',(#18,#19));
+#18=IFCSIMPLEPROPERTYTEMPLATE('1leI9ll3r399Nir4Ds817x',$,'ActuatorInputPower','Maximum input power requirement ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#19=IFCSIMPLEPROPERTYTEMPLATE('2vJAqjmdTDZQTf6QGQ3SMK',$,'ElectricActuatorType','Enumeration that identifies electric actuator as defined by its operational principle. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#20,$,$,$,.READWRITE.);
+#20=IFCPROPERTYENUMERATION('PEnum_ElectricActuatorType',(IFCLABEL('MotorDrive'),IFCLABEL('Magnetic'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#21=IFCPROPERTYSETTEMPLATE('1W7AXk4V5COOVGNTXgVzvK',$,'Pset_ActuatorTypeHydraulicActuator','Definition from IAI: A device that hydraulically actuates a control element. ',$,'IfcActuatorType',(#22,#23));
+#22=IFCSIMPLEPROPERTYTEMPLATE('3a$PWWODT5ufsiQYh_h5fG',$,'InputPressure','Maximum design pressure for the actuator.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#23=IFCSIMPLEPROPERTYTEMPLATE('3U1s_nnIP3rOZi53fRqHsV',$,'InputFlowrate','Maximum hydraulic flowrate requirement. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#24=IFCPROPERTYSETTEMPLATE('0xiobc92fB$xDzu6Op_mDJ',$,'Pset_ActuatorTypeLinearActuation','Definition from IAI: Characteristics of linear actuation of an actuator\X2\000A\X0\History: Replaces Pset_LinearActuator',$,'IfcActuatorType',(#25,#26));
+#25=IFCSIMPLEPROPERTYTEMPLATE('2u_adPuWX72BL5C6gvOElD',$,'Force','Indicates the maximum close-off force for the actuator.',.P_SINGLEVALUE.,'IfcForceMeasure',$,$,$,$,$,.READWRITE.);
+#26=IFCSIMPLEPROPERTYTEMPLATE('0ZdssDznPEuxkImga6SOYo',$,'Stroke','Indicates the maximum distance the actuator must traverse.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#27=IFCPROPERTYSETTEMPLATE('3nIJzmf9X28fI58wO5rRZr',$,'Pset_ActuatorTypePneumaticActuator','Definition from IAI: A device that pneumatically actuates a control element ',$,'IfcActuatorType',(#28,#29));
+#28=IFCSIMPLEPROPERTYTEMPLATE('275QysDR5DNRbR2x1knSBj',$,'InputPressure','Maximum input control air pressure requirement ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#29=IFCSIMPLEPROPERTYTEMPLATE('1xwhTuOgD04xfCrXg9tmpj',$,'InputFlowrate','Maximum input control air flowrate requirement ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#30=IFCPROPERTYSETTEMPLATE('0EZZ$tZ49EHOWraUzbWupV',$,'Pset_ActuatorTypeRotationalActuation','Definition from IAI: Characteristics of rotational actuation of an actuator\X2\000A\X0\History: Replaces Pset_RotationalActuator',$,'IfcActuatorType',(#31,#32));
+#31=IFCSIMPLEPROPERTYTEMPLATE('3JSj1nE6X88ftq1lJbFgYP',$,'Torque','Indicates the maximum close-off torque for the actuator.',.P_SINGLEVALUE.,'IfcTorqueMeasure',$,$,$,$,$,.READWRITE.);
+#32=IFCSIMPLEPROPERTYTEMPLATE('1M$etoEIn0DPce84PwKMiZ',$,'RangeAngle','Indicates the maximum rotation the actuator must traverse.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#33=IFCPROPERTYSETTEMPLATE('0UngQYZNv4uOLStgTpPcmI',$,'Pset_AnalogInput','Definition from IAI: Defines the characteristics of an analog input.',$,'IfcDistributionControlElement',(#34,#35,#36,#37,#38,#39,#41));
+#34=IFCSIMPLEPROPERTYTEMPLATE('3MjbD4ULPDc9G7XEc$JOuP',$,'HighLimit','The high limit value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#35=IFCSIMPLEPROPERTYTEMPLATE('3$ICXcH516vA4iWBzemInL',$,'LowLimit','The low limit value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#36=IFCSIMPLEPROPERTYTEMPLATE('2lB0XHfqTClgMoG_yBM4Jx',$,'Deadband','The deadband value for the analog input.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#37=IFCSIMPLEPROPERTYTEMPLATE('1iM_OmKf5FCujN2OQvOEfa',$,'HighLimitEnable','Is high limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#38=IFCSIMPLEPROPERTYTEMPLATE('2oU3SO7jX9nPvwiHOThMhN',$,'LowLimitEnable','Is low limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#39=IFCSIMPLEPROPERTYTEMPLATE('3AonFnh9HBCeutLJFj5hJO',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#40,$,$,$,.READWRITE.);
+#40=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#41=IFCSIMPLEPROPERTYTEMPLATE('3pwpyvcVXCp8SnLthnlVk7',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#42,$,$,$,.READWRITE.);
+#42=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#43=IFCPROPERTYSETTEMPLATE('2WAJ4SoIr31v$j6s0$2T6S',$,'Pset_AnalogOutput','Definition from IAI: Defines the characteristics of an analog output.',$,'IfcDistributionControlElement',(#44,#45,#46,#47,#48,#49,#51));
+#44=IFCSIMPLEPROPERTYTEMPLATE('3AoDwzuhfCKAfmMqytB$XQ',$,'HighLimit','The high limit value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#45=IFCSIMPLEPROPERTYTEMPLATE('3A2OaJZbz4fOZP4kgGztyJ',$,'LowLimit','The low limit value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#46=IFCSIMPLEPROPERTYTEMPLATE('1t4W0reZr7dOJb$tRLl8o7',$,'Deadband','The deadband value for the analog output.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#47=IFCSIMPLEPROPERTYTEMPLATE('1va5TKdZX9jQBqW$mAsoj1',$,'HighLimitEnable','Is high limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#48=IFCSIMPLEPROPERTYTEMPLATE('3pQx0nrK5828JzeNsMqhrX',$,'LowLimitEnable','Is low limit validation enabled (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#49=IFCSIMPLEPROPERTYTEMPLATE('2N7CW272fFvA4JRZhaWqWu',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#50,$,$,$,.READWRITE.);
+#50=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#51=IFCSIMPLEPROPERTYTEMPLATE('1TX7QrGAX9lgDsYRuW4SG8',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#52,$,$,$,.READWRITE.);
+#52=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#53=IFCPROPERTYSETTEMPLATE('3pyL1j5516Qxm$E4XaWbX_',$,'Pset_BinaryInput','Definition from IAI: Defines the characteristics of a binary input.',$,'IfcDistributionControlElement',(#54,#56,#57,#58,#59,#60,#62,#64));
+#54=IFCSIMPLEPROPERTYTEMPLATE('3QZZcX$P9DPvs_fKwTZsjX',$,'Polarity','Enumeration defining the polarity',.P_ENUMERATEDVALUE.,'IfcLabel',$,#55,$,$,$,.READWRITE.);
+#55=IFCPROPERTYENUMERATION('PEnum_PolarityEnum',(IFCLABEL('Normal'),IFCLABEL('Reverse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#56=IFCSIMPLEPROPERTYTEMPLATE('2IUBQcLn93jRx46tNKYyi$',$,'InactiveText','String value to be displayed in an inactive, off, or idle state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#57=IFCSIMPLEPROPERTYTEMPLATE('3WT7UGybvENOe9jtmoaSRK',$,'ActiveText','String value to be displayed in an active, on, or running state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#58=IFCSIMPLEPROPERTYTEMPLATE('29E$75UNDB5OvKl9Faab3f',$,'MinimumOffTime','Minimum off time',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
+#59=IFCSIMPLEPROPERTYTEMPLATE('0Jmhp9HGr9axZGD$UgBjFG',$,'MinimumOnTime','Minimum on time',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
+#60=IFCSIMPLEPROPERTYTEMPLATE('1G9joOhOvCHOjZtLPGUivo',$,'FeedbackValue','Enumeration defining the feedback value from the control system element',.P_ENUMERATEDVALUE.,'IfcLabel',$,#61,$,$,$,.READWRITE.);
+#61=IFCPROPERTYENUMERATION('PEnum_BACnetFeedbackValueType',(IFCLABEL('Active'),IFCLABEL('Inactive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#62=IFCSIMPLEPROPERTYTEMPLATE('2irhzhLpzAWRoeNlhN8Dfi',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#63,$,$,$,.READWRITE.);
+#63=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#64=IFCSIMPLEPROPERTYTEMPLATE('01dB2vwcbFhAzEF8GzHjIV',$,'AckedTransitions','Enumeration that defines the type of transition acknowledgement',.P_ENUMERATEDVALUE.,'IfcLabel',$,#65,$,$,$,.READWRITE.);
+#65=IFCPROPERTYENUMERATION('PEnum_BACnetAckedTransitionsType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#66=IFCPROPERTYSETTEMPLATE('18MlA5mtf8JO01U$VI8WgA',$,'Pset_BinaryOutput','Definition from IAI: Defines the characteristics of a binary output.',$,'IfcDistributionControlElement',(#67,#69,#70,#71,#73,#75));
+#67=IFCSIMPLEPROPERTYTEMPLATE('0Ue815MyHD0eYWyNkkt2Qa',$,'Polarity','Enumeration defining the polarity',.P_ENUMERATEDVALUE.,'IfcLabel',$,#68,$,$,$,.READWRITE.);
+#68=IFCPROPERTYENUMERATION('PEnum_PolarityEnum',(IFCLABEL('Normal'),IFCLABEL('Reverse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#69=IFCSIMPLEPROPERTYTEMPLATE('3pUjK6rBj1Qw$aY$V1FO9P',$,'InactiveText','String value to be displayed in an inactive, off, or idle state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#70=IFCSIMPLEPROPERTYTEMPLATE('0kT$R9wo57dgCURjo9uPU5',$,'ActiveText','String value to be displayed in an active, on, or running state',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#71=IFCSIMPLEPROPERTYTEMPLATE('3dccavWIvDig6VzpC931NW',$,'AlarmValue','Enumeration defining the operating state of the control system element',.P_ENUMERATEDVALUE.,'IfcLabel',$,#72,$,$,$,.READWRITE.);
+#72=IFCPROPERTYENUMERATION('PEnum_BACnetAlarmValueType',(IFCLABEL('Active'),IFCLABEL('Inactive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#73=IFCSIMPLEPROPERTYTEMPLATE('3Em$0CLVb5rP92DKLeaXRa',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#74,$,$,$,.READWRITE.);
+#74=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#75=IFCSIMPLEPROPERTYTEMPLATE('3t9uPVi2b7PPAinZRdXNjC',$,'AckedTransitions','Enumeration that defines the type of transition acknowledgement',.P_ENUMERATEDVALUE.,'IfcLabel',$,#76,$,$,$,.READWRITE.);
+#76=IFCPROPERTYENUMERATION('PEnum_BACnetAckedTransitionsType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#77=IFCPROPERTYSETTEMPLATE('0_LLwivFv2FQ3rDk72_spo',$,'Pset_ControllerTypeCommon','Definition from IAI: Properties for signal handling for an analog controller taking disparate valued multiple inputs and creating a single valued output.',$,'IfcControllerType',(#78,#80,#81,#82));
+#78=IFCSIMPLEPROPERTYTEMPLATE('0k$2r7pBTD3O02Z4LcWKoj',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#79,$,$,$,.READWRITE.);
+#79=IFCPROPERTYENUMERATION('PEnum_ControlType',(IFCLABEL('Hysteresis'),IFCLABEL('Constant'),IFCLABEL('Divide'),IFCLABEL('Integral'),IFCLABEL('Subtract'),IFCLABEL('Report'),IFCLABEL('Absolute'),IFCLABEL('Sum'),IFCLABEL('Average'),IFCLABEL('Maximum'),IFCLABEL('Minimum'),IFCLABEL('Modifier'),IFCLABEL('Product'),IFCLABEL('Split'),IFCLABEL('RunningAverage'),IFCLABEL('Inverse'),IFCLABEL('Binary'),IFCLABEL('LowerLimitControl'),IFCLABEL('LowerLimitControl'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#80=IFCSIMPLEPROPERTYTEMPLATE('2T0cslqaHC18k77V9SA3mN',$,'SignalOffset','Offset constant added to modfied signal',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#81=IFCSIMPLEPROPERTYTEMPLATE('2pc6THSkv96OoKp4z5LkY8',$,'SignalFactor','Factor multiplied onto offset signal',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#82=IFCSIMPLEPROPERTYTEMPLATE('0n_wgtvrT3aet5I_ehY60_',$,'SignalTime','Time factor used for integral and running average controllers',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#83=IFCPROPERTYSETTEMPLATE('0spLvJYz98BwvrS2y23U$w',$,'Pset_ControllerTypeProportional','Definition from IAI: Properties for signal handling for an proportional controller taking a single input and creating a single valued output',$,'IfcControllerType',(#84,#86,#87,#88,#89));
+#84=IFCSIMPLEPROPERTYTEMPLATE('1JkdwFWaTBp9dka2XCFVpK',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#85,$,$,$,.READWRITE.);
+#85=IFCPROPERTYENUMERATION('PEnum_ProportionalControlType',(IFCLABEL('Proportional'),IFCLABEL('ProportionalIntegral'),IFCLABEL('ExponentialDelay'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#86=IFCSIMPLEPROPERTYTEMPLATE('1Invva2WHEbRqRUhx4TtHj',$,'SignalFactor1','Factor (Kp)',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#87=IFCSIMPLEPROPERTYTEMPLATE('1R5LT4H4T29e3KDT9Ozi8R',$,'SignalFactor2','Factor (Ki)',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#88=IFCSIMPLEPROPERTYTEMPLATE('0ukB_P5IbAFwHhWaPQdYhi',$,'SignalTime1','Time factor used for exponential increase.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#89=IFCSIMPLEPROPERTYTEMPLATE('13rj$6han42AIUhoDXJs$g',$,'SignalTime2','Time factor used for exponential decrease.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#90=IFCPROPERTYSETTEMPLATE('2ZnI0mbiT3gRdHH7Y00sPS',$,'Pset_ControllerTypeTwoPosition','Definition from IAI: Properties for signal handling for an analog controller taking disparate valued multiple inputs and creating a single valued binary output.',$,'IfcControllerType',(#91,#93));
+#91=IFCSIMPLEPROPERTYTEMPLATE('0qqsUMwOTAaf0w5JT10Y1o',$,'ControlType','The type of signal modification effected',.P_ENUMERATEDVALUE.,'IfcLabel',$,#92,$,$,$,.READWRITE.);
+#92=IFCPROPERTYENUMERATION('PEnum_TwoPositionControlType',(IFCLABEL('Not'),IFCLABEL('And'),IFCLABEL('Or'),IFCLABEL('Xor'),IFCLABEL('LowerLimitSwitch'),IFCLABEL('UpperLimitSwitch'),IFCLABEL('LowerBandSwitch'),IFCLABEL('UpperBandSwitch'),IFCLABEL('Average'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#93=IFCSIMPLEPROPERTYTEMPLATE('2docSZx2X7_9iaQeT2dhCx',$,'BandWidth','Dead band for controller',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#94=IFCPROPERTYSETTEMPLATE('1RaZAby2j3TBpufYkBNmFI',$,'Pset_FlowInstrumentTypePressureGauge','Definition from IAI: A device that reads and displays a pressure value at a point or the pressure difference between two points.',$,'IfcFlowInstrumentType',(#95,#97));
+#95=IFCSIMPLEPROPERTYTEMPLATE('3AvY5OVE12zhtHtiT_Zd86',$,'PressureGaugeType','Identifies the means by which pressure is displayed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#96,$,$,$,.READWRITE.);
+#96=IFCPROPERTYENUMERATION('PEnum_PressureGaugeType',(IFCLABEL('Dial'),IFCLABEL('Digital'),IFCLABEL('Manometer'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#97=IFCSIMPLEPROPERTYTEMPLATE('3ae2YLOJ56exMEFE7prU7I',$,'DisplaySize','The physical size of the display. For a dial pressure gauge it will be the diameter of the dial.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#98=IFCPROPERTYSETTEMPLATE('2$CA9WzjzBAfJ1efUujXV6',$,'Pset_FlowInstrumentTypeThermometer','Definition from IAI: A device that reads and displays a temperature value at a point.',$,'IfcFlowInstrumentType',(#99,#101));
+#99=IFCSIMPLEPROPERTYTEMPLATE('1gz9Li3095$PooJyC0QVDq',$,'ThermometerType','Identifies the means by which temperature is displayed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#100,$,$,$,.READWRITE.);
+#100=IFCPROPERTYENUMERATION('PEnum_ThermometerType',(IFCLABEL('Dial'),IFCLABEL('Digital'),IFCLABEL('Stem'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#101=IFCSIMPLEPROPERTYTEMPLATE('3R3E2eLVDAN9Wce97QMwao',$,'DisplaySize','The physical size of the display. In the case of a stem thermometer, this will be the length of the stem. For a dial thermometer, it will be the diameter of the dial.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#102=IFCPROPERTYSETTEMPLATE('1$te7bBXn3vfSuj6gBFCQj',$,'Pset_MultiStateInput','Definition from IAI: Defines the characteristics of a multi-state input.',$,'IfcDistributionControlElement',(#103,#104,#105,#106,#108));
+#103=IFCSIMPLEPROPERTYTEMPLATE('2$TNIHey1FFeXg7ak6BxOC',$,'NumberOfStates','Number of states for the multi-state Input.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#104=IFCSIMPLEPROPERTYTEMPLATE('2wnW8QR0D3dQK7HIjv9QJq',$,'StateText','String values to identify the state condition. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#105=IFCSIMPLEPROPERTYTEMPLATE('3D0tYWYAb9LgybpzNlNEKo',$,'AlarmValues','Specifies any states the present value must equal before an EventEnable shall occur. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#106=IFCSIMPLEPROPERTYTEMPLATE('0prOVLlznDWhKYKMmWQcsQ',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#107,$,$,$,.READWRITE.);
+#107=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#108=IFCSIMPLEPROPERTYTEMPLATE('1HPPjK$fDB3B$pNOU4BUv9',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#109,$,$,$,.READWRITE.);
+#109=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#110=IFCPROPERTYSETTEMPLATE('2iHO6efAnAEQktMcvOAkZc',$,'Pset_MultiStateOutput','Definition from IAI: Defines the characteristics of a multi-state output.',$,'IfcDistributionControlElement',(#111,#112,#113,#114,#116));
+#111=IFCSIMPLEPROPERTYTEMPLATE('39dlENK31A$On3OGeBaOTj',$,'NumberOfStates','Number of states for the multi-state Input.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#112=IFCSIMPLEPROPERTYTEMPLATE('0P6HxRze16Mg54OOk5FwnX',$,'StateText','String values to identify the state condition. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#113=IFCSIMPLEPROPERTYTEMPLATE('2TYViIhSP1whVv06hXVaUr',$,'AlarmValues','Specifies any states the present value must equal before an EventEnable shall occur. Upper limit of the list is equal to the NumberOfStates.',.P_LISTVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#114=IFCSIMPLEPROPERTYTEMPLATE('1v70cDShTF4xCp88SIPkPX',$,'EventEnable','Enumeration that defines the type of event enabling',.P_ENUMERATEDVALUE.,'IfcLabel',$,#115,$,$,$,.READWRITE.);
+#115=IFCPROPERTYENUMERATION('PEnum_BACnetEventEnableType',(IFCLABEL('To-OffNormal'),IFCLABEL('To-Fault'),IFCLABEL('To-Normal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#116=IFCSIMPLEPROPERTYTEMPLATE('0XdKI1YDf9RfWJqVFz9w6Q',$,'NotifyType','Enumeration that defines the notification type',.P_ENUMERATEDVALUE.,'IfcLabel',$,#117,$,$,$,.READWRITE.);
+#117=IFCPROPERTYENUMERATION('PEnum_BACnetNotifyType',(IFCLABEL('Alarm'),IFCLABEL('Event'),IFCLABEL('AcknowledgeNotification'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#118=IFCPROPERTYSETTEMPLATE('30fgWnmuP9_8vP0hSufF9y',$,'Pset_SensorTypeCO2Sensor','Definition from IAI: A device that senses or detects carbon dioxide.',$,'IfcSensorType',(#119,#120,#121,#122,#123));
+#119=IFCSIMPLEPROPERTYTEMPLATE('0pfgxjMAP0EOO6UfrLWKSe',$,'CoverageArea','The floor area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#120=IFCSIMPLEPROPERTYTEMPLATE('2onD0jlfD7c81lmzvOj82D',$,'WashHandBasinSetPoint','The CO2 value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#121=IFCSIMPLEPROPERTYTEMPLATE('3oL7AFMgf2xA88f709zcgf',$,'CO2SensorRange','The upper and lower bounds for operation of the CO2 sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#122=IFCSIMPLEPROPERTYTEMPLATE('03q31JoXT9uuzKS2sDAM1h',$,'AccuracyOfCO2Sensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#123=IFCSIMPLEPROPERTYTEMPLATE('1b9TrQY4X0WA1TI1h6vqrY',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#124=IFCPROPERTYSETTEMPLATE('3Vm86VrSL68AE_DwL410Jc',$,'Pset_SensorTypeFireSensor','Definition from IAI: A device that senses or detects the presence of fire.',$,'IfcSensorType',(#125,#126,#127));
+#125=IFCSIMPLEPROPERTYTEMPLATE('1ni9s7NtD49wly15aMfX_P',$,'FireSensorSetPoint','The temperature value to be sensed to indicate the presence of fire.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#126=IFCSIMPLEPROPERTYTEMPLATE('3u$1gCexrE4PSVGK8HeTUL',$,'AccuracyOfFireSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#127=IFCSIMPLEPROPERTYTEMPLATE('0uVA1$swP9jBXSGI8U0tXQ',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#128=IFCPROPERTYSETTEMPLATE('1PopZjRBH1bfRLpdlmOqVl',$,'Pset_SensorTypeGasSensor','Definition from IAI: A device that senses or detects gas.',$,'IfcSensorType',(#129,#130,#131,#132,#133));
+#129=IFCSIMPLEPROPERTYTEMPLATE('1RuQ06xJTBe9WP0rj1$Rmg',$,'GasDetected','Identification of the gas that is being detected.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#130=IFCSIMPLEPROPERTYTEMPLATE('0n2NE1Qmn7EB0XGnrIK55X',$,'GasSensorSetPoint','The gas concentration value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#131=IFCSIMPLEPROPERTYTEMPLATE('0KwdoJgMHCJumXdU7lF0fe',$,'GasSensorRange','The upper and lower bounds of gas concentration for operation of the gas sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#132=IFCSIMPLEPROPERTYTEMPLATE('0ixPKoT7X44PkvM_w0$wQ8',$,'AccuracyOfGasSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#133=IFCSIMPLEPROPERTYTEMPLATE('1rOqyoHmvBvQPZwZx2l2UM',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#134=IFCPROPERTYSETTEMPLATE('36yvuTxknDRRnpf9cA2c6M',$,'Pset_SensorTypeHeatSensor','Definition from IAI: A device that senses or detects heat.',$,'IfcSensorType',(#135,#136,#137,#138,#139));
+#135=IFCSIMPLEPROPERTYTEMPLATE('0hCYoG8KbCpu2uYz9IWznU',$,'CoverageArea','The area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#136=IFCSIMPLEPROPERTYTEMPLATE('0SRtKRfH1E99M87baNS2vn',$,'HeatSensorSetPoint','The temperature value to be sensed.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#137=IFCSIMPLEPROPERTYTEMPLATE('0_ck90UXX709pYG2sBonyK',$,'HeatSensorRange','The upper and lower bounds for operation of the heat sensor.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#138=IFCSIMPLEPROPERTYTEMPLATE('3XmAxEgbX7KukiqXYUeJyQ',$,'HeatSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#139=IFCSIMPLEPROPERTYTEMPLATE('1cIPp$IT17CPUDtObTIXam',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#140=IFCPROPERTYSETTEMPLATE('06Cz8$iz5BguPynuW6PzBC',$,'Pset_SensorTypeHumiditySensor','Definition from IAI: A device that senses or detects humidity. ',$,'IfcSensorType',(#141,#142,#143,#144));
+#141=IFCSIMPLEPROPERTYTEMPLATE('2ZPKyGQlDFLgfmcYC_Xyw1',$,'HumiditySetPoint','The humidity value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#142=IFCSIMPLEPROPERTYTEMPLATE('1CBNPhNnn0pQIIz2L5iJS1',$,'HumiditySensorRange','The upper and lower bounds for operation of the humidity sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#143=IFCSIMPLEPROPERTYTEMPLATE('28ctOEneL8xQGOGgovE8m6',$,'AccuracyOfHumiditySensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#144=IFCSIMPLEPROPERTYTEMPLATE('0EK2oqwU93YwT7iTIGT_Sd',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#145=IFCPROPERTYSETTEMPLATE('04iKGSt0r3lfLWkNh9iA6h',$,'Pset_SensorTypeLightSensor','Definition from IAI: A device that senses or detects light.',$,'IfcSensorType',(#146,#147,#148,#149));
+#146=IFCSIMPLEPROPERTYTEMPLATE('3cjGsBTQHCVxJiibG_g66x',$,'LightSensorSetPoint','The illuminance value to be sensed.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,$,$,$,.READWRITE.);
+#147=IFCSIMPLEPROPERTYTEMPLATE('1Uumg3uOj4wPbAyJ_vIOph',$,'LightSensorRange','The upper and lower bounds for operation of the light sensor.',.P_BOUNDEDVALUE.,'IfcIlluminanceMeasure',$,$,$,$,$,.READWRITE.);
+#148=IFCSIMPLEPROPERTYTEMPLATE('25qc1$HfLDVAsKgxMiDzYT',$,'LightSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,$,$,$,.READWRITE.);
+#149=IFCSIMPLEPROPERTYTEMPLATE('2qh_zUyj1DyfBj4GDAYORv',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#150=IFCPROPERTYSETTEMPLATE('3lWLbc$5bBIOibe5zpOqhE',$,'Pset_SensorTypeMovementSensor','Definition from IAI: A device that senses or detects movement.',$,'IfcSensorType',(#151,#153));
+#151=IFCSIMPLEPROPERTYTEMPLATE('3UIu5RZTH2hwFa6mlwjOgl',$,'MovementSensingType','Enumeration that identifies the type of movement sensing mechanism.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#152,$,$,$,.READWRITE.);
+#152=IFCPROPERTYENUMERATION('PEnum_MovementSensingType',(IFCLABEL('PhotoElectricCell'),IFCLABEL('PressurePad'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#153=IFCSIMPLEPROPERTYTEMPLATE('3oy_pAmtb45go9Xk8oWwdj',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#154=IFCPROPERTYSETTEMPLATE('3w4wneLxf8YPuC9BH6ZtrJ',$,'Pset_SensorTypePressureSensor','Definition from IAI: A device that senses or detects pressure.',$,'IfcSensorType',(#155,#156,#157,#158,#159));
+#155=IFCSIMPLEPROPERTYTEMPLATE('3bujzrorP8lg1DZHZjLY7R',$,'PressureSensorSetPoint','The pressure value to be sensed.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#156=IFCSIMPLEPROPERTYTEMPLATE('2dM88vXiD2hPccpXRt22nM',$,'PressureSensorRange','The upper and lower bounds of pressure value for operation of the pressure sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#157=IFCSIMPLEPROPERTYTEMPLATE('07yMwkr2f4JP3HB6AKwqiE',$,'AccuracyOfPressureSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#158=IFCSIMPLEPROPERTYTEMPLATE('3fGfk4HLb9hOrRbw6NGXoy',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#159=IFCSIMPLEPROPERTYTEMPLATE('0fBPgkJRD0kPzCeh5SUC03',$,'IsSwitch','Identifies if the sensor also functions as a switch at the set point (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#160=IFCPROPERTYSETTEMPLATE('1SWoVfVrvEJemJbZ30V4yL',$,'Pset_SensorTypeSmokeSensor','Definition from IAI: A device that senses or detects smoke.',$,'IfcSensorType',(#161,#162,#163,#164,#165,#166));
+#161=IFCSIMPLEPROPERTYTEMPLATE('2BRdsW22j1BfkL_0tPhgEj',$,'CoverageArea','The floor area that is covered by the sensor (typically measured as a circle whose center is at the location of the sensor)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#162=IFCSIMPLEPROPERTYTEMPLATE('3$QuJTi$9C6QaeQLWnLO6U',$,'PressureSensorSetPoint','The smoke concentration value to be sensed.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#163=IFCSIMPLEPROPERTYTEMPLATE('3hmPjJDgj8UB4RH6pyBLj5',$,'SmokeSensorRange','The upper and lower bounds of smoke concentration for operation of the smoke sensor.\X2\000A\X0\',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#164=IFCSIMPLEPROPERTYTEMPLATE('1qG5a2ArX5BfYIlX1ArAnL',$,'AccuracyOfSmokeSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#165=IFCSIMPLEPROPERTYTEMPLATE('2ZweK71D57b8PvHbLgUWJk',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#166=IFCSIMPLEPROPERTYTEMPLATE('2qzFvVRk1Dzh43dlrLAzae',$,'HasBuiltInAlarm','Indicates whether the smoke sensor is included as an element within a smoke alarm/sensor unit (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#167=IFCPROPERTYSETTEMPLATE('2gp3SWLkn2TwLs3a0rgDPm',$,'Pset_SensorTypeSoundSensor','Definition from IAI: A device that senses or detects sound.',$,'IfcSensorType',(#168,#169,#170,#171));
+#168=IFCSIMPLEPROPERTYTEMPLATE('3SBlqaUqX5M9909a5n9XH3',$,'SoundSensorSetPoint','The sound pressure value to be sensed.',.P_SINGLEVALUE.,'IfcSoundPressureMeasure',$,$,$,$,$,.READWRITE.);
+#169=IFCSIMPLEPROPERTYTEMPLATE('244ISGnNn9bhYmvQMzifdx',$,'SoundSensorRange','The upper and lower bounds for operation of the sound sensor.',.P_BOUNDEDVALUE.,'IfcSoundPressureMeasure',$,$,$,$,$,.READWRITE.);
+#170=IFCSIMPLEPROPERTYTEMPLATE('3rDSu$sRbF0ewDnhFB18xH',$,'SoundSensorAccuracy','The accuracy of the sensor.',.P_SINGLEVALUE.,'IfcSoundPressureMeasure',$,$,$,$,$,.READWRITE.);
+#171=IFCSIMPLEPROPERTYTEMPLATE('1csHGqK$z1PudXMCCrfacU',$,'TimeConstant','The time constant of the sensor.\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#172=IFCPROPERTYSETTEMPLATE('3TDRyAkwf1P87CDhVwXTLo',$,'Pset_SensorTypeTemperatureSensor','Definition from IAI: A device that senses or detects temperature.',$,'IfcSensorType',(#173,#175,#176,#177,#178));
+#173=IFCSIMPLEPROPERTYTEMPLATE('1kSCHo4OT8gAKsOHrBc72X',$,'TemperatureSensorType','Enumeration that Identifies the types of temperature sensor that can be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#174,$,$,$,.READWRITE.);
+#174=IFCPROPERTYENUMERATION('PEnum_TemperatureSensorType',(IFCLABEL('HighLimit'),IFCLABEL('LowLimit'),IFCLABEL('OutsideTemperature'),IFCLABEL('OperatingTemperature'),IFCLABEL('RoomTemperature'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#175=IFCSIMPLEPROPERTYTEMPLATE('2MgkcdbxX5eBY7$qny442l',$,'TemperatureSensorSetPoint','The temperature value to be sensed.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#176=IFCSIMPLEPROPERTYTEMPLATE('1ckO6s$7nDHf2xeGpO3Wql',$,'TemperatureSensorRange','The upper and lower bounds for operation of the temperature sensor.\X2\000A\X0\May also be termed ''deadband''',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#177=IFCSIMPLEPROPERTYTEMPLATE('31p_IjRuD7Dfsk4d372nVS',$,'AccuracyOfTemperatureSensor','The accuracy of the sensor',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#178=IFCSIMPLEPROPERTYTEMPLATE('2aXSGP0XT7Yu0gb$$l7iWg',$,'TimeConstant','The time constant of the sensor\X2\000A\X0\.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#179=IFCPROPERTYSETTEMPLATE('34jdivCiz4uRK7jCcrDwol',$,'Pset_CableCarrierSegmentTypeCableLadderSegment','Definition from IAI: An open carrier segment on which cables are carried on a ladder structure.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#180,#181,#182,#183));
+#180=IFCSIMPLEPROPERTYTEMPLATE('2FBhNV$hD8SQfKzXfAXzWy',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#181=IFCSIMPLEPROPERTYTEMPLATE('3Jbafl9BT3WPrGqnLyU4J_',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#182=IFCSIMPLEPROPERTYTEMPLATE('1XYv6HTHX50BrOcrUT8KvN',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#183=IFCSIMPLEPROPERTYTEMPLATE('1sfsP$RRX3P8O0GxQgXe$K',$,'LadderConfiguration','Description of the configuration of the ladder structure used.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#184=IFCPROPERTYSETTEMPLATE('2YtCaT3Y192OzmPF_$qnlF',$,'Pset_CableCarrierSegmentTypeCableTraySegment','Definition from IAI: An (typically) open carrier segment onto which cables are laid.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#185,#186,#187,#188));
+#185=IFCSIMPLEPROPERTYTEMPLATE('0GRMbJvFv2787K6kFflckF',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#186=IFCSIMPLEPROPERTYTEMPLATE('0IrIX59q1FFPe2VdrZj3gj',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#187=IFCSIMPLEPROPERTYTEMPLATE('130e5JdG9FSPq_RzBHWGns',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#188=IFCSIMPLEPROPERTYTEMPLATE('2Mh8Q_QJn6pfLoEDYnbIPw',$,'HasCover','Indication of whether the cable tray has a cover (=TRUE) or not (= FALSE). By default, this value should be set to FALSE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#189=IFCPROPERTYSETTEMPLATE('0$PLjgms90nOW9FTV3shkj',$,'Pset_CableCarrierSegmentTypeCableTrunkingSegment','Definition from IAI: An enclosed carrier segment with one or more compartments into which cables are placed.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#190,#191,#192,#193));
+#190=IFCSIMPLEPROPERTYTEMPLATE('2tS5gT$IT5cuzW8_zHw_Qf',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#191=IFCSIMPLEPROPERTYTEMPLATE('167icltdrFUAPk4IxtOXa$',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#192=IFCSIMPLEPROPERTYTEMPLATE('3iqwD0eDX0QPxxzokQtLLU',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#193=IFCSIMPLEPROPERTYTEMPLATE('2fQFerQe1CIRaCXObuk7io',$,'NumberOfCompartments','The number of separate internal compartments within the trunking',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#194=IFCPROPERTYSETTEMPLATE('1RmcQJ_ML1NuYH2X5$Iml0',$,'Pset_CableCarrierSegmentTypeConduitSegment','Definition from IAI: An enclosed tubular carrier segment through which cables are pulled.\X2\000A\X0\',$,'IfcCableCarrierSegmentType',(#195,#196,#197,#198,#200));
+#195=IFCSIMPLEPROPERTYTEMPLATE('1TVHgitJjAPx$ehwcrRABZ',$,'NominalLength','The nominal length of the segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#196=IFCSIMPLEPROPERTYTEMPLATE('1LCwgVgLf9DRNL6pNG9Ogw',$,'NominalWidth','The nominal width of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#197=IFCSIMPLEPROPERTYTEMPLATE('0s9NjpsKT82ugOKZ3EvbBl',$,'NominalHeight','The nominal height of the segment',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#198=IFCSIMPLEPROPERTYTEMPLATE('2n7jW9yLzDxRdT5qIKejnX',$,'ConduitShapeType','The shape of the conduit segment',.P_ENUMERATEDVALUE.,'IfcLabel',$,#199,$,$,$,.READWRITE.);
+#199=IFCPROPERTYENUMERATION('PEnum_ConduitShapeType',(IFCLABEL('Circular'),IFCLABEL('Oval'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#200=IFCSIMPLEPROPERTYTEMPLATE('0SYxg967PFvOHvC8_tpfMK',$,'IsRigid','Indication of whether the conduit is rigid (= TRUE) or flexible (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#201=IFCPROPERTYSETTEMPLATE('3bKiUqdhT7zxIVUw$ENffr',$,'Pset_CableSegmentTypeCableSegment','Definition from IAI: Electrical cable with a specific purpose to lead electric current within a circuit or any other electric construction. Includes all types of electric cables, mainly several electrical segments wrapped together, e.g. cable, tube, busbar. Note that the number of conductors within a cable is determined by an aggregation mechanism that aggregates the conductors within the cable.\X2\000A\X0\',$,'IfcCableSegmentType',(#202,#203,#204,#205,#206,#207,#208,#209));
+#202=IFCSIMPLEPROPERTYTEMPLATE('2lt72OHwL2MgiXx29Leuvu',$,'CrossSectionalArea','Cross section area of the cable',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#203=IFCSIMPLEPROPERTYTEMPLATE('1C3Yk9UpPDmAr1umYzZNNq',$,'NominalLength','The nominal length of a cable, busbar or tube.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#204=IFCSIMPLEPROPERTYTEMPLATE('1NoUTAnSXAoPnxuieEzXak',$,'NominalWidthOrDiameter','The nominal width of a cable, busbar or tube or, in the case of a circular cross section, the diameter. Note that this value may be used for larger sized cables whose dimensions are explicitly given.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#205=IFCSIMPLEPROPERTYTEMPLATE('1Yd4dcgDfAyPDZI73gXGVq',$,'NominalHeight','The nominal height of a cable, busbar or tube or, in the case of a circular cross section, the height is not asserted. Note that this value may be used for larger sized cables whose dimensions are explicitly given.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#206=IFCSIMPLEPROPERTYTEMPLATE('1bC9jLu3D0Dx3uguwq9qMN',$,'NormalOperatingTemperature','Normal operating temperature for the cable, busbar.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#207=IFCSIMPLEPROPERTYTEMPLATE('3yVWJgDrnFIwH6yJsuPKko',$,'MaxOperatingTemperature','Maximum operating temperature for the cable.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#208=IFCSIMPLEPROPERTYTEMPLATE('24JUq8UY53pBZ8bKXYBojL',$,'CableInsulationMaterial','The material from which the insulation is constructed. Such as PVC, PEX, EPR,...',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#209=IFCSIMPLEPROPERTYTEMPLATE('0l6QQRX$f4lgiipZni8DiL',$,'SheathColor','Colour code on cable, conductor. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#210=IFCPROPERTYSETTEMPLATE('3fD_OWs0jCJ80jwoKKAm8G',$,'Pset_CableSegmentTypeConductorSegment','Definition from IAI: An electrical conductor is a single linear element with the specific purpose to lead electric current. The core of one lead is normally single wired or multiwired which are intertwined. ',$,'IfcCableSegmentType',(#211,#212,#213,#215,#216,#217,#218,#219,#220));
+#211=IFCSIMPLEPROPERTYTEMPLATE('0HN0EtCJ52$ApT5y5fTgLB',$,'CrossSectionalArea','Cross section area of the phase(s) lead(s)',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#212=IFCSIMPLEPROPERTYTEMPLATE('0B9nzunXPC2QUyGPLGav$P',$,'NominalLength','The nominal length of a conductor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#213=IFCSIMPLEPROPERTYTEMPLATE('0JreAY9gTDmB_NRty3FEUx',$,'ElectricalConductorFunction','Type of function for which the conductor is intended. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#214,$,$,$,.READWRITE.);
+#214=IFCPROPERTYENUMERATION('PEnum_ConductorFunction',(IFCLABEL('Phase'),IFCLABEL('Neutral'),IFCLABEL('ProtectiveGround'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#215=IFCSIMPLEPROPERTYTEMPLATE('0RneSs$R51Sv7hlVbac6bO',$,'PhaseReference','The phase identification used when the function of the conductor is a phase. In general, it is recommended that IEC recommendations for phase identification are used (L1, L2 etc.). However, other phase identifiers may be used such as by color (Red, Blue, Yellow) or by number (1, 2, 3) etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#216=IFCSIMPLEPROPERTYTEMPLATE('1jmUChiSDEWx4irhRmz7Q7',$,'ConductorMaterial','Type of material from which the conductor is constructed. Such as Aluminium or Copper',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#217=IFCSIMPLEPROPERTYTEMPLATE('1NkL_6fs90jfaFmk4gP8Id',$,'ConductorSheathMaterial','The material from which the sheath or insulation is constructed. Such as EPR, Copper, MICC, PVC, PEX, Rubber, XPLE, XPLE_LS. Note that materials used should be agreed between exchange participants before use.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#218=IFCSIMPLEPROPERTYTEMPLATE('3Kk5Wy5mLA0fb$ovU0vViX',$,'MaximumOperatingTemperature','The maximum temperature at which the sheath retains its integrity.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#219=IFCSIMPLEPROPERTYTEMPLATE('3Uf5QJUhDAP94RzpP4JzBU',$,'IsFireResistant','Indication of whether the sheath is fire resistant (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#220=IFCSIMPLEPROPERTYTEMPLATE('2AO6a9q913wxvX0WPER3jX',$,'SheathColor','Colour code on cable, conductor. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#221=IFCPROPERTYSETTEMPLATE('3bKK$cZAb3Gup1_9DbRCum',$,'Pset_ElectricalCircuit','Definition from IAI: A circuit supplies electrical devices with voltage and current.\X2\000A\X0\',$,'IfcElectricalCircuit',(#222,#223,#224,#225));
+#222=IFCSIMPLEPROPERTYTEMPLATE('1D3RsX0AT9WftFpW2UweCL',$,'Diversity','A factor that is a means of reducing the cable size on the basis that not all the connected load will be drawing current simultaneously.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#223=IFCSIMPLEPROPERTYTEMPLATE('265ST1E7P0UBqNUWu70VFl',$,'NumberOfPhases','Number of phases within this circuit.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#224=IFCSIMPLEPROPERTYTEMPLATE('39Ojj1tQj1X8i4dEcGKvwx',$,'MaximumAllowedVoltageDrop','The maximum voltage drop across the circuit that must not be exceeded.',.P_SINGLEVALUE.,'IfcElectricVoltageMeasure',$,$,$,$,$,.READWRITE.);
+#225=IFCSIMPLEPROPERTYTEMPLATE('3ILomOuJr5FvydcCtgNYOz',$,'NetImpedance','The maximum earth loop impedance of a circuit (typically stated as the variable Zs)',.P_SINGLEVALUE.,'IfcElectricResistanceMeasure',$,$,$,$,$,.READWRITE.);
+#226=IFCPROPERTYSETTEMPLATE('3d7vaAb2L0q9dy6xI4nDV9',$,'Pset_ElectricalDeviceCommon','Definition from IAI: A means of collecting together all properties that are commonly used by electrical devices.',$,'IfcDistributionElement',(#227,#228,#229,#230,#231,#232,#233,#234,#235,#236,#238));
+#227=IFCSIMPLEPROPERTYTEMPLATE('2_UZ1a0oLBw8WVrkrvXw9o',$,'NominalCurrent','The maximum allowed current that a device is certified to handle.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#228=IFCSIMPLEPROPERTYTEMPLATE('2Z4AD_xx56OP9KXD7nUhA5',$,'UsageCurrent','The current that a device is actually handling or is calculated to be handling at a point in time.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#229=IFCSIMPLEPROPERTYTEMPLATE('1gGPaErDLCEgtTsKrCcURq',$,'NominalVoltage','The range of allowed voltage that a device is certified to handle. The upper bound of this value is the maximum.',.P_BOUNDEDVALUE.,'IfcElectricVoltageMeasure',$,$,$,$,$,.READWRITE.);
+#230=IFCSIMPLEPROPERTYTEMPLATE('3wNxm_iEf2AO7ri9F_kbCQ',$,'ElectricalDeviceNominalPower','The output power rating that is certified for a device.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#231=IFCSIMPLEPROPERTYTEMPLATE('32w0Ns9EvDIxaXvQq3ZgPc',$,'NumberOfPoles','The number of logical connections that can be made on an electrical device.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#232=IFCSIMPLEPROPERTYTEMPLATE('1xwEXNS_r4oea_8J2PTYis',$,'HasProtectiveEarth','Indicates whether the electrical device has a protective earth connection (=TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#233=IFCSIMPLEPROPERTYTEMPLATE('0sDFvSLKT1tAppXLhqume3',$,'NominalFrequencyRange','The upper and lower limits of frequency for which the operation of the device is certified.',.P_BOUNDEDVALUE.,'IfcFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#234=IFCSIMPLEPROPERTYTEMPLATE('2M10Z1aqT7MPvF7e3em8oC',$,'PhaseAngle','The angular difference between two waveforms of the same frequency',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#235=IFCSIMPLEPROPERTYTEMPLATE('1wj0fkXOH2lxa_BiGf8ZDs',$,'IP_Code','IEC 529 (1989) Classification of degrees of protection provided by enclosures (IP Code)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#236=IFCSIMPLEPROPERTYTEMPLATE('0MbYXaY8P3gfq5GnVyyTQS',$,'InsulationStandardClass','Insulation standard classes provides basic protection information against electric shock. Defines levels of insulation required in terms of constructional requirements (creepage and clearance distances) and electrical requirements (compliance with electric strength tests). Basic insulation is considered to be shorted under single fault conditions. The actual values required depend on the working voltage to which the insulation is subjected, as well as other factors. Also indicates whether the electrical device has a protective earth connection.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#237,$,$,$,.READWRITE.);
+#237=IFCPROPERTYENUMERATION('PEnum_InsulationStandardClass',(IFCLABEL('Class0Appliance'),IFCLABEL('Class0IAppliance'),IFCLABEL('ClassIAppliance'),IFCLABEL('ClassIIAppliance'),IFCLABEL('ClassIIIAppliance'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#238=IFCSIMPLEPROPERTYTEMPLATE('3CGMSudxvBdhumMq1hlEqr',$,'PhaseReference','The phase identification used for the device electrical input. This should be the same phase identifier that is used for the conductor segment providing the electrical service to the device. In general, it is recommended that IEC recommendations for phase identification are used (L1, L2 etc.). However, other phase identifiers may be used such as by color (Red, Blue, Yellow) or by number (1, 2, 3) etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#239=IFCPROPERTYSETTEMPLATE('2ADUsGt3fFff_pvajiVUnJ',$,'Pset_ElectricDistributionPointCommon','Definition from IAI: A room or a place or a box where an electrical supply enters and is then further distributed via electrical circuits. A distribution point may be a main distribution point or a sub-main distribution point.\X2\000A\X0\',$,'IfcElectricDistributionPoint',(#240,#241,#242,#243,#244));
+#240=IFCSIMPLEPROPERTYTEMPLATE('2GhmPiBD9CohAXuqjwglSU',$,'IsMain','Identifies if the current instance is a main distribution point or topmost level in an electrical distribution hierarchy (= TRUE) or a sub-main distribution point (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#241=IFCSIMPLEPROPERTYTEMPLATE('2KJzZ7LX9AUfMAc7dpQl4j',$,'NumberOfDoors','Number of doors',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#242=IFCSIMPLEPROPERTYTEMPLATE('0xvc2vZ_D0R8DU96RfCB43',$,'CaseMaterial','Material from which the casing surrounding the distribution point is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#243=IFCSIMPLEPROPERTYTEMPLATE('2lfYf7QB1CdevQFiTNo5Kh',$,'CaseWeight','Weight of case',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#244=IFCSIMPLEPROPERTYTEMPLATE('1UD8rDWAb6dBfwiASZCl_L',$,'NumberOfOpenings','Maximum number of openings that can fit with the case for normal use. In the openings there must be nipples, so cable may run through.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#245=IFCPROPERTYSETTEMPLATE('3SoVLEWh177Pz2x9hPiy7r',$,'Pset_ElectricGeneratorTypeCommon','Definition from IAI: Defines a particular type of engine that is a machine for converting mechanical energy into electrical energy.',$,'IfcElectricGeneratorType',(#246,#247,#248));
+#246=IFCSIMPLEPROPERTYTEMPLATE('03r77ReYX2x8G_2gF6sWMl',$,'ElectricGeneratorEfficiency','The ratio of output capacity to intake capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#247=IFCSIMPLEPROPERTYTEMPLATE('3q9EUmwyD2XwOol5t5_vCa',$,'StartCurrentFactor','IEC. Start current factor defines how large the peek starting current will become on the engine. StartCurrentFactor is multiplied to NominalCurrent and we get the start current. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#248=IFCSIMPLEPROPERTYTEMPLATE('0CZSnpRY1EVfaMUw9cMCOd',$,'MaximumPowerOutput','The maximum output power rating of the engine.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#249=IFCPROPERTYSETTEMPLATE('3E3EZw51f5SB$nuTS3KU$j',$,'Pset_ElectricHeaterTypeElectricalCableHeater','Definition from IAI: An electrical device that outputs heat uniformly along its path.',$,'IfcElectricHeaterType',(#250));
+#250=IFCSIMPLEPROPERTYTEMPLATE('2QEIDm2P5AZf9Rfi8hok0x',$,'HeatOutputPerUnitLength','The amount of heat output per unit length of heat emitter.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#251=IFCPROPERTYSETTEMPLATE('0BxLlFwMD02PCMf07vxSjf',$,'Pset_ElectricHeaterTypeElectricalMatHeater','Definition from IAI: An electrical device that outputs heat uniformly across its surface area.',$,'IfcElectricHeaterType',(#252));
+#252=IFCSIMPLEPROPERTYTEMPLATE('1nHMaLWnD2mOcAd3JwUX4B',$,'HeatOutputPerUnitArea','The amount of heat output per unit area of heat emitter.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#253=IFCPROPERTYSETTEMPLATE('2ZnoRkSSv6Dgbi5Uopt_Hp',$,'Pset_ElectricHeaterTypeElectricalPointHeater','Definition from IAI: An electrical device that outputs heat as a total quantity from a point or restricted area that can be considered as a point.',$,'IfcElectricHeaterType',(#254));
+#254=IFCSIMPLEPROPERTYTEMPLATE('1lDXkPmqL5dwGqg_ABt9OE',$,'HeatOutput','The total amount of heat output by the heat emitter.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#255=IFCPROPERTYSETTEMPLATE('1Vihwr6LvBMxon$jbbZWRB',$,'Pset_ElectricMotorTypeCommon','Definition from IAI: Defines a particular type of engine that is a machine for converting electrical energy into mechanical energy. Note that in cases where a close coupled or monobloc pump or close coupled fan is being driven by the motor, the motor may itself be considered to be directly part of the pump or fan. In this case , motor information may need to be specified directly at the pump or fan and not througfh separate motor/motor connection entities.',$,'IFCELECTRICALDOMAIN/IfcElectricMotorType,IFCHVACDOMAIN/IfcFanType,IFCHVACDOMAIN/IfcPumpType',(#256,#258,#259,#260,#261,#262,#263,#264));
+#256=IFCSIMPLEPROPERTYTEMPLATE('05H1_k3_XCr9tt8zOxy8p_',$,'MotorEnclosureType','A list of the available types of motor enclosure from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#257,$,$,$,.READWRITE.);
+#257=IFCPROPERTYENUMERATION('PEnum_MotorEnclosureType',(IFCLABEL('OpenDripProof'),IFCLABEL('TotallyEnclosedAirOver'),IFCLABEL('TotallyEnclosedFanCooled'),IFCLABEL('TotallyEnclosedNonVentilated'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#258=IFCSIMPLEPROPERTYTEMPLATE('1ChRquYZv23As4q7YhaHRV',$,'IsGuarded','Indication of whether the motor enclosure is guarded (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#259=IFCSIMPLEPROPERTYTEMPLATE('0W_MHPIgb9wA7M2Isup3qn',$,'HasPartWinding','Indication of whether the motor is single speed, i.e. has a single winding (= FALSE) or multi-speed i.e.has part winding (= TRUE) ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#260=IFCSIMPLEPROPERTYTEMPLATE('3YOIKfE1b4wwsfZmfcFI75',$,'FrameSize','Designation of the frame size according to the named range of frame sizes designated at the place of use or according to a given standard.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#261=IFCSIMPLEPROPERTYTEMPLATE('2_3PBxYHj9K8q3GEMOPScX',$,'ElectricMotorEfficiency','The ratio of output capacity to intake capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#262=IFCSIMPLEPROPERTYTEMPLATE('3qGQTGWP1AAgN$MQmsIaqt',$,'StartCurrentFactor','IEC. Start current factor defines how large the peak starting current will become on the engine. StartCurrentFactor is multiplied to NominalCurrent and to give the start current. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#263=IFCSIMPLEPROPERTYTEMPLATE('1seEjVqjr8T8DY2bRVu87U',$,'LockedRotorCurrent','Input current when a motor armature is energized but not rotating.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#264=IFCSIMPLEPROPERTYTEMPLATE('3uauaOFc52XxG6ykfZsir0',$,'MaximumPowerOutput','The maximum output power rating of the engine.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#265=IFCPROPERTYSETTEMPLATE('3jXRnIlnvF$f5Uy0xkQEtE',$,'Pset_LampTypeCommon','Definition from IAI: A lamp is a component within a light fixture that is designed to emit light. \X2\000A000A\X0\History: Name changed from Pset_LampEmitterTypeCommon in IFC 2x3.\X2\000A\X0\',$,'IfcLampType',(#266,#267,#268,#269,#271,#273,#274,#275,#276));
+#266=IFCSIMPLEPROPERTYTEMPLATE('09$0ozvVj1_Al1gNPIiwQS',$,'ContributedLuminousFlux','Luminous flux is a photometric measure of radiant flux, i.e. the volume of light emitted from a light source. Luminous flux is measured either for the interior as a whole or for a part of the interior (partial luminous flux for a solid angle). All other photometric parameters are derivatives of luminous flux. Luminous flux is measured in lumens (lm). The luminous flux is given as a nominal value for each lamp.',.P_SINGLEVALUE.,'IfcLuminousFluxMeasure',$,$,$,$,$,.READWRITE.);
+#267=IFCSIMPLEPROPERTYTEMPLATE('22790BDrD0dwjw8QhzCiGI',$,'LightEmitterNominalPower','Light emitter nominal power.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#268=IFCSIMPLEPROPERTYTEMPLATE('0w1menKXr5pxx2tENnuM17',$,'LampMaintenanceFactor','Non recoverable losses of luminous flux of a lamp due to lamp depreciation; i.e. the decreasing of light output of a luminaire due to aging and dirt. ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#269=IFCSIMPLEPROPERTYTEMPLATE('3WpRjY9K1EUurWarjqdNPu',$,'LampBallastType','The type of ballast used to stabilise gas discharge by limiting the current during operation and to deliver the necessary striking voltage for starting. Ballasts are needed to operate Discharge Lamps such as Fluorescent, Compact Fluorescent, High-pressure Mercury, Metal Halide and High-pressure Sodium Lamps. \X2\000A\X0\Magnetic ballasts are chokes which limit the current passing through a lamp connected in series on the principle of self-induction. The resultant current and power are decisive for the efficient operation of the lamp. A specially designed ballast is required for every type of lamp to comply with lamp rating in terms of Luminous Flux, Color Appearance and service life. The two types of magnetic ballasts for fluorescent lamps are KVG Conventional (EC-A series) and VVG Low-loss ballasts (EC-B series). Low-loss ballasts have a higher efficiency, which means reduced ballast losses and a lower thermal load. Electronic ballasts are used to run fluorescent lamps at high frequencies (approx. 35 - 40 kHz).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#270,$,$,$,.READWRITE.);
+#270=IFCPROPERTYENUMERATION('PEnum_LampBallastType',(IFCLABEL('Conventional'),IFCLABEL('Electronic'),IFCLABEL('LowLoss'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#271=IFCSIMPLEPROPERTYTEMPLATE('21kHdtG6DCT916PapCP8C2',$,'LampCompensationType','Identifies the form of compensation used for power factor correction and radio suppression.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#272,$,$,$,.READWRITE.);
+#272=IFCPROPERTYENUMERATION('PEnum_LampCompensationType',(IFCLABEL('Capacitive'),IFCLABEL('Inductive'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#273=IFCSIMPLEPROPERTYTEMPLATE('0cpnFEYe999Q5nP1dui_TK',$,'ColorAppearance','In both the DIN and CIE standards, artificial light sources are classified in terms of their color appearance. To the human eye they all appear to be white; the difference can only be detected by direct comparison. Visual performance is not directly affected by differences in color appearance.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#274=IFCSIMPLEPROPERTYTEMPLATE('1dkJWZg_TBFBpS0Q7OJvIt',$,'Spectrum','The spectrum of radiation describes its composition with regard to wavelength. Light, for example, as the portion of electromagnetic radiation that is visible to the human eye, is radiation with wavelengths in the range of approx. 380 to 780 nm (1 nm = 10 m). The corresponding range of colours varies from violet to indigo, blue, green, yellow, orange, and red. These colours form a continuous spectrum, in which the various spectral sectors merge into each other.',.P_TABLEVALUE.,'IfcNumericMeasure','IfcNumericMeasure',$,$,$,$,.READWRITE.);
+#275=IFCSIMPLEPROPERTYTEMPLATE('27VmFrDv174QdWa1hOsQ1F',$,'ColorTemperature','The color temperature of any source of radiation is defined as the temperature (in Kelvin) of a black-body or Planckian radiator whose radiation has the same chromaticity as the source of radiation. Often the values are only approximate color temperatures as the black-body radiator cannot emit radiation of every chromaticity value. The color temperatures of the commonest artificial light sources range from less than 3000K (warm white) to 4000K (intermediate) and over 5000K (daylight).',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#276=IFCSIMPLEPROPERTYTEMPLATE('1HeNWWpI51e9Vts28coA58',$,'ColorRenderingIndex','The CRI indicates how well a light source renders eight standard colors compared to perfect reference lamp with the same color temperature. The CRI scale ranges from 1 to 100, with 100 representing perfect rendering properties.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#277=IFCPROPERTYSETTEMPLATE('25b9JbQCf4nhLPUmCqBWKQ',$,'Pset_LightFixtureTypeCommon','Definition from IAI: Common data for light fixtures.',$,'IfcLightFixtureType',(#278,#279,#280,#282,#284,#285,#286));
+#278=IFCSIMPLEPROPERTYTEMPLATE('2amQlpIZT2Cf3BHiegPF8i',$,'NumberOfSources','Number of sources ',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#279=IFCSIMPLEPROPERTYTEMPLATE('2jXdampgzBlAKBfTs7ptZN',$,'TotalWattage','Wattage on whole lightfitting device with all sources intact.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#280=IFCSIMPLEPROPERTYTEMPLATE('3TX9EBPp1CC9nf28qR4IlJ',$,'LightFixtureMountingType','A list of the available types of mounting for light fixtures from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#281,$,$,$,.READWRITE.);
+#281=IFCPROPERTYENUMERATION('PEnum_LightFixtureMountingType',(IFCLABEL('CableSpanned'),IFCLABEL('FreeStanding'),IFCLABEL('Pole_Side'),IFCLABEL('Pole_Top'),IFCLABEL('Recessed'),IFCLABEL('Surface'),IFCLABEL('Suspended'),IFCLABEL('TrackMounted'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#282=IFCSIMPLEPROPERTYTEMPLATE('24cVPtt896guhp75lkgZG6',$,'LightFixturePlacingType','A list of the available types of placing specification for light fixtures from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#283,$,$,$,.READWRITE.);
+#283=IFCPROPERTYENUMERATION('PEnum_LightFixturePlacingType',(IFCLABEL('Ceiling'),IFCLABEL('Floor'),IFCLABEL('Furniture'),IFCLABEL('Pole'),IFCLABEL('Wall'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#284=IFCSIMPLEPROPERTYTEMPLATE('04hOg545z3ROfu_5eJgqin',$,'MaintenanceFactor','Maintenance factor.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#285=IFCSIMPLEPROPERTYTEMPLATE('2JtcR$WkLBqhzFBwsWlUbz',$,'ManufacturersSpecificInformation','Manufacturer specific information.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#286=IFCSIMPLEPROPERTYTEMPLATE('2NM4TRJ09FGPsiyVoYZZ07',$,'ArticleNumber','The article number.',.P_REFERENCEVALUE.,'IfcClassificationReference',$,$,$,$,$,.READWRITE.);
+#287=IFCPROPERTYSETTEMPLATE('3q7li8i75EnPITcqS_OIlT',$,'Pset_LightFixtureTypeExitSign','Definition from IAI: Properties that characterize an illuminated exit sign\X2\000A\X0\',$,'IfcLightFixtureType',(#288,#289,#291,#293,#295));
+#288=IFCSIMPLEPROPERTYTEMPLATE('0grkyGKtf46uXjiku09Sq2',$,'MinimumTextHeight','The minlimum height of this type.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#289=IFCSIMPLEPROPERTYTEMPLATE('3H8pKyBq1DGewXBM4AmHaJ',$,'SelfTestFunction','The type of self test function.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#290,$,$,$,.READWRITE.);
+#290=IFCPROPERTYENUMERATION('PEnum_SelfTestType',(IFCLABEL('Central'),IFCLABEL('Local'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#291=IFCSIMPLEPROPERTYTEMPLATE('2f0ybuF3XCQ8lvWbSIh4Ta',$,'BackupSupplySystem','The type of backup supply system.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#292,$,$,$,.READWRITE.);
+#292=IFCPROPERTYENUMERATION('PEnum_BackupSupplySystemType',(IFCLABEL('LocalBattery'),IFCLABEL('CentralBattery'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#293=IFCSIMPLEPROPERTYTEMPLATE('3GvedzAKz06eWKXDocS7FN',$,'PictogramEscapeDirection','The direction of escape pictogram.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#294,$,$,$,.READWRITE.);
+#294=IFCPROPERTYENUMERATION('PEnum_PictogramEscapeDirectionType',(IFCLABEL('RightArrow'),IFCLABEL('LeftArrow'),IFCLABEL('DownArrow'),IFCLABEL('UpArrow'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#295=IFCSIMPLEPROPERTYTEMPLATE('0$nA0BshL7_gRwsnhQ$RDh',$,'Addressablility','The type of addressability.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#296,$,$,$,.READWRITE.);
+#296=IFCPROPERTYENUMERATION('PEnum_AddressabilityType',(IFCLABEL('Implemented'),IFCLABEL('UpgradeableTo'),IFCLABEL('NotImplemented'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#297=IFCPROPERTYSETTEMPLATE('1F_d4Ilff1p8gGS31YNk$7',$,'Pset_LightFixtureTypeThermal','Definition from IAI: Heat load data for a light fixture.',$,'IfcLightFixtureType',(#298,#299,#300));
+#298=IFCSIMPLEPROPERTYTEMPLATE('3J8soIGpP6d9HkkRydlOdu',$,'MaximumPlenumSensibleLoad','Maximum or Peak sensible thermal load contributed to the conditioned space by the light fixture. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#299=IFCSIMPLEPROPERTYTEMPLATE('0FS8Hw0FX4lRC15px7GPuX',$,'MaximumSpaceSensibleLoad','Maximum or Peak sensible thermal load contributed to return air plenum by the light fixture.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#300=IFCSIMPLEPROPERTYTEMPLATE('0ibrMdjPD4FQLarUf27AwZ',$,'SensibleLoadToRadiant','Percent of sensible thermal load to radiant heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#301=IFCPROPERTYSETTEMPLATE('3wHLFdrED5EOsIhafLzjAl',$,'Pset_OutletTypeCommon','Definition from IAI: Common properties for different outlet types.',$,'IfcOutletType',(#302));
+#302=IFCSIMPLEPROPERTYTEMPLATE('3nr9STHx93OgMBlUhciwz0',$,'IsPluggableOutlet','Indication of whether the outlet accepts a loose plug connection (= TRUE) or whether it is directly connected (= FALSE) or whether the form of connection has not yet been determined (= UNKNOWN)',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
+#303=IFCPROPERTYSETTEMPLATE('1ca9k4lq9DeejJVuEF_nm$',$,'Pset_ProtectiveDeviceTypeCircuitBreaker','Definition from IEC 441-14-20: A circuit breaker is a mechanical switching device capable of making, carrying, and breaking currents under normal circuit conditions and also making, carrying for a specified time and breaking, current under specified abnormal circuit conditions such as those of short circuit.',$,'IfcProtectiveDeviceType',(#304));
+#304=IFCSIMPLEPROPERTYTEMPLATE('1S711bnFf0X8hrED9_lm9X',$,'CircuitBreakerType','A list of the available types of circuit breaker from which that required may be selected where:\X2\000A000A\X0\ACB - Air Circuit Breaker;\X2\000A\X0\MCB - Miniature Circuit Breaker (up to 125A);\X2\000A\X0\MCCB - Moulded Case Circuit Breaker (40A - 1600A);\X2\000A\X0\Vacuum - Generally used for high voltage (> 1000V) but may be used for installations close to/up to 1000V.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#305,$,$,$,.READWRITE.);
+#305=IFCPROPERTYENUMERATION('PEnum_CircuitBreakerType',(IFCLABEL('ACB'),IFCLABEL('MCB'),IFCLABEL('MCCB'),IFCLABEL('Vacuum'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#306=IFCPROPERTYSETTEMPLATE('2UitNdd7f7lftC8NG$3Z5N',$,'Pset_ProtectiveDeviceTypeCommon','Definition from IAI: Common properties for different protective device types.',$,'IfcProtectiveDeviceType',(#307,#308,#309,#310,#311,#312,#313,#314));
+#307=IFCSIMPLEPROPERTYTEMPLATE('2PKqOsdNr8P8cC57vbUgXL',$,'RatedShortCircuitCurrent','An overcurrent resulting from a fault of negligible impedance between live conductors having a difference in potential under normal operating conditions. (IEC 826-05-08)',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#308=IFCSIMPLEPROPERTYTEMPLATE('2ujv4hTGL1H8Ro7ZGzyLqP',$,'CutOffCurrent','The maximum instantaneous value of current attained during the breaking operation of a protective device. (IEC 441-17-12)',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#309=IFCSIMPLEPROPERTYTEMPLATE('07MrT9_6z7YhK3$8EqlLHw',$,'MaximumRatedVoltage','Maximum rated voltage',.P_SINGLEVALUE.,'IfcElectricVoltageMeasure',$,$,$,$,$,.READWRITE.);
+#310=IFCSIMPLEPROPERTYTEMPLATE('3WIvXLKxTAH9Crir5g$JVC',$,'LimitingTerminalSize','The maximum terminal size capacity of the device.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#311=IFCSIMPLEPROPERTYTEMPLATE('07jlN6fon59OR4T01tLhHZ',$,'SwitchingDuty','The maximum number of operations for the device at the rated making and breaking capacity.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#312=IFCSIMPLEPROPERTYTEMPLATE('3ERfRhHwTCIuazKkkUKILS',$,'CharacteristicTripCurve','A curve giving the time, e.g. prearcing time or operating time, as a function of the protective current under stated conditions of operation. ',.P_TABLEVALUE.,' IfcElectricCurrentMeasure','IfcTimeMeasure',$,$,$,'a = b + c',.READWRITE.);
+#313=IFCSIMPLEPROPERTYTEMPLATE('2rJyb_7wv0BgHqoKi4GtmU',$,'ProtectiveTagType','The breaking capacity value of the device. Note: This may be expressed as a code or a value depending on standard and/or source.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#314=IFCSIMPLEPROPERTYTEMPLATE('3vn22R8hj2Beki3EXkPBBJ',$,'StandardUsed','The electrical standard used as a reference when preparing data for the device.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#315=IFCPROPERTYSETTEMPLATE('3_B9SwzWH6JgjVSpMJEQOX',$,'Pset_ProtectiveDeviceTypeEarthFailureDevice','Definition from IAI: An earth failure device acts to protect people and equipment from the effects of current leakage.',$,'IfcProtectiveDeviceType',(#316,#318));
+#316=IFCSIMPLEPROPERTYTEMPLATE('0BFCqfYKjC4ezY7hvm_07c',$,'EarthFailureDeviceType','A list of the available types of circuit breaker from which that required may be selected where:\X2\000A000A\X0\Standard - Device that operates without a time delay;\X2\000A\X0\TimeDelayed - Device that operates after a time delay.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#317,$,$,$,.READWRITE.);
+#317=IFCPROPERTYENUMERATION('PEnum_EarthFailureDeviceType',(IFCLABEL('Standard'),IFCLABEL('TimeDelayed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#318=IFCSIMPLEPROPERTYTEMPLATE('3ERDGFn6b8oQo74QmbIGvy',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#319=IFCPROPERTYSETTEMPLATE('0eIinQfv50zPtQGEAo2K6_',$,'Pset_ProtectiveDeviceTypeFuseDisconnector','Definition from IAI: A device that will electrically open the circuit after a period of prolonged, abnormal current flow.',$,'IfcProtectiveDeviceType',(#320));
+#320=IFCSIMPLEPROPERTYTEMPLATE('1Maa45POz3cxEWfKphhgXY',$,'FuseDisconnectorType','A list of the available types of fuse disconnector from which that required may be selected where:\X2\000A000A\X0\EngineProtectionDevice - A fuse whose characteristic is specifically designed for the protection of a motor or generator.\X2\000A\X0\FuseSwitchDisconnector - A switch disconnector in which a fuse link or a fuse carrier with fuse link forms the moving contact,\X2\000A\X0\HRC - A standard fuse (High Rupturing Capacity)\X2\000A\X0\OverloadProtectionDevice - A device that disconnects the supply when the operating conditions in an electrically undamaged circuit causes an overcurrent,\X2\000A\X0\SemiconductorFuse - A fuse whose characteristic is specifically designed for the protection of sem-conductor devices.\X2\000A\X0\SwitchDisconnectorFuse - A switch disconnector in which one or more poles have a fuse in series in a composite unit.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#321,$,$,$,.READWRITE.);
+#321=IFCPROPERTYENUMERATION('PEnum_FuseDisconnectorType',(IFCLABEL('EngineProtectionDevice'),IFCLABEL('FusedSwitch'),IFCLABEL('HRC'),IFCLABEL('OverloadProtectionDevice'),IFCLABEL('SwitchDisconnectorFuse'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#322=IFCPROPERTYSETTEMPLATE('2ueqqMUnL7RhXPXoarV5Uf',$,'Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker','Definition from IAI: A residual current circuit breaker opens, closes or isolates a circuit and has short circuit and overload protection.',$,'IfcProtectiveDeviceType',(#323));
+#323=IFCSIMPLEPROPERTYTEMPLATE('0G2SGnBfDFDRWY0DZJ29Xq',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#324=IFCPROPERTYSETTEMPLATE('1l_Td$ATb2nhsrctZwp4BE',$,'Pset_ProtectiveDeviceTypeResidualCurrentSwitch','Definition from IAI: A residual current switch opens, closes or isolates a circuit and has no short circuit or overload protection.',$,'IfcProtectiveDeviceType',(#325));
+#325=IFCSIMPLEPROPERTYTEMPLATE('0JxUNHCEjDVfjWooJbdJFV',$,'Sensitivity','Current leakage to an unwanted leading path during normal operation (IEC 151-14-49)',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#326=IFCPROPERTYSETTEMPLATE('3sbur_nJT1VgXwPcwK7LYr',$,'Pset_ProtectiveDeviceTypeVaristor','Definition from IAI: A high voltage surge protection device.',$,'IfcProtectiveDeviceType',(#327));
+#327=IFCSIMPLEPROPERTYTEMPLATE('3KOyPBpqz9sfjnEx$$gKOn',$,'VaristorType','A list of the available types of varistor from which that required may be selected.\X2\000A000A000A000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#328,$,$,$,.READWRITE.);
+#328=IFCPROPERTYENUMERATION('PEnum_VaristorType',(IFCLABEL('MetalOxide'),IFCLABEL('ZincOxide'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#329=IFCPROPERTYSETTEMPLATE('1Sg72FMrPFseu5xDTuoMS5',$,'Pset_SwitchingDeviceTypeCommon','Definition from IEC 441-14-01: A switching device is a device designed to make or break the current in one or more electric circuits.',$,'IfcSwitchingDeviceType',(#330,#331,#333));
+#330=IFCSIMPLEPROPERTYTEMPLATE('3bl7ddXMz8Neee40pg06$j',$,'NumberOfGangs','Number of gangs/buttons on this switch',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#331=IFCSIMPLEPROPERTYTEMPLATE('1epUZEUyP7IwdKwOqb1PTG',$,'SwitchFunction','Indicates types of switches which differs in functionality',.P_ENUMERATEDVALUE.,'IfcLabel',$,#332,$,$,$,.READWRITE.);
+#332=IFCPROPERTYENUMERATION('PEnum_SwitchFunctionType',(IFCLABEL('OnOffSwitch'),IFCLABEL('IntermediateSwitch'),IFCLABEL('DoubleThrowSwitch'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#333=IFCSIMPLEPROPERTYTEMPLATE('1ptSwPg0TEuPbQWTsbapun',$,'HasLock','Indication of whether a switching device has a key operated lock (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#334=IFCPROPERTYSETTEMPLATE('1GD9bkgRPDwwI9TDXhkw1Z',$,'Pset_SwitchingDeviceTypeContactor','Definition from IAI: An electrical device used to control the flow of power in a circuit on or off.',$,'IfcSwitchingDeviceType',(#335));
+#335=IFCSIMPLEPROPERTYTEMPLATE('0qhuufXs9EvubWKijFwAkX',$,'ContactorType','A list of the available types of contactor from which that required may be selected where:\X2\000A000A\X0\CapacitorSwitching - for switching 3 phase single or multi-step capacitor banks\X2\000A\X0\LowCurrent - requires the use of low resistance contacts\X2\000A\X0\MagneticLatching - enables the contactor to remain in the on position when the coil is no longer energized\X2\000A\X0\MechanicalLatching - requires that the contactor is mechanically retained in the on position\X2\000A\X0\Modular - are totally enclosed and self contained\X2\000A\X0\Reversing - has a double set of contactors that are prewired\X2\000A\X0\Standard - is a generic device that controls the flow of power in a circuit on or off\X2\000A000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#336,$,$,$,.READWRITE.);
+#336=IFCPROPERTYENUMERATION('PEnum_ContactorType',(IFCLABEL('CapacitorSwitching'),IFCLABEL('LowCurrent'),IFCLABEL('MagneticLatching'),IFCLABEL('MechanicalLatching'),IFCLABEL('Modular'),IFCLABEL('Reversing'),IFCLABEL('Standard'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#337=IFCPROPERTYSETTEMPLATE('1M2ReZC8j0Je5qrLmFKO7r',$,'Pset_SwitchingDeviceTypeEmergencyStop','Definition from IEC 826-08-03: An emergency stop device acts to remove as quickly as possible any danger that may have arisen unexpectedly.',$,'IfcSwitchingDeviceType',(#338));
+#338=IFCSIMPLEPROPERTYTEMPLATE('0Iu$BIccDEyACE8KGcjWbv',$,'SwitchOperation','Indicates operation of emergency stop switch.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#339,$,$,$,.READWRITE.);
+#339=IFCPROPERTYENUMERATION('PEnum_SwitchFunctionType',(IFCLABEL('Mushroom'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#340=IFCPROPERTYSETTEMPLATE('1sr26ToZv9P9AAYzGWL3Oa',$,'Pset_SwitchingDeviceTypeStarter','Definition from IAI: A starter is a switch which in the closed position controls the application of power to an electrical device.',$,'IfcSwitchingDeviceType',(#341));
+#341=IFCSIMPLEPROPERTYTEMPLATE('3xnyTS_Ur9U8crFbsKZAEo',$,'StarterType','A list of the available types of starter from which that required may be selected where:\X2\000A000A\X0\AutoTransformer - A starter for an induction motor which uses for starting one or more reduced voltages derived from an auto transformer. (IEC 441-14-45)\X2\000A\X0\Manual - A starter in which the force for closing the main contacts is provided exclusively by manual energy. (IEC 441-14-39)\X2\000A\X0\DirectOnLine - A starter which connects the line voltage across the motor terminals in one step. (IEC 441-14-40)\X2\000A\X0\Frequency - A starter in which the frequency of the power supply is progressively increased until the normal operation frequency is attained.\X2\000A\X0\nStep - A starter in which there are (n-1) intermediate accelerating positions between the off and full on positions. (IEC 441-14-41)\X2\000A\X0\Rheostatic - A starter using one or several resistors for obtaining, during starting, stated motor torque characteristics and for limiting the current. (IEC 441-14-425)\X2\000A\X0\StarDelta - A starter for a 3 phase induction motor such that in the starting position the stator windings are connected in star and in the final running position they are connected in delta. (IEC 441-14-44)\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#342,$,$,$,.READWRITE.);
+#342=IFCPROPERTYENUMERATION('PEnum_StarterType',(IFCLABEL('AutoTransformer'),IFCLABEL('Manual'),IFCLABEL('DirectOnLine'),IFCLABEL('Frequency'),IFCLABEL('nStep'),IFCLABEL('Rheostatic'),IFCLABEL('StarDelta'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#343=IFCPROPERTYSETTEMPLATE('2sPgjKFRbDYuX1fN57pGXx',$,'Pset_SwitchingDeviceTypeSwitchDisconnector','Definition from IEC 441-14-12: A switch disconnector is a switch which in the open position satisfies the isolating requirements specified for a disconnector.',$,'IfcSwitchingDeviceType',(#344,#346,#348));
+#344=IFCSIMPLEPROPERTYTEMPLATE('2Wy$D5F4r0X8pcOELXjv0C',$,'SwitchDisconnectorType','A list of the available types of switch disconnector from which that required may be selected where:\X2\000A000A\X0\CenterBreak - A disconnector in which both contacts of each pole are movable and engage at a point substantially midway between their supports. (IEC 441-14-08)\X2\000A\X0\DividedSupport - A disconnector in which the fixed and moving contacts of each pole are not supported by a common base or frame. (IEC 441-14-06)\X2\000A\X0\DoubleBreak - A disconnector that opens a circuit at two points. (IEC 441-14-09)\X2\000A\X0\EarthingSwitch - A disconnector in which the fixed and moving contacts of each pole are not supported by a common base or frame. (IEC 441-14-07)\X2\000A\X0\Isolator - A disconnector which in the open position satisfies isolating requirements. (IEC 441-14-12)',.P_ENUMERATEDVALUE.,'IfcLabel',$,#345,$,$,$,.READWRITE.);
+#345=IFCPROPERTYENUMERATION('PEnum_SwitchDisconnectorType',(IFCLABEL('CenterBreak'),IFCLABEL('DividedSupport'),IFCLABEL('DoubleBreak'),IFCLABEL('EarthingSwitch'),IFCLABEL('Isolator'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#346=IFCSIMPLEPROPERTYTEMPLATE('3IXh6LzkvBvg1S3zQZyygr',$,'LoadDisconnectionType','A list of the available types of load disconnection from which that required may be selected.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#347,$,$,$,.READWRITE.);
+#347=IFCPROPERTYENUMERATION('PEnum_LoadDisconnectionType',(IFCLABEL('OffLoad'),IFCLABEL('OnLoad'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#348=IFCSIMPLEPROPERTYTEMPLATE('3lO8Eww4z0HQ3gS4egfw92',$,'HasVisualIndication','Indicates whether a means of being to visually ascertain whether the contacts are open or closed is fitted (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#349=IFCPROPERTYSETTEMPLATE('0YcicMHrv8HR60f0ZBdOm2',$,'Pset_SwitchingDeviceTypeToggleSwitch','Definition from IAI: A toggle switch is a switch that enables or isolates electrical power through a two position on/off action..',$,'IfcSwitchingDeviceType',(#350,#352,#354,#356,#357));
+#350=IFCSIMPLEPROPERTYTEMPLATE('3dGCGP9V53D9$GrUx5Tk8w',$,'ToggleSwitchType','A list of the available types of toggle switch from which that required may be selected.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#351,$,$,$,.READWRITE.);
+#351=IFCPROPERTYENUMERATION('PEnum_ToggleSwitchType',(IFCLABEL('BreakGlass'),IFCLABEL('Changeover'),IFCLABEL('Dimmer'),IFCLABEL('KeyOperated'),IFCLABEL('ManualPull'),IFCLABEL('PushButton'),IFCLABEL('Pullcord'),IFCLABEL('Rocker'),IFCLABEL('Selector'),IFCLABEL('Twist'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#352=IFCSIMPLEPROPERTYTEMPLATE('3rU8xyQGr2GP8ts9cpw9tv',$,'SwitchUsage','A list of the available usages for toggle switches from which that required may be selected\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#353,$,$,$,.READWRITE.);
+#353=IFCPROPERTYENUMERATION('PEnum_SwitchUsage',(IFCLABEL('Emergency'),IFCLABEL('Guard'),IFCLABEL('Limit'),IFCLABEL('Start'),IFCLABEL('Stop'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#354=IFCSIMPLEPROPERTYTEMPLATE('0D8L9x$A92suJchbzcUYpP',$,'SwitchActivation','A list of the available activations for toggle switches from which that required may be selected\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#355,$,$,$,.READWRITE.);
+#355=IFCPROPERTYENUMERATION('PEnum_SwitchActivation',(IFCLABEL('Actuator'),IFCLABEL('Foot'),IFCLABEL('Hand'),IFCLABEL('Proximity'),IFCLABEL('Sound'),IFCLABEL('TwoHand'),IFCLABEL('Wire'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#356=IFCSIMPLEPROPERTYTEMPLATE('3X1VoJhGjCwRMZQ20Cfg5X',$,'IsIlluminated','An indication of whether there is an illuminated indicator to show that the switch is on (=TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#357=IFCSIMPLEPROPERTYTEMPLATE('2NCXsovcv9Kx2KdnyP4UCV',$,'Legend','A text inscribed or applied to the switch as a legend to indicate purpose or function.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#358=IFCPROPERTYSETTEMPLATE('2$EMAeZP95DvyTq0t_HRLu',$,'Pset_TransformerTypeCommon','Definition from IAI: An inductive stationary device that transfers electrical energy from one circuit to another.',$,'IfcTransformerType',(#359,#360,#361,#362,#363,#364,#365,#366,#367,#368));
+#359=IFCSIMPLEPROPERTYTEMPLATE('1Ujz6dt3v4uezlVFqG0Ewg',$,'PrimaryVoltage','The voltage that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,'IfcElectricVoltageMeasure',$,$,$,$,$,.READWRITE.);
+#360=IFCSIMPLEPROPERTYTEMPLATE('1kHGwuYKn8jBGAdXKlGvCL',$,'SecondaryVoltage','The voltage that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,'IfcElectricVoltageMeasure',$,$,$,$,$,.READWRITE.);
+#361=IFCSIMPLEPROPERTYTEMPLATE('3lkzxqb2H2_enrA8Eh2yD1',$,'PrimaryCurrent','The current that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#362=IFCSIMPLEPROPERTYTEMPLATE('19PxV3hez0Ng75i_lBfduy',$,'SecondaryCurrent','The current that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,'IfcElectricCurrentMeasure',$,$,$,$,$,.READWRITE.);
+#363=IFCSIMPLEPROPERTYTEMPLATE('19$FWVvgnDogzjhhCBez2$',$,'PrimaryFrequency','The frequency that is going to be transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,'IfcFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#364=IFCSIMPLEPROPERTYTEMPLATE('1YMOkBcbLCoQE_HvMnmvCD',$,'SecondaryFrequency','The frequency that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,'IfcFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#365=IFCSIMPLEPROPERTYTEMPLATE('2UAHhF5QnEcQlbLk5yrLfk',$,'PrimaryApparentPower','The power in VA (volt ampere) that has been transformed and that runs into the transformer on the primary side.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#366=IFCSIMPLEPROPERTYTEMPLATE('3v9aFjsBj0fQBM$Rtutpfo',$,'SecondaryApparentPower','The power in VA (volt ampere) that has been transformed and is running out of the transformer on the secondary side.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#367=IFCSIMPLEPROPERTYTEMPLATE('3UQLn8xL547xh$NBTvktML',$,'MaximumApparentPower','Maximum apparent power/capacity in VA (volt ampere).',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#368=IFCSIMPLEPROPERTYTEMPLATE('2_szONBt1CnvORLQbQ$hzw',$,'SecondaryCurrentType','A list of the secondary current types that can result from transformer output',.P_ENUMERATEDVALUE.,'IfcLabel',$,#369,$,$,$,.READWRITE.);
+#369=IFCPROPERTYENUMERATION('PEnum_SecondaryCurrentType',(IFCLABEL('AC'),IFCLABEL('DC'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#370=IFCPROPERTYSETTEMPLATE('1O_LAujTz5bhU1aiC5SN5R',$,'Pset_ActionRequest','Definition from IAI: An action request is a request for an action to fulfill a need.\X2\000A\X0\',$,'IfcActionRequest',(#371,#373,#374,#375,#376,#377));
+#371=IFCSIMPLEPROPERTYTEMPLATE('0Iwvv65m95dugm4j32nR9k',$,'RequestSourceType','Identifies the predefined types of sources through which a request can be made.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#372,$,$,$,.READWRITE.);
+#372=IFCPROPERTYENUMERATION('PEnum_RequestSourceType',(IFCLABEL('Email'),IFCLABEL('Fax'),IFCLABEL('Phone'),IFCLABEL('Post'),IFCLABEL('Verbal'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#373=IFCSIMPLEPROPERTYTEMPLATE('3bjwzwdN59meosCziawQTO',$,'RequestSourceLabel','A specific name or label that further qualifies the identity of a request source. In the event of an email, this may be the email address.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#374=IFCSIMPLEPROPERTYTEMPLATE('2NYex4Qq99uOmxEX9jyd9t',$,'RequestSourceName','The person making the request, where known.',.P_REFERENCEVALUE.,'IfcPerson',$,$,$,$,$,.READWRITE.);
+#375=IFCSIMPLEPROPERTYTEMPLATE('1WEIMLlajB6e0fAm6EUt7w',$,'RequestDescription','The request description as provided.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#376=IFCSIMPLEPROPERTYTEMPLATE('1LEY0iTX95j8jdz$87wzUI',$,'RequestComments','Comments that may be made on the request.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#377=IFCSIMPLEPROPERTYTEMPLATE('0zmOXLTBH4lfHQQopkdSgz',$,'Status','The status currently assigned to the request where:\X2\000A\X0\Hold = wait to see if further requests are received before deciding on action,\X2\000A\X0\NoAction = no action is required on this request,\X2\000A\X0\Schedule = plan action to take place as part of maintenance or other task planning/scheduling,\X2\000A\X0\Urgent = take action immediately.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#378,$,$,$,.READWRITE.);
+#378=IFCPROPERTYENUMERATION('PEnum_RequestStatus',(IFCLABEL('Hold'),IFCLABEL('NoAction'),IFCLABEL('Schedule'),IFCLABEL('Urgent'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#379=IFCPROPERTYSETTEMPLATE('05shhalhv6te2L9s5cKo5q',$,'Pset_PackingInstructions','Definition from IAI: Packing instructions are specific instructions relating to the packing that is required for an artefact (instance of IfcProduct) in the event of a move (where the product is related to an instance of IfcMove). \X2\000A\X0\',$,'IfcProduct',(#380,#382,#383,#384));
+#380=IFCSIMPLEPROPERTYTEMPLATE('3A96JFBs52QO_WecVvrKus',$,'PackingCareType','Identifies the predefined types of care that may be required when handling the artefact during a move where:\X2\000A000A\X0\Fragile = artefact may be broken during a move through careless handling.\X2\000A\X0\HandleWithCare = artefact may be damaged during a move through careless handling.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#381,$,$,$,.READWRITE.);
+#381=IFCPROPERTYENUMERATION('PEnum_PackingCareType',(IFCLABEL('Fragile'),IFCLABEL('HandleWithCare'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#382=IFCSIMPLEPROPERTYTEMPLATE('2IglEpsBjCIAW$XbJEqL1v',$,'WrappingMaterial','Special requirements for material used to wrap an artefact.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#383=IFCSIMPLEPROPERTYTEMPLATE('2ooUQPPhH0kfgty11usXBw',$,'ContainerMaterial','Special requirements for material used to contain an artefact.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#384=IFCSIMPLEPROPERTYTEMPLATE('1IED2trrjEpRrP9zFoz9gO',$,'SpecialInstructions','Special instructions for packing.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#385=IFCPROPERTYSETTEMPLATE('1MX2ZbCmj1Lf3r0xbSd9ja',$,'Pset_Permit','Definition from IAI: A permit is a document that allows permission to gain access to an area or carry out work in a situation where security or other access restrictions apply.\X2\000A\X0\',$,'IfcPermit',(#386,#388,#389,#390,#391,#392,#393));
+#386=IFCSIMPLEPROPERTYTEMPLATE('0Glpbc7w1B6OC2aGwYNZdv',$,'PermitType','Identifies the predefined types of permits that can be granted where:\X2\000A000A\X0\Access = enables access to an identified area,\X2\000A\X0\Work = enables work to be carried out in an identified area',.P_ENUMERATEDVALUE.,'IfcLabel',$,#387,$,$,$,.READWRITE.);
+#387=IFCPROPERTYENUMERATION('PEnum_PermitType',(IFCLABEL('Access'),IFCLABEL('Work'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#388=IFCSIMPLEPROPERTYTEMPLATE('06jkUKFZP74xRwC_vTAWK3',$,'EscortRequirement','Indicates whether or not an escort is required to accompany persons carrying out a work order at or to/from the place of work (= TRUE) or not (= FALSE).\X2\000A000A\X0\NOTE - There are many instances where escorting is required, particularly in a facility that has a high security rating. Escorting may require that persons are escorted to and from the place of work. Alternatively, it may involve the escort remaining at the place of work at all times.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#389=IFCSIMPLEPROPERTYTEMPLATE('1yzqL5ldL8YQjLPY39sh_i',$,'StartDate','Start date.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#390=IFCSIMPLEPROPERTYTEMPLATE('0kjajZKubCG9q$Xnbw$nTz',$,'PermitDuration','Permit duration.',.P_REFERENCEVALUE.,'IfcDateAndTime',$,$,$,$,$,.READWRITE.);
+#391=IFCSIMPLEPROPERTYTEMPLATE('3n50$oSODCMQXZNqGSXjMH',$,'StartTime','Start time.',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
+#392=IFCSIMPLEPROPERTYTEMPLATE('1s_Tx6t1HEAvuB3JDkhlXZ',$,'EndTime','End time.',.P_REFERENCEVALUE.,'IfcLocalTime',$,$,$,$,$,.READWRITE.);
+#393=IFCSIMPLEPROPERTYTEMPLATE('2VnuF5tqf5uAbqnKMj$CKG',$,'SpecialRequirements','Any additional special requirements that need to be included in the permit to work.\X2\000A000A\X0\NOTE - Additional permit requirements may be imposed according to the nature of the facility at which the work is carried out. For instance, in clean areas, special clothing may be required whilst in corrective institutions, it may be necessary to check in and check out tools that will be used for work as a safety precaution.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#394=IFCPROPERTYSETTEMPLATE('1WEwj4Apv9EQiPVNXIGLNL',$,'Pset_AirTerminalBoxPHistory','Definition from IAI: Air terminal box performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#395,#396,#397,#398));
+#395=IFCSIMPLEPROPERTYTEMPLATE('1yL993DfnAQwPagKua8MlH',$,'DamperPosition','Control damper position, ranging from 0 to 1.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOSITIVERATIOMEASURE',$,$,$,$,.READWRITE.);
+#396=IFCSIMPLEPROPERTYTEMPLATE('2CrmT7bGDAiBrEvjF06luR',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#397=IFCSIMPLEPROPERTYTEMPLATE('2nCELZzx16URbtarD0TeoL',$,'Sound','Sound performance.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#398=IFCSIMPLEPROPERTYTEMPLATE('0yIgUc1kf2jxfsoJTbLiPn',$,'AirflowCurve','Air flowrate versus damper position relationship;airflow = f ( valve position).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#399=IFCPROPERTYSETTEMPLATE('0neOXUmunDvQL5ekVWAeT4',$,'Pset_AirTerminalBoxTypeCommon','Definition from IAI: Air terminal box type common attributes.\X2\000A\X0\',$,'IfcAirTerminalBoxType',(#400,#401,#402,#403,#405,#407,#408,#409,#410,#411,#412,#413,#414,#415,#416));
+#400=IFCSIMPLEPROPERTYTEMPLATE('0hQ4lIjnX5xhzpT9q4hCOz',$,'AirflowRateRange','Range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#401=IFCSIMPLEPROPERTYTEMPLATE('0LZQ6jqgn4QwYUUyBFEqbc',$,'AirPressureRange','Allowable air static pressure range at the entrance of the air terminal box.',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#402=IFCSIMPLEPROPERTYTEMPLATE('1bk1QKjub2iRvkLu0$RZG_',$,'NominalAirFlowRate','Nominal airflow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#403=IFCSIMPLEPROPERTYTEMPLATE('3jGCRkYgb8b8AeWY_NOdy0',$,'ArrangementType','Terminal box arrangement.\X2\000A\X0\SingleDuct: Terminal box receives warm or cold air from a single air supply duct.\X2\000A\X0\DualDuct: Terminal box receives warm and cold air from separate air supply ducts.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#404,$,$,$,.READWRITE.);
+#404=IFCPROPERTYENUMERATION('PEnum_AirTerminalBoxArrangementType',(IFCLABEL('SINGLEDUCT'),IFCLABEL('DUALDUCT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#405=IFCSIMPLEPROPERTYTEMPLATE('122g4_QGTFiuG8YIz7lg48',$,'ReheatType','Terminal box reheat type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#406,$,$,$,.READWRITE.);
+#406=IFCPROPERTYENUMERATION('PEnum_AirTerminalBoxReheatType',(IFCLABEL('ELECTRICALREHEAT'),IFCLABEL('WATERCOILREHEAT'),IFCLABEL('STEAMCOILREHEAT'),IFCLABEL('GASREHEAT'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#407=IFCSIMPLEPROPERTYTEMPLATE('2RzAF6oUL58xEttglk_nYl',$,'HasSoundAttenuator','Terminal box has a sound attenuator.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#408=IFCSIMPLEPROPERTYTEMPLATE('3pqrKpC_9CiOcvL21wm6ou',$,'HasReturnAir','Terminal box has return air mixed with supply air from duct work.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#409=IFCSIMPLEPROPERTYTEMPLATE('19dFjh5r1B78PewEtZ83WO',$,'HasFan','Terminal box has a fan inside (fan powered box).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#410=IFCSIMPLEPROPERTYTEMPLATE('3aW_KeinLFm8EPLjWYmfQI',$,'NominalInletAirPressure','Nominal airflow inlet static pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#411=IFCSIMPLEPROPERTYTEMPLATE('1AGCtXCWPD6xVOFUXWhwzi',$,'NominalDamperDiameter','Nominal damper diameter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#412=IFCSIMPLEPROPERTYTEMPLATE('1IIMyhAtXAmQdfSwDxG_6w',$,'Material','The primary material used to construct the air terminal box.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#413=IFCSIMPLEPROPERTYTEMPLATE('3m7Fv2295APwzKHiJNB3hD',$,'HousingThickness','Air terminal box housing material thickness.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#414=IFCSIMPLEPROPERTYTEMPLATE('3dGcVHVnbEvxsR5hU1HHnw',$,'OperationTemperatureRange','Allowable operational range of the ambient air temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#415=IFCSIMPLEPROPERTYTEMPLATE('20W1Q6KXj5rPFH3Y8GpUpS',$,'ReturnAirFractionRange','Allowable return air fraction range as a fraction of discharge airflow.',.P_BOUNDEDVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#416=IFCSIMPLEPROPERTYTEMPLATE('3Fm_F3D4bCUh2qrW8j1k9A',$,'Weight','Weight of the air terminal box.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#417=IFCPROPERTYSETTEMPLATE('1kvWLdsFT4CwRdcaxic4U$',$,'Pset_AirTerminalPHistory','Definition from IAI: Air terminal performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#418,#419,#420,#421,#422,#423,#424));
+#418=IFCSIMPLEPROPERTYTEMPLATE('32bwFlukLEsOhBnopotvQD',$,'AirFlowRate','Volumetric flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','VOLUMETRICFLOWRATEUNIT',$,$,$,$,.READWRITE.);
+#419=IFCSIMPLEPROPERTYTEMPLATE('2Ml7Vxd5P5WBZNtmCGx8Yp',$,'NeckAirVelocity','Air velocity at the neck.',.P_REFERENCEVALUE.,'IfcTimeSeries','LINEARVELOCITYUNIT',$,$,$,$,.READWRITE.);
+#420=IFCSIMPLEPROPERTYTEMPLATE('1BcMEGdVnC0RCD0ovI4ZYj',$,'SupplyAirTemperatureHeating','Supply air temperature in heating mode ',.P_REFERENCEVALUE.,'IfcTimeSeries','THERMODYNAMICTEMPERATUREUNIT',$,$,$,$,.READWRITE.);
+#421=IFCSIMPLEPROPERTYTEMPLATE('1woVfpqVb9ShkF5LMR0Mxh',$,'SupplyAirTemperatureCooling','Supply air temperature in cooling mode ',.P_REFERENCEVALUE.,'IfcTimeSeries','THERMODYNAMICTEMPERATUREUNIT',$,$,$,$,.READWRITE.);
+#422=IFCSIMPLEPROPERTYTEMPLATE('20L0xi0MT6MBXjHcLSpde8',$,'PressureDrop','Drop in total pressure between inlet and outlet at nominal air-flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','PRESSUREUNIT',$,$,$,$,.READWRITE.);
+#423=IFCSIMPLEPROPERTYTEMPLATE('1osbY2sLXDrwGY3NKrXPzn',$,'InductionRatio','Induction ratio versus distance from the diffuser and its discharge direction; induction ratio (or entrainment ratio) is the ratio of the volumetric flow rate in the jet to the volumetric flow rate at the air terminal',.P_TABLEVALUE.,'IfcReal','IfcLengthMeasure',$,$,$,$,.READWRITE.);
+#424=IFCSIMPLEPROPERTYTEMPLATE('0pIhwJQz1Fc8kJgTYf24sK',$,'CenterlineAirVelocity','Centerline air velocity versus distance from the diffuser and temperature differential; a function of distance from diffuser and temperature difference between supply air and room air.',.P_TABLEVALUE.,'IfcLinearVelocityMeasure','IfcLengthMeasure',$,$,$,$,.READWRITE.);
+#425=IFCPROPERTYSETTEMPLATE('35M0XAsEr5LBXyApZe$CQo',$,'Pset_AirTerminalTypeCommon','Definition from IAI: Air terminal type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.\X2\000A\X0\',$,'IfcAirTerminalType',(#426,#428,#430,#431,#432,#434,#435,#436,#437,#439,#440,#442,#444,#445,#446,#447,#449,#450,#451,#452,#453,#454));
+#426=IFCSIMPLEPROPERTYTEMPLATE('2kmgiuyA91BPNTEviFr_S_',$,'Shape','Shape of the air terminal. Slot is typically a long narrow supply device with an aspect ratio generally greater than 10 to 1.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#427,$,$,$,.READWRITE.);
+#427=IFCPROPERTYENUMERATION('PEnum_AirTerminalShape',(IFCLABEL('ROUND'),IFCLABEL('RECTANGULAR'),IFCLABEL('SQUARE'),IFCLABEL('SLOT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#428=IFCSIMPLEPROPERTYTEMPLATE('37taCakef1f9lsEQK09q7e',$,'FlowPattern','Flow pattern',.P_ENUMERATEDVALUE.,'IfcLabel',$,#429,$,$,$,.READWRITE.);
+#429=IFCPROPERTYENUMERATION('PEnum_AirTerminalFlowPattern',(IFCLABEL('LINEARSINGLE'),IFCLABEL('LINEARDOUBLE'),IFCLABEL('LINEARFOURWAY'),IFCLABEL('RADIAL'),IFCLABEL('SWIRL'),IFCLABEL('DISPLACMENT'),IFCLABEL('COMPACTJET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#430=IFCSIMPLEPROPERTYTEMPLATE('2scZQo979B$9aQqarxmSJO',$,'AirFlowrateRange','Air flowrate range within which the air terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#431=IFCSIMPLEPROPERTYTEMPLATE('2t2GwPwRbAwumfwuHRBAo8',$,'TemperatureRange','Temperature range within which the air terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#432=IFCSIMPLEPROPERTYTEMPLATE('3L5qqu8z53JAqV6Yqc9ih7',$,'DischargeDirection','Discharge direction of the air terminal.\X2\000A\X0\Parallel: discharges parallel to mounting surface designed so that flow attaches to the surface.\X2\000A\X0\Perpendicular: discharges away from mounting surface.\X2\000A\X0\Adjustable: both parallel and perpendicular discharge.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#433,$,$,$,.READWRITE.);
+#433=IFCPROPERTYENUMERATION('PEnum_AirTerminalDischargeDirection',(IFCLABEL('PARALLEL'),IFCLABEL('PERPENDICULAR'),IFCLABEL('ADJUSTABLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#434=IFCSIMPLEPROPERTYTEMPLATE('0JxZ8_xtT7gwXQ5E_1zVdR',$,'ThrowLength','The horizontal or vertical axial distance an airstream travels after leaving an AirTerminal before the maximum stream velocity is reduced to a specified terminal velocity under isothermal conditions at the upper value of the AirFlowrateRange.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#435=IFCSIMPLEPROPERTYTEMPLATE('0tbeDMUKTDkxTcJaqWoiXc',$,'AirDiffusionPerformanceIndex','The Air Diffusion Performance Index (ADPI) is used for cooling mode conditions. If several measurements of air velocity and air temperature are made throughout the occupied zone of a space, the ADPI is the percentage of locations where measurements were taken that meet the specifications for effective draft temperature and air velocity.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#436=IFCSIMPLEPROPERTYTEMPLATE('2AT9O_D8P9rRNXZxxvA9p_',$,'Material','The primary material used to construct the air terminal.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#437=IFCSIMPLEPROPERTYTEMPLATE('1f3Qn$7Dz508g9ID2XRjAH',$,'FinishType','The type of finish for the air terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#438,$,$,$,.READWRITE.);
+#438=IFCPROPERTYENUMERATION('PEnum_AirTerminalFinishType',(IFCLABEL('ANNODIZED'),IFCLABEL('PAINTED'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#439=IFCSIMPLEPROPERTYTEMPLATE('3k$7aNP494gAcrNnminJy1',$,'FinishColor','The finish color for the air terminal.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#440=IFCSIMPLEPROPERTYTEMPLATE('3bEQtuQk9AMeCO8xtgeRcb',$,'MountingType','The way the air terminal is mounted to the ceiling, wall, etc.\X2\000A\X0\Surface type is mounted to the surface of something (e.g., wall, duct, etc.).\X2\000A\X0\Flat flush type is mounted flat and flush with a surface.\X2\000A\X0\Lay-in type is mounted in a lay-in type ceiling (e.g., a dropped ceiling grid).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#441,$,$,$,.READWRITE.);
+#441=IFCPROPERTYENUMERATION('PEnum_AirTerminalMountingType',(IFCLABEL('SURFACE'),IFCLABEL('FLATFLUSH'),IFCLABEL('LAYIN'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#442=IFCSIMPLEPROPERTYTEMPLATE('2Jeb_OHmn5ReQ31r3tiAeA',$,'CoreType','Identifies the way the core of the AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#443,$,$,$,.READWRITE.);
+#443=IFCPROPERTYENUMERATION('PEnum_AirTerminalCoreType',(IFCLABEL('SHUTTERBLADE'),IFCLABEL('CURVEDBLADE'),IFCLABEL('REMOVABLE'),IFCLABEL('REVERSIBLE'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#444=IFCSIMPLEPROPERTYTEMPLATE('1S2i6Q5_12xhR2fTkuoYqj',$,'CoreSetHorizontal','Degree of horizontal (in the X-axis of the LocalPlacement) blade set from the centerline.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#445=IFCSIMPLEPROPERTYTEMPLATE('2MkZCZJEXAfh086Gp9UA$g',$,'CoreSetVertical','Degree of vertical (in the Y-axis of the LocalPlacement) blade set from the centerline.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#446=IFCSIMPLEPROPERTYTEMPLATE('19olf3N3jDJhYWzqOXosmW',$,'HasIntegralControl','If TRUE, a self powered temperature control is included in the AirTerminal.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#447=IFCSIMPLEPROPERTYTEMPLATE('2ZHNV2Iub8JQtkh__zmI7R',$,'FlowControlType','Type of flow control element that may be included as a part of the construction of the air terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#448,$,$,$,.READWRITE.);
+#448=IFCPROPERTYENUMERATION('PEnum_AirTerminalFlowControlType',(IFCLABEL('DAMPER'),IFCLABEL('BELLOWS'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#449=IFCSIMPLEPROPERTYTEMPLATE('0_NI49sMfD0ePpkA_gH2du',$,'HasSoundAttenuator','If TRUE, the air terminal has sound attenuation.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#450=IFCSIMPLEPROPERTYTEMPLATE('1NDBDnrmLDoxHPY5jowr7c',$,'HasThermalInsulation','If TRUE, the air terminal has thermal insulation.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#451=IFCSIMPLEPROPERTYTEMPLATE('1xAjTt_Fr5qP2sbuyqECPO',$,'NeckArea','Neck area of the air terminal.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#452=IFCSIMPLEPROPERTYTEMPLATE('3UPiijZ0jA4AeMjsy_VsJu',$,'EffectiveArea','Effective discharge area of the air terminal.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#453=IFCSIMPLEPROPERTYTEMPLATE('0oCka8jYzFbBrukVC9fj8N',$,'Weight','Weight of the air terminal.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#454=IFCSIMPLEPROPERTYTEMPLATE('1Diruv889DSu8yHcA63SnP',$,'AirFlowrateVersusFlowControlElement','Air flowrate versus flow control element position at nominal pressure drop.',.P_TABLEVALUE.,'IfcVolumetricFlowRateMeasure','IfcPositiveRatioMeasure',$,$,$,$,.READWRITE.);
+#455=IFCPROPERTYSETTEMPLATE('0$$cqar_j9I9ton8UkKnvS',$,'Pset_AirTerminalTypeRectangular','Definition from IAI: Rectangular air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#456));
+#456=IFCSIMPLEPROPERTYTEMPLATE('2NxElieh18vBB$4xuNxfdZ',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#457,$,$,$,.READWRITE.);
+#457=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#458=IFCPROPERTYSETTEMPLATE('3d7q0sSm5E_OHjTKhp9F9c',$,'Pset_AirTerminalTypeRound','Definition from IAI: Round air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#459));
+#459=IFCSIMPLEPROPERTYTEMPLATE('1p0LoyP3161v$MQJimx8gX',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#460,$,$,$,.READWRITE.);
+#460=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#461=IFCPROPERTYSETTEMPLATE('180OGKUV5AXxHRfwpu0IGZ',$,'Pset_AirTerminalTypeSlot','Definition from IAI: Slot air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#462,#463,#464));
+#462=IFCSIMPLEPROPERTYTEMPLATE('3v60WYDyP8j9k5I_wH0PCp',$,'SlotWidth','Slot width.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#463=IFCSIMPLEPROPERTYTEMPLATE('21HATXIcj8Uf1Quw7MYoLR',$,'SlotLength','Slot length.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#464=IFCSIMPLEPROPERTYTEMPLATE('1DFhhamD5Ewu0$KcmQMf$7',$,'NumberOfSlots','Number of slots.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#465=IFCPROPERTYSETTEMPLATE('0RW_959IL3d8y$9Y9t7nvO',$,'Pset_AirTerminalTypeSquare','Definition from IAI: Square air terminal type attributes.\X2\000A\X0\',$,'IfcAirTerminalType',(#466));
+#466=IFCSIMPLEPROPERTYTEMPLATE('2kZSPrrxX7f9p$71cNUXkB',$,'FaceType','Identifies how the terminal face of an AirTerminal is constructed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#467,$,$,$,.READWRITE.);
+#467=IFCPROPERTYENUMERATION('PEnum_AirTerminalFaceType',(IFCLABEL('FOURWAYPATTERN'),IFCLABEL('SINGLEDEFLECTION'),IFCLABEL('DOUBLEDEFLECTION'),IFCLABEL('SIGHTPROOF'),IFCLABEL('EGGCRATE'),IFCLABEL('PERFORATED'),IFCLABEL('LOUVERED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#468=IFCPROPERTYSETTEMPLATE('2wKLP3Xr5AP8llrRQ7M918',$,'Pset_AirToAirHeatRecoveryPHist','Definition from IAI: Air to Air Heat Recovery performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#469,#470,#471,#472,#473,#474,#475,#476,#477,#478,#479));
+#469=IFCSIMPLEPROPERTYTEMPLATE('3cFsTQcTLEbxFxoa_vrdIO',$,'SensibleEffectiveness','Sensible heat transfer effectiveness, where effectiveness is defined as the ratio of heat transfer to maximum possible heat transfer.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#470=IFCSIMPLEPROPERTYTEMPLATE('1AYcPPAXPC58pqTes3hFeR',$,'TotalEffectiveness','Total heat transfer effectiveness: The ratio of heat transfer to the maximum possible heat transfer.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#471=IFCSIMPLEPROPERTYTEMPLATE('2x6aPK5XDF_v_gKB1HFoLC',$,'TemperatureEffectiveness','Temperature heat transfer effectiveness: The ratio of primary airflow temperature changes to maximum possible temperature changes.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#472=IFCSIMPLEPROPERTYTEMPLATE('3vDCY4qUn5Rf28F0k2b3vZ',$,'DefrostTemperatureEffectiveness','Temperature heat transfer effectiveness when defrosting is active.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#473=IFCSIMPLEPROPERTYTEMPLATE('2RgpegiLnEavHVl8E0cIPY',$,'HumidityEffectiveness','Humidity heat transfer effectiveness: The ratio of primary airflow absolute humidity changes to maximum possible absolute humidity changes.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#474=IFCSIMPLEPROPERTYTEMPLATE('0a8MtoqRb3ZxFd6BhuDl0J',$,'SensibleHeatTransferRate','Sensible heat transfer rate',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#475=IFCSIMPLEPROPERTYTEMPLATE('2Ia5G9NQX3yPRnm2iY4leR',$,'LatentHeatTransferRate','Latent heat transfer rate ',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#476=IFCSIMPLEPROPERTYTEMPLATE('3PDKyiVnD7PPAVqBEXOf9A',$,'TotalHeatTransferRate','Total heat transfer rate ',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#477=IFCSIMPLEPROPERTYTEMPLATE('2_Vmb9scrDcApdifr0tWTt',$,'SensibleEffectivenessTable','Sensible heat transfer effectiveness curve as a function of the primary and secondary air flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#478=IFCSIMPLEPROPERTYTEMPLATE('3tsMfQdo5FjOVEtNi$jPuS',$,'TotalEffectivenessTable','Total heat transfer effectiveness curve as a function of the primary and secondary air flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#479=IFCSIMPLEPROPERTYTEMPLATE('1wwCl$mtj5AhUXCAg7R1V6',$,'AirPressureDropCurves','Air pressure drop as function of air flow rate',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#480=IFCPROPERTYSETTEMPLATE('3QHDLtTwv81AHD$fsreUsR',$,'Pset_AirToAirHeatRecoveryTypeCommon','Definition from IAI: Air to Air Heat Recovery type common attributes.\X2\000A\X0\',$,'IfcAirToAirHeatRecoveryType',(#481,#483,#484,#485,#486,#487,#488));
+#481=IFCSIMPLEPROPERTYTEMPLATE('33nBbwwcTAoh0OQSGd$fze',$,'HeatTransferTypeEnum','Type of heat transfer between the two air streams.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#482,$,$,$,.READWRITE.);
+#482=IFCPROPERTYENUMERATION('PEnum_AirToAirHeatTransferHeatTransferType',(IFCLABEL('SENSIBLE'),IFCLABEL('LATENT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#483=IFCSIMPLEPROPERTYTEMPLATE('3N4gcvTS1AZeKoKmD5L8n1',$,'MediaMaterial','The primary media material used for heat transfer.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#484=IFCSIMPLEPROPERTYTEMPLATE('2tCTVjjkH3ywwXhzmPdMbv',$,'HasDefrost','has the heat exchanger has defrost function or not',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#485=IFCSIMPLEPROPERTYTEMPLATE('1HMK6itQv1zf0jhpTNI2rv',$,'OperationalTemperatureRange','Allowable operation ambient air temperature range',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#486=IFCSIMPLEPROPERTYTEMPLATE('2V_D9lNrDCBB9M9G3Y37d7',$,'PrimaryAirflowRateRange','possible range of primary airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#487=IFCSIMPLEPROPERTYTEMPLATE('12U2XE0d541wPweiozYwJN',$,'SecondaryAirflowRateRange','possible range of secondary airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#488=IFCSIMPLEPROPERTYTEMPLATE('1woJMJeHv329qhvlFVXiaX',$,'Weight',$,.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#489=IFCPROPERTYSETTEMPLATE('35cGFdRSXDmhFBwxgb1lVl',$,'Pset_BoilerPHistory','Definition from IAI: Boiler performance history common attributes.\X2\000A\X0\WaterQuality attribute deleted in IFC2x2 Pset Addendum: Use IfcWaterProperties instead. CombustionProductsMaximulLoad and CombustionProductsPartialLoad attributes deleted in IFC2x2 Pset Addendum: Use IfcProductsOfCombustionProperties instead.',$,'IfcPerformanceHistory',(#490,#491,#492,#493,#494,#495,#496,#497,#498));
+#490=IFCSIMPLEPROPERTYTEMPLATE('0GHTaXfnbECeg6DHEW3Mio',$,'EnergySourceConsumption','Energy consumption.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#491=IFCSIMPLEPROPERTYTEMPLATE('0EMuSbSQH5dPLl4g5fAfJo',$,'OperationalEfficiency','Operational efficiency: boiler output divided by total energy input (electrical and fuel)',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#492=IFCSIMPLEPROPERTYTEMPLATE('2vCygl82zFD8a7eXYAxmi2',$,'CombustionEfficiency','Combustion efficiency under nominal condition',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#493=IFCSIMPLEPROPERTYTEMPLATE('3BcUo4GwzEpuXxbhPPlI3t',$,'WorkingPressure','Boiler working pressure',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#494=IFCSIMPLEPROPERTYTEMPLATE('1fRkE9Rzj4AOHUwIi2rYb3',$,'CombustionTemperature','Average combustion chamber temperature.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#495=IFCSIMPLEPROPERTYTEMPLATE('0fHqaxOfH5BgFakgiDPK4y',$,'PartLoadRatio','Ratio of the real to the nominal capacity.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#496=IFCSIMPLEPROPERTYTEMPLATE('2k6MWRdpX4Rfx7YVr0bUwh',$,'Load','Boiler real load',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#497=IFCSIMPLEPROPERTYTEMPLATE('05nnqd4xLA5f0Uq1lYswZ8',$,'PrimaryEnergyConsumption','Boiler primary energy source consumption (i.e., the fuel consumed for changing the thermodynamic state of the fluid).',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#498=IFCSIMPLEPROPERTYTEMPLATE('2CZfqeOyrC78xtCCHwINRP',$,'AuxiliaryEnergyConsumption','Boiler secondary energy source consumption (i.e., the electricity consumed by electrical devices such as fans and pumps).',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#499=IFCPROPERTYSETTEMPLATE('04PlLXrMD3Qgjkr1cX5L8S',$,'Pset_BoilerTypeCommon','Definition from IAI: Boiler type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead. PrimaryEnergySource and AuxiliaryEnergySource attributes deleted in IFC2x2 Pset Addendum: Use IfcEnergyProperties, IfcFuelProperties, etc. instead.',$,'IfcBoilerType',(#500,#501,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514));
+#500=IFCSIMPLEPROPERTYTEMPLATE('230rh6_qjFufNzKqMJNMVe',$,'PressureRating','Nominal pressure rating of the boiler as rated by ASME Boiler and Pressure Vessel Code Section IV, Rules for Construction of Heating Boilers, and Section I, Rules for Construction of Power Boilers',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#501=IFCSIMPLEPROPERTYTEMPLATE('1qhGfmRmXEreox1Rp8HDvs',$,'OperatingMode','Identifies the operating mode of the boiler.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#502,$,$,$,.READWRITE.);
+#502=IFCPROPERTYENUMERATION('PEnum_BoilerOperatingMode',(IFCLABEL('FIXED'),IFCLABEL('TWOSTEP'),IFCLABEL('MODULATING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#503=IFCSIMPLEPROPERTYTEMPLATE('1Ij$X9KYTEnhlLs4wXJDo6',$,'Material','The primary material used to construct the boiler''s heat transfer vessel.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#504=IFCSIMPLEPROPERTYTEMPLATE('0ZCcraKGX0VglFB0XvI6oi',$,'HeatTransferSurfaceArea','Total heat transfer area of the vessel.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#505=IFCSIMPLEPROPERTYTEMPLATE('3MHLwNml955glIePwzOJPk',$,'NominalPartLoadRatio','Allowable part load ratio range.',.P_BOUNDEDVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#506=IFCSIMPLEPROPERTYTEMPLATE('1$y4Qq8SzER93AvI6jqk6v',$,'WaterInletTemperatureRange','Allowable water inlet temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#507=IFCSIMPLEPROPERTYTEMPLATE('3ovr_qrdvEwAfCJTvoor1Y',$,'WaterStorageCapacity','Water storage capacity.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#508=IFCSIMPLEPROPERTYTEMPLATE('0h9txSdJj37xHj4VCP0Q7P',$,'IsWaterStorageHeater','This is used to identify if the boiler has storage capacity (TRUE). If FALSE, then there is no storage capacity built into the boiler, such as an instantaneous hot water heater.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#509=IFCSIMPLEPROPERTYTEMPLATE('2_HW$MTbz1T8wGGmvg2gkc',$,'Weight','Weight of the boiler.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#510=IFCSIMPLEPROPERTYTEMPLATE('2fysIeyor6IO$r2_N1VPyl',$,'PartialLoadEfficiencyCurves','Boiler efficiency as a function of the partial load factor; E = f (partialLaodfactor).',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#511=IFCSIMPLEPROPERTYTEMPLATE('08xx9fSCrELANEnC_8B36m',$,'NominalEfficiency','The nominal efficiency of the boiler as defined by the manufacturer. For water boilers, a function of inlet versus outlet temperature. For steam boilers, a function of inlet temperature versus steam pressure.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#512=IFCSIMPLEPROPERTYTEMPLATE('1bUpYJlOPAkBLyRyevYDSp',$,'HeatOutput','Total nominal heat output as listed by the Boiler manufacturer. For water boilers, it is a function of inlet versus outlet temperature. For steam boilers, it is a function of inlet temperature versus steam pressure.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#513=IFCSIMPLEPROPERTYTEMPLATE('0XsGVPMR1D$RG_px_REreu',$,'OutletTemperatureRange','Allowable outlet temperature of either the water or the steam.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#514=IFCSIMPLEPROPERTYTEMPLATE('1lFsbDKUP568ZCcaA7fDQQ',$,'NominalEnergyConsumption','Nominal fuel consumption rate required to produce the total boiler heat output.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#515=IFCPROPERTYSETTEMPLATE('0aENstQDTDde3tAM_wjKJg',$,'Pset_BoilerTypeSteam','Definition from IAI: Steam boiler type common attributes.\X2\000A\X0\',$,'IfcBoilerType',(#516));
+#516=IFCSIMPLEPROPERTYTEMPLATE('3VNVK3JAz6vBGF0z2N27RP',$,'MaximumOutletPressure','Maximum steam outlet pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#517=IFCPROPERTYSETTEMPLATE('2p$YgIeWv12Q5HLaWnyIPj',$,'Pset_ChillerPHistory','Definition from IAI: Chiller performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#518,#519,#520,#521,#522,#523));
+#518=IFCSIMPLEPROPERTYTEMPLATE('1ISiJDiWrAme7W6X_8zCWy',$,'Capacity','The product of the ideal capacity and the overall volumetric efficiency of the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#519=IFCSIMPLEPROPERTYTEMPLATE('1chkOkVDn0exj$o1g6uqfz',$,'EnergyEfficiencyRatio','Energy efficiency ratio (EER).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#520=IFCSIMPLEPROPERTYTEMPLATE('0lJMB_olf47gK5xDCDe17Y',$,'CoefficientOfPerformance','Coefficient of performance (COP).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#521=IFCSIMPLEPROPERTYTEMPLATE('2_5cJ7KnLD7h3xEJtCi2Vo',$,'CapacityCurve','Chiller cooling capacity is a function of condensing temperature and evaporating temperature, data is in table form, Capacity = f (TempCon, TempEvp), capacity = a1+b1*Tei+c1*Tei^2+d1*Tci+e1*Tci^2+f1*Tei*Tci.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#522=IFCSIMPLEPROPERTYTEMPLATE('2bAf9Q4dX278$UX$88IjFT',$,'CoefficientOfPerformanceCurve','Chiller coefficient of performance (COP) is function of condensing temperature and evaporating temperature, data is in table form, COP= f (TempCon, TempEvp), COP = a2+b2*Tei+c2*Tei^2+d2*Tci+e2*Tci^2+f2*Tei*Tci',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#523=IFCSIMPLEPROPERTYTEMPLATE('0up916GpnA6OpDMn7Br$6A',$,'FullLoadRatioCurve','Ratio of actual power to full load power as a quadratic function of part load, at certain condensing and evaporating temperature, FracFullLoadPower = f ( PartLoadRatio).',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#524=IFCPROPERTYSETTEMPLATE('2MaQh6Pf92svRp3_RoSS0S',$,'Pset_ChillerTypeCommon','Definition from IAI: Chiller type common attributes.\X2\000A\X0\',$,'IfcChillerType',(#525,#526,#527,#528,#529,#530));
+#525=IFCSIMPLEPROPERTYTEMPLATE('0qKoaVSxr7Xe5$m3OE8EK0',$,'NominalCapacity','Nominal cooling capacity of chiller at standardized conditions per ARI Standards 550-92, Centrifugal and Rotary Screw Water-Chilling Packages, and ARI Standards 590-92, Positive Displacement Compressor.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#526=IFCSIMPLEPROPERTYTEMPLATE('0fT$9PD057sRKF53a3XkI_',$,'NominalEfficiency','Nominal chiller efficiency under nominal conditions.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#527=IFCSIMPLEPROPERTYTEMPLATE('3HgcArX7XDy9VhpOhNQ0Es',$,'NominalCondensingTemperature','Chiller condensing temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#528=IFCSIMPLEPROPERTYTEMPLATE('3AbuEjE599qxeFl7Hpb$Su',$,'NominalEvaporatingTemperature','Chiller evaporating temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#529=IFCSIMPLEPROPERTYTEMPLATE('3vAldFR0fC2Qz2c2BKDfGB',$,'NominalHeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#530=IFCSIMPLEPROPERTYTEMPLATE('33OuPTUKj0Zh$IIC8Vb$E6',$,'NominalPowerConsumption','Nominal total power consumption.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#531=IFCPROPERTYSETTEMPLATE('14BsOhpxrCy9g$UGeYbcgW',$,'Pset_CoilPHistory','Definition from IAI: Coil performance history common attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#532,#533,#534,#535));
+#532=IFCSIMPLEPROPERTYTEMPLATE('0dR_pF8IP6wQGb69hgBuBo',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#533=IFCSIMPLEPROPERTYTEMPLATE('3P7RSuR$b21RUx4AXX_3la',$,'AirPressureDropCurve','Air pressure drop curve, pressure drop \X2\2013\X0\ flow rate curve, AirPressureDrop = f (AirflowRate).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#534=IFCSIMPLEPROPERTYTEMPLATE('3EyDOxqivBFBkTs2CnLqqj',$,'SoundCurve','Regenerated sound versus air-flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#535=IFCSIMPLEPROPERTYTEMPLATE('2D1G_dep15Q802zoStU_zJ',$,'FaceVelocity','Air velocity through the coil.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCLINEARVELOCITYMEASURE',$,$,$,$,.READWRITE.);
+#536=IFCPROPERTYSETTEMPLATE('1Q75P_Tx50LxD1TzK1uDaa',$,'Pset_CoilTypeCommon','Definition from IAI: Coil type common attributes.\X2\000A\X0\',$,'IfcCoilType',(#537,#538,#539,#540,#541));
+#537=IFCSIMPLEPROPERTYTEMPLATE('30vCvbRMH3A8GAlsQHurzv',$,'OperationalTemperatureRange','Allowable operational air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#538=IFCSIMPLEPROPERTYTEMPLATE('0mSfumb8zEdeyhgB7NBbU7',$,'AirflowRateRange','Possible range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#539=IFCSIMPLEPROPERTYTEMPLATE('2ppvy6YmLF3QPauHyFu3BO',$,'NominalSensibleCapacity','Nominal sensible capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#540=IFCSIMPLEPROPERTYTEMPLATE('3idBba4b9CJhSIHCr$WrT9',$,'NominalLatentCapacity','Nominal latent capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#541=IFCSIMPLEPROPERTYTEMPLATE('1SQDe2BNH2LAksVmyZQGoL',$,'NominalUA','Nominal UA value.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#542=IFCPROPERTYSETTEMPLATE('2a0mSoior1RwD2QsKy5_T0',$,'Pset_CoilTypeHydronic','Definition from IAI: Hydronic coil type attributes.\X2\000A\X0\',$,'IfcCoilType',(#543,#544,#546,#548,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559));
+#543=IFCSIMPLEPROPERTYTEMPLATE('3pCtyfYxH8uPqYAPrPAuJu',$,'FluidPressureRange','Allowable water working pressure range inside the tube',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#544=IFCSIMPLEPROPERTYTEMPLATE('1POv9ZdUX75f95a5iuZbQJ',$,'CoilCoolant','The fluid used for heating or cooling used by the hydronic coil.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#545,$,$,$,.READWRITE.);
+#545=IFCPROPERTYENUMERATION('PEnum_CoilCoolant',(IFCLABEL('WATER'),IFCLABEL('BRINE'),IFCLABEL('GLYCOL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#546=IFCSIMPLEPROPERTYTEMPLATE('15AllaTxTAnu0wp7wX7NKn',$,'CoilConnectionDirection','Coil connection direction (facing into the air stream).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#547,$,$,$,.READWRITE.);
+#547=IFCPROPERTYENUMERATION('PEnum_CoilConnectionDirection',(IFCLABEL('LEFT'),IFCLABEL('RIGHT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#548=IFCSIMPLEPROPERTYTEMPLATE('0z6SeTv$17oBrdkg7kfHjW',$,'CoilFluidArrangement','Fluid flow arrangement of the coil.\X2\000A\X0\CrossCounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\CrossParallelFlow: Air and water flow enter in same directions',.P_ENUMERATEDVALUE.,'IfcLabel',$,#549,$,$,$,.READWRITE.);
+#549=IFCPROPERTYENUMERATION('PEnum_CoilFluidArrangement',(IFCLABEL('CROSSFLOW'),IFCLABEL('CROSSCOUNTERFLOW'),IFCLABEL('CROSSPARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#550=IFCSIMPLEPROPERTYTEMPLATE('2TptWpizL9keAEc0K1dAX9',$,'CoilFaceArea','Coil face area in the direction against air the flow.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#551=IFCSIMPLEPROPERTYTEMPLATE('3hnNwLQkD9muYEeM3enlmH',$,'HeatExchangeSurfaceArea','Heat exchange surface area associated with U-value.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#552=IFCSIMPLEPROPERTYTEMPLATE('3hrXv8gkv1WAmeeq0K_mlU',$,'PrimarySurfaceArea','Primary heat transfer surface area of the tubes and headers.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#553=IFCSIMPLEPROPERTYTEMPLATE('136jrWDaf6GxqB6w2PiHJr',$,'SecondarySurfaceArea','Secondary heat transfer surface area created by fins.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#554=IFCSIMPLEPROPERTYTEMPLATE('0UCHfPvAv1xP3V1ZiQbi7A',$,'Fluid','The properties of the hydronic fluid used for heat transfer within the coil tubes.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#555=IFCSIMPLEPROPERTYTEMPLATE('2wqZpy4LP55wTIHMsURag2',$,'TotalUACurves','Total UA curves, UA - air and water velocities, UA = [(C1 * AirFlowRate^0.8)^-1 + (C2 * WaterFlowRate^0.8)^-1]^-1.',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'UA = [(C1 * AirFlowRate^0.8)^-1 + (C2 * WaterFlowRate^0.8)^-1]^-1',.READWRITE.);
+#556=IFCSIMPLEPROPERTYTEMPLATE('3JId43DNf1DBPLYhkeYW9L',$,'WaterPressureDropCurve','Water pressure drop curve, pressure drop \X2\2013\X0\ flow rate curve, WaterPressureDrop = f(WaterflowRate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'WaterPressureDrop = f(WaterflowRate).',.READWRITE.);
+#557=IFCSIMPLEPROPERTYTEMPLATE('0hUesYp5LD3wxmHHGsyF3g',$,'BypassFactor','Fraction of air that is bypassed by the coil (0-1).',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#558=IFCSIMPLEPROPERTYTEMPLATE('0raJ8lDGr8SPvsGTe5t9kd',$,'SensibleHeatRatio','Air-side sensible heat ratio, or fraction of sensible heat transfer to the total heat transfer.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#559=IFCSIMPLEPROPERTYTEMPLATE('2Iwr9bkR57re9a1_h4X3hE',$,'WetCoilFraction','Fraction of coil surface area that is wet (0-1).',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#560=IFCPROPERTYSETTEMPLATE('24NFwjcmTA3uud4h27Yz4G',$,'Pset_CompressorPHistory','Definition from IAI: Compressor performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574));
+#561=IFCSIMPLEPROPERTYTEMPLATE('0Qy3_E7Xv7U8pSXyObZmG2',$,'CompressorCapacity','The product of the ideal capacity and the overall volumetric efficiency of the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#562=IFCSIMPLEPROPERTYTEMPLATE('3Ksy$Ytor3HRje9KI0dUIa',$,'EnergyEfficiencyRatio','Energy efficiency ratio (EER).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#563=IFCSIMPLEPROPERTYTEMPLATE('0vogKk6db30An17xBGzQIY',$,'CoefficientOfPerformance','Coefficient of performance (COP).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#564=IFCSIMPLEPROPERTYTEMPLATE('39yj_hzfD4CQdAfLuVzH3l',$,'VolumetricEfficiency','Ratio of the actual volume of gas entering the compressor to the theoretical displacement of the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#565=IFCSIMPLEPROPERTYTEMPLATE('1r6Hi056b6e8ZJjC0m_8hd',$,'CompressionEfficiency','Ratio of the work required for isentropic compression of the gas to the work delivered to the gas within the compression volume (as obtained by measurement).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#566=IFCSIMPLEPROPERTYTEMPLATE('2PXVKycO5AcwMOBngZpW0t',$,'MechanicalEfficiency','Ratio of the work (as measured) delivered to the gas to the work input to the compressor shaft.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#567=IFCSIMPLEPROPERTYTEMPLATE('0akBSuwRrBuwGB7hgDPihF',$,'IsentropicEfficiency','Ratio of the work required for isentropic compression of the gas to work input to the compressor shaft.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#568=IFCSIMPLEPROPERTYTEMPLATE('2jmqRvVdr5Ux$RzcVl5YYs',$,'CompressorTotalEfficiency','Ratio of the thermal cooling capacity to electrical input.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#569=IFCSIMPLEPROPERTYTEMPLATE('03JtTBXffBjR$Crtyx4FP8',$,'ShaftPower','The actual shaft power input to the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#570=IFCSIMPLEPROPERTYTEMPLATE('2W$BN80RDFS8sEyX8UXiNj',$,'InputPower','Input power to the compressor motor.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#571=IFCSIMPLEPROPERTYTEMPLATE('2mMnDJC0fArRVgKXQNp6Wh',$,'LubricantPumpHeatGain','Lubricant pump heat gain.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#572=IFCSIMPLEPROPERTYTEMPLATE('0hRsl2p5nA4BywtUnsZuD4',$,'FrictionHeatGain','Friction heat gain.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#573=IFCSIMPLEPROPERTYTEMPLATE('0gncbTIg95MxkXqn5LjgIv',$,'CompressorTotalHeatGain','Compressor total heat gain.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#574=IFCSIMPLEPROPERTYTEMPLATE('1uxTZg5qr4WeobOzDRjxg$',$,'FullLoadRatioCurve','Ratio of actual power to full load power as a quadratic function of part load, at certain condensing and evaporating temperature, FracFullLoadPower = f ( PartLoadRatio).',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#575=IFCPROPERTYSETTEMPLATE('1anCtvxXvEGBrJ7XCJ7vUy',$,'Pset_CompressorTypeCommon','Definition from IAI: Compressor type common attributes.\X2\000A\X0\',$,'IfcCompressorType',(#576,#578,#580,#581,#582,#583,#584,#585,#586,#587));
+#576=IFCSIMPLEPROPERTYTEMPLATE('3L4hEQFpnEffhH3LYs4_2L',$,'PowerSource','Type of power driving the compressor',.P_ENUMERATEDVALUE.,'IfcLabel',$,#577,$,$,$,.READWRITE.);
+#577=IFCPROPERTYENUMERATION('PEnum_CompressorTypePowerSource',(IFCLABEL('MOTORDRIVEN'),IFCLABEL('ENGINEDRIVEN'),IFCLABEL('GASTURBINE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#578=IFCSIMPLEPROPERTYTEMPLATE('3KQ0UuVH9CoAHtPdHOz$Ve',$,'RefrigerantClass','Refrigerant class used by the compressor.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#579,$,$,$,.READWRITE.);
+#579=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#580=IFCSIMPLEPROPERTYTEMPLATE('1FWMinVV52ghWUB_lSOZxZ',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#581=IFCSIMPLEPROPERTYTEMPLATE('0EyuAWlqfEOfeYrVlAhaCc',$,'MinimumPartLoadRatio','Minimum part load ratio as a fraction of nominal capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#582=IFCSIMPLEPROPERTYTEMPLATE('2wbkzhey1C5veuCYEpQVxJ',$,'MaximumPartLoadRatio','Maximum part load ratio as a fraction of nominal capacity.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#583=IFCSIMPLEPROPERTYTEMPLATE('0O9HSyj6j2SglpyDsKkVzN',$,'CompressorSpeed','Compressor speed',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#584=IFCSIMPLEPROPERTYTEMPLATE('3qgF9XrgD3tvkf2U7ctVel',$,'NominalCapacity','Compressor nameplate capacity.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#585=IFCSIMPLEPROPERTYTEMPLATE('2ALvHv60H859Q03AIbNdcK',$,'IdealCapacity','Compressor capacity under ideal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#586=IFCSIMPLEPROPERTYTEMPLATE('0mHwAUYoH4vgrPSBhcFort',$,'IdealShaftPower','Compressor shaft power under ideal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#587=IFCSIMPLEPROPERTYTEMPLATE('2XRM4Zz1f43Aq1pt4Qt9qC',$,'HasHotGasBypass','Whether or not hot gas bypass is provided for the compressor. TRUE = Yes, FALSE = No.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#588=IFCPROPERTYSETTEMPLATE('1mgzegfcr3kg4H$N1JhZyW',$,'Pset_CondenserPHistory','Definition from IAI: Condenser performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599));
+#589=IFCSIMPLEPROPERTYTEMPLATE('3nqkpDkWf2JBYftoygznfd',$,'HeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#590=IFCSIMPLEPROPERTYTEMPLATE('1a$v4pbmnDnxSv4tCEhv9u',$,'ExteriorHeatTransferCoefficient','Exterior heat transfer coefficient associated with exterior surface area.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMALTRANSMITTANCEMEASURE',$,$,$,$,.READWRITE.);
+#591=IFCSIMPLEPROPERTYTEMPLATE('1Oua0Z_cvDrfnSaNnB$ATz',$,'InteriorHeatTransferCoefficient','Interior heat transfer coefficient associated with interior surface area.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMALTRANSMITTANCEMEASURE',$,$,$,$,.READWRITE.);
+#592=IFCSIMPLEPROPERTYTEMPLATE('2nqtY4Y$zElg0YTpq74gAn',$,'RefrigerantFoulingResistance','Fouling resistance on the refrigerant side.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#593=IFCSIMPLEPROPERTYTEMPLATE('3YSWgQUnf6hfwMS37eJJRu',$,'CondensingTemperature','Refrigerant condensing temperature.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#594=IFCSIMPLEPROPERTYTEMPLATE('31JD64UVH8oPeJzmIdgett',$,'LogarithmicMeanTemperatureDifference','Logarithmic mean temperature difference between refrigerant and water or air.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#595=IFCSIMPLEPROPERTYTEMPLATE('1O7buWCHDDEgCD81e4nlZl',$,'UAcurves','UV = f (VExterior, VInterior), UV as a function of interior and exterior fluid flow velocity at the entrance.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#596=IFCSIMPLEPROPERTYTEMPLATE('0jEvvIEy94AhjU085QBzpG',$,'CompressorCondenserHeatGain','Heat gain between condenser inlet to compressor outlet.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#597=IFCSIMPLEPROPERTYTEMPLATE('1WG00oE3bCJvgFV9Jg1Fut',$,'CompressorCondenserPressureDrop','Pressure drop between condenser inlet and compressor outlet.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#598=IFCSIMPLEPROPERTYTEMPLATE('2_CkltqcT1rvxDV4qTc6PI',$,'CondenserMeanVoidFraction','Mean void fraction in condenser.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#599=IFCSIMPLEPROPERTYTEMPLATE('1yIRbuzwX5MAEtyjN$8E5t',$,'WaterFoulingResistance','Fouling resistance on water/air side.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#600=IFCPROPERTYSETTEMPLATE('12KmXlq2HDyB725JIgZjry',$,'Pset_CondenserTypeCommon','Definition from IAI: Condenser type common attributes.\X2\000A\X0\',$,'IfcCondenserType',(#601,#603,#604,#605,#606,#607,#608,#609));
+#601=IFCSIMPLEPROPERTYTEMPLATE('2stHNKe7n6SxIJfnaAtgoy',$,'RefrigerantClass','Refrigerant class used by the condenser.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#602,$,$,$,.READWRITE.);
+#602=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#603=IFCSIMPLEPROPERTYTEMPLATE('1W9p$nWUH5oe0ods0LAcFq',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#604=IFCSIMPLEPROPERTYTEMPLATE('3ewiTEUFvDfAtK_f8g$85h',$,'ExternalSurfaceArea','External surface area (both primary and secondary area).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#605=IFCSIMPLEPROPERTYTEMPLATE('1NImL$JGH5a9lFxXCIPPgl',$,'InternalSurfaceArea','Internal surface area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#606=IFCSIMPLEPROPERTYTEMPLATE('0mSMtg9mDAbQIJdkToz3xE',$,'InternalRefrigerantVolume','Internal volume of condenser (refrigerant side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#607=IFCSIMPLEPROPERTYTEMPLATE('1WKeNc0kz5FRm6e3KK1H2t',$,'InternalWaterVolume','Internal volume of condenser (water side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#608=IFCSIMPLEPROPERTYTEMPLATE('2p03PQWi97IvZqpEFU8LQD',$,'NominalHeatTransferArea','Nominal heat transfer surface area associated with nominal overall heat transfer coefficient.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#609=IFCSIMPLEPROPERTYTEMPLATE('2xAeQ6mtH5ng2D410c167L',$,'NominalHeatTransferCoefficient','Nominal overall heat transfer coefficient associated with nominal heat transfer area.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#610=IFCPROPERTYSETTEMPLATE('1joRv3VaTExhCv03p96Nvk',$,'Pset_CooledBeamPHistory','Definition from IAI: Common performance history attributes for a cooled beam.\X2\000A\X0\',$,'IfcPerformanceHistory',(#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623));
+#611=IFCSIMPLEPROPERTYTEMPLATE('2H$flA8rj4yvIxg3x1Lfsd',$,'TotalCoolingCapacity','Total cooling capacity. This includes cooling capacity of beam and cooling capacity of supply air',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#612=IFCSIMPLEPROPERTYTEMPLATE('0RF$q3MbP0CRrZCObcywh$',$,'TotalHeatingCapacity','Total heating capacity. This includes heating capacity of beam and heating capacity of supply air',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#613=IFCSIMPLEPROPERTYTEMPLATE('2QQYHbS4nBvvN8oUV3KrYk',$,'BeamCoolingCapacity','Cooling capacity of beam. This excludes cooling capacity of supply air',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#614=IFCSIMPLEPROPERTYTEMPLATE('2Y9dmxdDf3rfra81poLbia',$,'BeamHeatingCapacity','Heating capacity of beam. This excludes heating capacity of supply air',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#615=IFCSIMPLEPROPERTYTEMPLATE('25crDtjhjEYA7dwXnamucD',$,'CoolingWaterFlowRate','Water flow rate for cooling',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#616=IFCSIMPLEPROPERTYTEMPLATE('38UXJXV059EOqoXsL98O_o',$,'HeatingWaterFlowRate','Water flow rate for heating',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#617=IFCSIMPLEPROPERTYTEMPLATE('2ynb8HwJ96DAMgTAox4xTE',$,'CorrectionFactorForCooling','Correction factor k as a function of water flow rate (used to calculate cooling capacity)',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#618=IFCSIMPLEPROPERTYTEMPLATE('1X25UNIO1F4h97H0o2hEUN',$,'CorrectionFactorForHeating','Correction factor k as a function of water flow rate (used to calculate heating capacity)',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#619=IFCSIMPLEPROPERTYTEMPLATE('0Ny$YO8E9FNvoCzIm9qzyU',$,'WaterPressureDropCurves','Water pressure drop as function of water flow rate',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#620=IFCSIMPLEPROPERTYTEMPLATE('12y8p$OA17kQbQlAnYQlO5',$,'SupplyWaterTemperatureCooling','Supply water temperature in cooling mode',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#621=IFCSIMPLEPROPERTYTEMPLATE('2mV08dhrj7$BVptfXb31W2',$,'ReturnWaterTemperatureCooling','Return water temperature in cooling mode',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#622=IFCSIMPLEPROPERTYTEMPLATE('3dlZ1csTv3mRUM0ohDr8lX',$,'SupplyWaterTemperatureHeating','Supply water temperature in heating mode',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#623=IFCSIMPLEPROPERTYTEMPLATE('0Mv_mKxaD5fedndr75x0I6',$,'ReturnWaterTemperatureHeating','Return water temperature in heating mode',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#624=IFCPROPERTYSETTEMPLATE('1ggYGKGQP55vcmLtKIG64H',$,'Pset_CooledBeamPHistoryActive','Definition from IAI: Performance history attributes for an active cooled beam.\X2\000A\X0\',$,'IfcPerformanceHistory',(#625,#626,#627));
+#625=IFCSIMPLEPROPERTYTEMPLATE('3I29$bAff2RRNsoBhOlT$Z',$,'AirFlowRate','Air flow rate',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#626=IFCSIMPLEPROPERTYTEMPLATE('0rVEeAld903QtOg0UDw1c$',$,'Throw','Distance cooled beam throws the air',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOSITIVELENGTHMEASURE',$,$,$,$,.READWRITE.);
+#627=IFCSIMPLEPROPERTYTEMPLATE('0ylu8KwZfAmwP8wj7PrXYq',$,'AirPressureDropCurves','Air pressure drop as function of air flow rate',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#628=IFCPROPERTYSETTEMPLATE('2klEhr9eP7RwUUw76O8oC0',$,'Pset_CooledBeamTypeActive','Definition from IAI: Active (ventilated) cooled beam common attributes.\X2\000A\X0\',$,'IfcCooledBeamType',(#629,#631,#632,#634));
+#629=IFCSIMPLEPROPERTYTEMPLATE('2ZvIpZT9r3GgEGD70W5qu6',$,'AirFlowConfiguration','Air flow configuration type of cooled beam',.P_ENUMERATEDVALUE.,'IfcLabel',$,#630,$,$,$,.READWRITE.);
+#630=IFCPROPERTYENUMERATION('PEnum_CooledBeamActiveAirFlowConfigurationType',(IFCLABEL('BIDIRECTIONAL'),IFCLABEL('UNIDIRECTIONALRIGHT'),IFCLABEL('UNIDIRECTIONALLEFT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#631=IFCSIMPLEPROPERTYTEMPLATE('0ZQJRmykDBVQWlMWkhZoKe',$,'AirflowRateRange','Possible range of airflow that can be delivered ',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#632=IFCSIMPLEPROPERTYTEMPLATE('3nymMosOP3_fafSosQUuWf',$,'SupplyAirConnectionType','The manner in which the pipe connection is made to the cooled beam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#633,$,$,$,.READWRITE.);
+#633=IFCPROPERTYENUMERATION('PEnum_CooledBeamSupplyAirConnectionType',(IFCLABEL('STRAIGHT'),IFCLABEL('RIGHT'),IFCLABEL('LEFT'),IFCLABEL('TOP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#634=IFCSIMPLEPROPERTYTEMPLATE('20BJrrFD5BNw1REZEXtjbW',$,'ConnectionSize','Duct connection diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#635=IFCPROPERTYSETTEMPLATE('0i0L$0oXH5mBeEb5BTUFmD',$,'Pset_CooledBeamTypeCommon','Definition from IAI: Cooled beam common attributes.\X2\000A\X0\SoundLevel and SoundAttenuation attributes deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcCooledBeamType',(#636,#637,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#654,#656,#657,#658,#659,#660));
+#636=IFCSIMPLEPROPERTYTEMPLATE('1sDl8PxzT67fxD7jgP3$k$',$,'IsFreeHanging','Is it free hanging type (not mounted in a false ceiling)?',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#637=IFCSIMPLEPROPERTYTEMPLATE('0NeLmWJ4P7zv6$Ls$IeiPR',$,'WaterFlowControlSystemType','Factory fitted waterflow control system',.P_ENUMERATEDVALUE.,'IfcLabel',$,#638,$,$,$,.READWRITE.);
+#638=IFCPROPERTYENUMERATION('PEnum_CooledBeamWaterFlowControlSystemType',(IFCLABEL('NONE'),IFCLABEL('ONOFFVALVE'),IFCLABEL('2WAYVALVE'),IFCLABEL('3WAYVALVE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#639=IFCSIMPLEPROPERTYTEMPLATE('2tH2c7u_5FA89eM0QCbhAI',$,'WaterPressureRange','Allowable water circuit working pressure range.',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#640=IFCSIMPLEPROPERTYTEMPLATE('1zrOiDVGr1bu_oF1vIdVzt',$,'Material','Primary construction material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#641=IFCSIMPLEPROPERTYTEMPLATE('2SPhbTdYr2bBjMhqi0ltd0',$,'NominalCoolingCapacity','Nominal cooling capacity',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#642=IFCSIMPLEPROPERTYTEMPLATE('1BlWRnoyHAYg17RwD8hZVe',$,'NominalSurroundingTemperatureCooling','Nominal surrounding temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#643=IFCSIMPLEPROPERTYTEMPLATE('3SQ2kaXfv4tuqswuO_Vzbf',$,'NominalSurroundingHumidityCooling','Nominal surrounding humidity (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#644=IFCSIMPLEPROPERTYTEMPLATE('1QtIgf3Bz7NfAqHXzR1puk',$,'NominalSupplyWaterTemperatureCooling','Nominal supply water temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#645=IFCSIMPLEPROPERTYTEMPLATE('2rmzlJkF9CtBB8r0A6hOMO',$,'NominalReturnWaterTemperatureCooling','Nominal return water temperature (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#646=IFCSIMPLEPROPERTYTEMPLATE('0PkhzQRB15jeExJAVrAlQX',$,'NominalWaterFlowCooling','Nominal water flow (refers to nominal cooling capacity)',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#647=IFCSIMPLEPROPERTYTEMPLATE('2U60qQmKLBm9U6vU65NrvA',$,'NominalHeatingCapacity','Nominal heating capacity',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#648=IFCSIMPLEPROPERTYTEMPLATE('2jcFxdm9TAW96SADcIfRnI',$,'NominalSurroundingTemperatureHeating','Nominal surrounding temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#649=IFCSIMPLEPROPERTYTEMPLATE('0bMOHxCoP14AdrcwHm3w4G',$,'NominalSupplyWaterTemperatureHeating','Nominal supply water temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#650=IFCSIMPLEPROPERTYTEMPLATE('1E7y07LPz69via79rEp4FR',$,'NominalReturnWaterTemperatureHeating','Nominal return water temperature (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#651=IFCSIMPLEPROPERTYTEMPLATE('3clM811cb8DOT93DxUWkBi',$,'NominalWaterFlowHeating','Nominal water flow (refers to nominal heating capacity)',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#652=IFCSIMPLEPROPERTYTEMPLATE('1o529laxf6ihmmdw2WHRhq',$,'IntegratedLightingType','Integrated lighting in cooled beam',.P_ENUMERATEDVALUE.,'IfcLabel',$,#653,$,$,$,.READWRITE.);
+#653=IFCPROPERTYENUMERATION('PEnum_CooledBeamIntegratedLightingType',(IFCLABEL('NONE'),IFCLABEL('DIRECT'),IFCLABEL('INDIRECT'),IFCLABEL('DIRECTANDINDIRECT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
+#654=IFCSIMPLEPROPERTYTEMPLATE('0xBzsOxsj8QPSxQF4Egr9v',$,'PipeConnectionEnum','The manner in which the pipe connection is made to the cooled beam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#655,$,$,$,.READWRITE.);
+#655=IFCPROPERTYENUMERATION('PEnum_CooledBeamPipeConnection',(IFCLABEL('STRAIGHT'),IFCLABEL('RIGHT'),IFCLABEL('LEFT'),IFCLABEL('TOP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#656=IFCSIMPLEPROPERTYTEMPLATE('2OOSOVwWn3HO0YxXKDxD4K',$,'FinishColor','Finish color for cooled beam',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#657=IFCSIMPLEPROPERTYTEMPLATE('0d2U4PFTT5LOCQGiMi9MyM',$,'Weight','Weight of cooled beam',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#658=IFCSIMPLEPROPERTYTEMPLATE('16FZtiDY1AIeLxQ88K8YwC',$,'CoilLength','Length of coil',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#659=IFCSIMPLEPROPERTYTEMPLATE('1XVKX8Jv97Mx98Aso8GH7f',$,'CoilWidth','Width of coil',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#660=IFCSIMPLEPROPERTYTEMPLATE('11m$TelPr83ARTOBuNpjgm',$,'ConnectionSize','Pipe connection diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#661=IFCPROPERTYSETTEMPLATE('1tt4BInx1ERO_o8YAWbaFI',$,'Pset_CoolingTowerPHistory','Definition from IAI: Cooling tower performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#662,#663,#664,#665,#666));
+#662=IFCSIMPLEPROPERTYTEMPLATE('0aTtarqCv6F8ECnGiKmTnV',$,'Capacity','Cooling tower capacity in terms of heat transfer rate of the cooling tower between air stream and water stream.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#663=IFCSIMPLEPROPERTYTEMPLATE('2h2znE3uz0ZBGwUg$tLnRY',$,'HeatTransferCoefficient','Heat transfer coefficient-area product.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#664=IFCSIMPLEPROPERTYTEMPLATE('2R$vGhkyH6K98HBdm$5K$2',$,'SumpHeaterPower','Electrical heat power of sump heater.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#665=IFCSIMPLEPROPERTYTEMPLATE('2A_iNPdPrDR9jox6F3zyzD',$,'UACurve','UA value as a function of fan speed at certain water flow rate, UA = f ( fan speed).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#666=IFCSIMPLEPROPERTYTEMPLATE('2ed7CPH4fD7hjnW5MdxkcK',$,'Performance','Water temperature change as a function of wet-bulb temperature, water entering temperature, water flow rate, air flow rate, Tdiff = f ( Twet-bulb, Twater,in, mwater, mair).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#667=IFCPROPERTYSETTEMPLATE('1z6T3fRDH9Cguk23smM8rj',$,'Pset_CoolingTowerTypeCommon','Definition from IAI: Cooling tower type common attributes.\X2\000A\X0\WaterRequirement attribute unit type modified in IFC2x2 Pset Addendum.',$,'IfcCoolingTowerType',(#668,#669,#671,#673,#675,#677,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688));
+#668=IFCSIMPLEPROPERTYTEMPLATE('0wAeY4SOrDveyuYsDMHrSL',$,'NominalCapacity','Nominal cooling tower capacity in terms of heat transfer rate of the cooling tower between air stream and water stream at nominal conditions.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#669=IFCSIMPLEPROPERTYTEMPLATE('1GGMohL7bCrx9jpMT6sl1p',$,'CircuitType','OpenCircuit: Exposes water directly to the cooling atmosphere.\X2\000A\X0\CloseCircuit: The fluid is separated from the atmosphere by a heat exchanger.\X2\000A\X0\Wet: The air stream or the heat exchange surface is evaporatively cooled.\X2\000A\X0\Dry: No evaporation into the air stream.\X2\000A\X0\DryWet: A combination of a dry tower and a wet tower.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#670,$,$,$,.READWRITE.);
+#670=IFCPROPERTYENUMERATION('PEnum_CoolingTowerCircuitType',(IFCLABEL('OPENCIRCUIT'),IFCLABEL('CLOSEDCIRCUITWET'),IFCLABEL('CLOSEDCIRCUITDRY'),IFCLABEL('CLOSEDCIRCUITDRYWET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#671=IFCSIMPLEPROPERTYTEMPLATE('0aV280z9v6A8r1wR0RWGH2',$,'FlowArrangement','CounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\ParallelFlow: air and water flow enter in same directions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#672,$,$,$,.READWRITE.);
+#672=IFCPROPERTYENUMERATION('PEnum_CoolingTowerFlowArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#673=IFCSIMPLEPROPERTYTEMPLATE('3_YyyiHdz8E9VPG5ogcq3E',$,'SprayType','SprayFilled: Water is sprayed into airflow.\X2\000A\X0\SplashTypeFill: water cascades over successive rows of splash bars.\X2\000A\X0\FilmTypeFill: water flows in a thin layer over closely spaced sheets.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#674,$,$,$,.READWRITE.);
+#674=IFCPROPERTYENUMERATION('PEnum_CoolingTowerSprayType',(IFCLABEL('SPRAYFILLED'),IFCLABEL('SPLASHTYPEFILL'),IFCLABEL('FILMTYPEFILL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#675=IFCSIMPLEPROPERTYTEMPLATE('1U4yJ6f391AhVgffTUWwGH',$,'CapacityControl','FanCycling: Fan is cycled on and off to control duty.\X2\000A\X0\TwoSpeedFan: Fan is switched between low and high speed to control duty.\X2\000A\X0\VariableSpeedFan: Fan speed is varied to control duty.\X2\000A\X0\DampersControl: Dampers modulate the air flow to control duty.\X2\000A\X0\BypassValveControl: Bypass valve modulates the water flow to control duty.\X2\000A\X0\MultipleSeriesPumps: Turn on/off multiple series pump to control duty.\X2\000A\X0\TwoSpeedPump: Switch between high/low pump speed to control duty.\X2\000A\X0\VariableSpeedPump: vary pump speed to control duty ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#676,$,$,$,.READWRITE.);
+#676=IFCPROPERTYENUMERATION('PEnum_CoolingTowerCapacityControl',(IFCLABEL('FANCYCLING'),IFCLABEL('TWOSPEEDFAN'),IFCLABEL('VARIABLESPEEDFAN'),IFCLABEL('DAMPERSCONTROL'),IFCLABEL('BYPASSVALVECONTROL'),IFCLABEL('MULTIPLESERIESPUMPS'),IFCLABEL('TWOSPEEDPUMP'),IFCLABEL('VARIABLESPEEDPUMP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#677=IFCSIMPLEPROPERTYTEMPLATE('3fimg5T_n3GOjZTQx0ktrH',$,'ControlStrategy','FixedExitingWaterTemp: The capacity is controlled to maintain a fixed exiting water temperature.\X2\000A\X0\WetBulbTempReset: The set-point is reset based on the wet-bulb temperature.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#678,$,$,$,.READWRITE.);
+#678=IFCPROPERTYENUMERATION('PEnum_CoolingTowerControlStrategy',(IFCLABEL('FIXEDEXITINGWATERTEMP'),IFCLABEL('WETBULBTEMPRESET'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#679=IFCSIMPLEPROPERTYTEMPLATE('2g3lujCjXFnP4chAE67yNk',$,'NumberOfCells','Number of cells in one cooling tower unit.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#680=IFCSIMPLEPROPERTYTEMPLATE('0Dh4jqxOzBqB1emtdk1_uw',$,'BasinReserveVolume','Volume between operating and overflow levels in cooling tower basin.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#681=IFCSIMPLEPROPERTYTEMPLATE('0vz3p16MP7$fHGruKdfiM4',$,'LiftElevationDifference','Elevation difference between cooling tower sump and the top of the tower.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#682=IFCSIMPLEPROPERTYTEMPLATE('396pYblZ5E99rE_JDLRV5C',$,'WaterRequirement','Make-up water requirements.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#683=IFCSIMPLEPROPERTYTEMPLATE('3pAtktrgH5cQSVPigVxIJZ',$,'OperationTemperatureRange','Allowable operation ambient air temperature range',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#684=IFCSIMPLEPROPERTYTEMPLATE('0Awd$kCsL3u8uEfqvViCrC',$,'CasingMaterial','Casing Material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#685=IFCSIMPLEPROPERTYTEMPLATE('38DtkJ6Wr9Og0XRk$NfkN1',$,'FillMaterial','Fill Material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#686=IFCSIMPLEPROPERTYTEMPLATE('18g4tEWWPDQeVoKc4pQlna',$,'Weight','Weight of cooling tower.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#687=IFCSIMPLEPROPERTYTEMPLATE('2kavt4TnLCauUEI80oDYqe',$,'AmbientDesignDryBulbTemperature','Ambient design dry bulb temperature used for selecting the cooling tower. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#688=IFCSIMPLEPROPERTYTEMPLATE('2759v34qzCKPbCN1I0ymgd',$,'AmbientDesignWetBulbTemperature','Ambient design wet bulb temperature used for selecting the cooling tower. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#689=IFCPROPERTYSETTEMPLATE('3ehN5glkn2TebrAO1w1Rza',$,'Pset_DamperPHistory','Definition from IAI: Damper performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#690,#691,#692,#693,#694,#695));
+#690=IFCSIMPLEPROPERTYTEMPLATE('0Mrsz35pHEQ9ncr1dTBOFW',$,'AirFlowRate','Air flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#691=IFCSIMPLEPROPERTYTEMPLATE('0MpBQbls1FjRdlclvBQAe$',$,'Leakage','Air leakage rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#692=IFCSIMPLEPROPERTYTEMPLATE('0LgLzdllDFW9zUVP0hG2bu',$,'PressureDrop','Pressure drop.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#693=IFCSIMPLEPROPERTYTEMPLATE('1WDWT204r7kw4Ws3FZKgOd',$,'BladePositionAngle','Blade position angle; angle between the blade and flow direction ( 0 - 90).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#694=IFCSIMPLEPROPERTYTEMPLATE('1BBzaOK$bBbPAV7NSHhgok',$,'DamperPosition','Damper position (0-1); damper position ( 0=closed=90deg position angle, 1=open=0deg position angle.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#695=IFCSIMPLEPROPERTYTEMPLATE('2d7uLvkyzCRP$v2HfHgCm7',$,'PressureLossCoefficient','Pressure loss coefficient.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#696=IFCPROPERTYSETTEMPLATE('3IjwQeOLX9HwzMMiZgYMLz',$,'Pset_DamperTypeCommon','Definition from IAI: Damper type common attributes.\X2\000A\X0\',$,'IfcDamperType',(#697,#699,#701,#702,#703,#704,#706,#708,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727));
+#697=IFCSIMPLEPROPERTYTEMPLATE('18QbGSj95As87hoOKgahNd',$,'Operation','The operational mechanism for the damper operation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#698,$,$,$,.READWRITE.);
+#698=IFCPROPERTYENUMERATION('PEnum_DamperOperation',(IFCLABEL('AUTOMATIC'),IFCLABEL('MANUAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#699=IFCSIMPLEPROPERTYTEMPLATE('1oCnZwIkn09xNfJ9e5EgAY',$,'Orientation','The intended orientation for the damper as specified by the manufacturer.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#700,$,$,$,.READWRITE.);
+#700=IFCPROPERTYENUMERATION('PEnum_DamperOrientation',(IFCLABEL('VERTICAL'),IFCLABEL('HORIZONTAL'),IFCLABEL('VERTICALORHORIZONTAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#701=IFCSIMPLEPROPERTYTEMPLATE('3fhihQR0T8$edbG6zB46B8',$,'BladeMaterial','The material from which the damper blades are constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#702=IFCSIMPLEPROPERTYTEMPLATE('2G3E7BEXrAxO9nW8E_KFjZ',$,'BladeThickness','The thickness of the damper blade.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#703=IFCSIMPLEPROPERTYTEMPLATE('2tzu2T41r9WhgZON2KPE6$',$,'SealMaterial','The material from which the damper seals are constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#704=IFCSIMPLEPROPERTYTEMPLATE('24w0j5zuf3Jx5YEtKOCCt6',$,'BladeAction','Blade action.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#705,$,$,$,.READWRITE.);
+#705=IFCPROPERTYENUMERATION('PEnum_DamperBladeAction',(IFCLABEL('FOLDINGCURTAIN'),IFCLABEL('PARALLEL'),IFCLABEL('OPPOSED'),IFCLABEL('SINGLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#706=IFCSIMPLEPROPERTYTEMPLATE('3jThs172jDtOV_2YR_BrmR',$,'BladeShape','Blade shape. Flat means triple V-groove.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#707,$,$,$,.READWRITE.);
+#707=IFCPROPERTYENUMERATION('PEnum_DamperBladeShape',(IFCLABEL('FLAT'),IFCLABEL('FABRICATEDAIRFOIL'),IFCLABEL('EXTRUDEDAIRFOIL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#708=IFCSIMPLEPROPERTYTEMPLATE('3K8kMlCb9Ce9yeskRcR9Xg',$,'BladeEdge','Blade edge.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#709,$,$,$,.READWRITE.);
+#709=IFCPROPERTYENUMERATION('PEnum_DamperBladeEdge',(IFCLABEL('CRIMPED'),IFCLABEL('UNCRIMPED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#710=IFCSIMPLEPROPERTYTEMPLATE('1nmyuN_N14nP34a6XGP40Q',$,'NumberofBlades','Number of blades.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#711=IFCSIMPLEPROPERTYTEMPLATE('3oiZi8ejz26O6aaAWFRW0k',$,'FaceArea','Face area open to the airstream.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#712=IFCSIMPLEPROPERTYTEMPLATE('0nLAPQK$v9mgwQFBptTt1C',$,'MaximumAirFlowRate','Maximum allowable air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#713=IFCSIMPLEPROPERTYTEMPLATE('29Ka9dDgvCigmCCeToJ6Hd',$,'TemperatureRange','Temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#714=IFCSIMPLEPROPERTYTEMPLATE('2mh4PkhSb3NxI9kil$Hkwv',$,'MaximumWorkingPressure','Maximum working pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#715=IFCSIMPLEPROPERTYTEMPLATE('2K08O8REH069JA$wsbk4CB',$,'TemperatureRating','Temperature rating.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#716=IFCSIMPLEPROPERTYTEMPLATE('1nL8ZHhsrBtRHfysxi9$R0',$,'TorqueRange','Torque range.',.P_BOUNDEDVALUE.,'IfcTorqueMeasure',$,$,$,$,$,.READWRITE.);
+#717=IFCSIMPLEPROPERTYTEMPLATE('3vOKy6k4nEWh0KUn1cndBJ',$,'NominalAirFlowRate','Nominal air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#718=IFCSIMPLEPROPERTYTEMPLATE('3flDI6l612AQE25rWwDjfp',$,'OpenPressureDrop','Total pressure drop across damper.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#719=IFCSIMPLEPROPERTYTEMPLATE('3Kd9bLO_H2$wgIwMzsEphC',$,'LeakageFullyClosed','Leakage when fully closed.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#720=IFCSIMPLEPROPERTYTEMPLATE('1mHZUWdhrBTBNW0272Ploy',$,'LossCoefficentCurve','Loss coefficient \X2\2013\X0\ blade position angle curve; ratio of pressure drop to velocity pressure versus blade angle; C = f (blade angle position).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'C = f (blade angle position)',.READWRITE.);
+#721=IFCSIMPLEPROPERTYTEMPLATE('38N$4L0Fn5yfsjnEGkD2iV',$,'LeakageCurve','Leakage versus pressure drop; Leakage = f (pressure).',.P_TABLEVALUE.,'IfcVolumetricFlowRateMeasure','IfcPressureMeasure',$,$,$,'Leakage = f (pressure)',.READWRITE.);
+#722=IFCSIMPLEPROPERTYTEMPLATE('38qj0EuD5E_fXX9EqSr1w6',$,'RegeneratedSoundCurve','Regenerated sound versus air flow rate.',.P_TABLEVALUE.,'IfcReal','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
+#723=IFCSIMPLEPROPERTYTEMPLATE('0_ZTeFGfHE7u_yMO4X0n3x',$,'FrameType','The type of frame used by the damper (e.g., Standard, Single Flange, Single Reversed Flange, Double Flange, etc.).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#724=IFCSIMPLEPROPERTYTEMPLATE('1A_I82UNTELB53RYuYn1L9',$,'FrameDepth','The length (or depth) of the damper frame.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#725=IFCSIMPLEPROPERTYTEMPLATE('3Xd8pypB5C7Om6JDbysdAk',$,'FrameMaterial','The material from which the damper frame is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#726=IFCSIMPLEPROPERTYTEMPLATE('2p07K$DQH7jhI8oaLzFVM2',$,'FrameThickness','The thickness of the damper frame material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#727=IFCSIMPLEPROPERTYTEMPLATE('2vGb$6GtXD0uMbr8ec7jnK',$,'CloseOffRating','Close off rating. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#728=IFCPROPERTYSETTEMPLATE('2Yg9e0jJrDTATL1btKJyMA',$,'Pset_DamperTypeControlDamper','Definition from IAI: Control damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeControl to Pset_DamperTypeControlDamper in IFC2x2 Pset Addendum.\X2\000A\X0\',$,'IfcDamperType',(#729,#730));
+#729=IFCSIMPLEPROPERTYTEMPLATE('1I4Ttr0x169B912OdJQVgL',$,'TorqueRange','Torque range: minimum operational torque to maximum allowable torque.',.P_BOUNDEDVALUE.,'IfcTorqueMeasure',$,$,$,$,$,.READWRITE.);
+#730=IFCSIMPLEPROPERTYTEMPLATE('0tcmpEoIL9zPUCgpIZymzH',$,'ControlDamperOperation','The inherent characteristic of the control damper operation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#731,$,$,$,.READWRITE.);
+#731=IFCPROPERTYENUMERATION('PEnum_ControlDamperOperation',(IFCLABEL('LINEAR'),IFCLABEL('EXPONENTIAL'),IFCLABEL('IFCPOLYLINE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#732=IFCPROPERTYSETTEMPLATE('3Iir$IGvDFrPi9gdUl6Nub',$,'Pset_DamperTypeFireDamper','Definition from IAI: Fire damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeFire to Pset_DamperTypeFireDamper in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#733,#735,#737,#738));
+#733=IFCSIMPLEPROPERTYTEMPLATE('3g_ALQc9jADPgJr99VlouG',$,'ActuationType','Enumeration that identifies the different types of dampers ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#734,$,$,$,.READWRITE.);
+#734=IFCPROPERTYENUMERATION('PEnum_FireDamperActuationType',(IFCLABEL('GRAVITY'),IFCLABEL('SPRING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#735=IFCSIMPLEPROPERTYTEMPLATE('1g7FXP_J13T9pWzgoIimf$',$,'ClosureRatingEnum','Enumeration that identifies the closure rating for the damper ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#736,$,$,$,.READWRITE.);
+#736=IFCPROPERTYENUMERATION('PEnum_FireDamperClosureRating',(IFCLABEL('DYNAMIC'),IFCLABEL('STATIC'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#737=IFCSIMPLEPROPERTYTEMPLATE('2kXDAv6kv5Hh4EXwQVEHRV',$,'FireResistanceRating','Measure of the fire resistance rating in hours (e.g., 1.5 hours, 2 hours, etc.). ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#738=IFCSIMPLEPROPERTYTEMPLATE('1UJ0RKTNf66OvZyVkUklIT',$,'FusibleLinkTemperature','The temperature that the fusible link melts ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#739=IFCPROPERTYSETTEMPLATE('3Vh0feZDj0rglUPdck26qq',$,'Pset_DamperTypeFireSmokeDamper','Definition from IAI: Combination Fire and Smoke damper type attributes.\X2\000A\X0\New Pset in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#740));
+#740=IFCSIMPLEPROPERTYTEMPLATE('2$HK237zbEze49MDa9olCD',$,'ControlType','The type of control used to operate the damper (e.g., Open/Closed Indicator, Resetable Temperature Sensor, Temperature Override, etc.) ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#741=IFCPROPERTYSETTEMPLATE('2t1kjUaCn7mgHNcDJjyAd9',$,'Pset_DamperTypeSmokeDamper','Definition from IAI: Smoke damper type attributes.\X2\000A\X0\Pset renamed from Pset_DamperTypeSmoke to Pset_DamperTypeSmokeDamper in IFC2x2 Pset Addendum.',$,'IfcDamperType',(#742));
+#742=IFCSIMPLEPROPERTYTEMPLATE('0ZrMRFYCvBDxZkb5C1U2RF',$,'ControlType','The type of control used to operate the damper (e.g., Open/Closed Indicator, Resetable Temperature Sensor, Temperature Override, etc.) ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#743=IFCPROPERTYSETTEMPLATE('1usmkdsG98PvAhgXg_3ej8',$,'Pset_DuctConnection','Definition from IAI: This property set is used to define the various types of duct connections. It is applied to occurrences of duct segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#744));
+#744=IFCSIMPLEPROPERTYTEMPLATE('3lLwXJUyf8aeaPOMvLmpA$',$,'ConnectionType','The connection type between duct segments or fittings and other segments or fittings. If the list contains only one value, then this connection type value applies to all ports. For more than one value in the list, the connection type value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No connection type.\X2\000A\X0\NOTDEFINED: Undefined connection type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#745=IFCPROPERTYSETTEMPLATE('3GClOYahXBdRhgxZo5duM4',$,'Pset_DuctDesignCriteria','Definition from IAI: This property set is used to define the general characteristics of the duct design parameters. This property set is typically attached to an instance of an IfcSystem, however, it may also be attached to individual elements within a duct distribution system where individual design parameters overrule those of the system.\X2\000A\X0\HISTORY: New property set in IFC Release 2.0.\X2\000A\X0\',$,'IfcSystem',(#746,#747,#749,#750,#751,#752,#753,#754,#755,#756,#757));
+#746=IFCSIMPLEPROPERTYTEMPLATE('2m1Xi6_jTB5ADfyQMthU2h',$,'DesignName','A name for the design values ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#747=IFCSIMPLEPROPERTYTEMPLATE('2O8yERf95CGOJdDSEjEWP1',$,'DuctSizingMethod','Enumeration that identifies the methodology to be used to size system components ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#748,$,$,$,.READWRITE.);
+#748=IFCPROPERTYENUMERATION('PEnum_DuctSizingMethod',(IFCLABEL('CONSTANTFRICTION'),IFCLABEL('CONSTANTPRESSURE'),IFCLABEL('STATICREGAIN'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#749=IFCSIMPLEPROPERTYTEMPLATE('3KK1cCUGTE_99l7HDzNk$y',$,'PressureClass','Nominal pressure rating of the system components. (Data type = PressureMeasure) ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#750=IFCSIMPLEPROPERTYTEMPLATE('2jiF9pjjbA4w7Op0XqLzUs',$,'LeakageClass','Nominal leakage rating for the system components. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#751=IFCSIMPLEPROPERTYTEMPLATE('2Eedx1SgH3ueb$bdEcipvB',$,'FrictionLoss','The pressure loss due to friction per unit length. (Data type = PressureMeasure/LengthMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#752=IFCSIMPLEPROPERTYTEMPLATE('0gHhhwMQ5Az9OdJFgOZAiA',$,'ScrapFactor','Sheet metal scrap factor ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#753=IFCSIMPLEPROPERTYTEMPLATE('3pBS3iP_LB1v2sRi0eg4ch',$,'DuctSealant','Type of sealant used on the duct and fittings ',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#754=IFCSIMPLEPROPERTYTEMPLATE('3AQRVkY0TEru4K1kiIIBvh',$,'MaximumVelocity','The maximum design velocity of the air in the duct or fitting. ',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,$,$,$,.READWRITE.);
+#755=IFCSIMPLEPROPERTYTEMPLATE('3EOLK3O6fADfvKIfpIKGvG',$,'AspectRatio','The default aspect ratio ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#756=IFCSIMPLEPROPERTYTEMPLATE('2DxYV9CKj86xN0OVIo8UIM',$,'MinimumHeight','The minimum duct height for rectangular, oval or round duct ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#757=IFCSIMPLEPROPERTYTEMPLATE('04$NpAFbb5Jvd1$ss0dLqo',$,'MinimumWidth','The minimum duct width for oval or rectangular duct ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#758=IFCPROPERTYSETTEMPLATE('3h5qdtcyr4rRRxm2dlIB14',$,'Pset_DuctFittingPHistory','Definition from IAI: Duct fitting performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#759,#760,#761));
+#759=IFCSIMPLEPROPERTYTEMPLATE('2Q3oP54vHD_hjS3Ny3EEaR',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#760=IFCSIMPLEPROPERTYTEMPLATE('2Q$ykuAIzFpOqzalIuZIgM',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#761=IFCSIMPLEPROPERTYTEMPLATE('140tTc98rB8AiWuA6ai5Lh',$,'AirFlowLeakage','Volumetric leakage flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#762=IFCPROPERTYSETTEMPLATE('2_nz5MO5592RNFnJ2Odluq',$,'Pset_DuctFittingTypeCommon','Definition from IAI: Duct fitting type common attributes.\X2\000A\X0\',$,'IfcDuctFittingType',(#763,#764,#765,#766,#767,#768,#769,#770,#771,#772));
+#763=IFCSIMPLEPROPERTYTEMPLATE('0_lXlTNaD8v9vRrfIfLbM8',$,'SubType','Subtype of fitting (I.e., 5-gore, pleated, stamped, etc.) ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#764=IFCSIMPLEPROPERTYTEMPLATE('2gxHo$w6D8avhoLRvYZTko',$,'Material','The duct fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#765=IFCSIMPLEPROPERTYTEMPLATE('0rdIfSjfHEzOOb5zjo2QSa',$,'MaterialThickness','The thickness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#766=IFCSIMPLEPROPERTYTEMPLATE('0MScc$wDv21hDTGeyUtsPV',$,'PressureClass','Pressure classification as defined by the authority having jurisdiction (e.g., SMACNA, etc.).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#767=IFCSIMPLEPROPERTYTEMPLATE('2zzP7wluX1bBE9HUmpW5xC',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassPerLengthMeasure',$,$,$,$,$,.READWRITE.);
+#768=IFCSIMPLEPROPERTYTEMPLATE('1aw2zMK$f1tgz$ZXfqFbhY',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#769=IFCSIMPLEPROPERTYTEMPLATE('32EsaRhpr6OfCKrnwtBxC8',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#770=IFCSIMPLEPROPERTYTEMPLATE('33AgJM$_n7OuL0JW1cUid4',$,'NominalDiameterOrWidth','The nominal diameter or width of the duct fitting. If the list contains only one value, then this nominal diameter or width applies to all ports. For more than value in the list, the nominal diameter or width value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#771=IFCSIMPLEPROPERTYTEMPLATE('2QAqAHO$97AuX2h5kW9oqF',$,'NominalHeight','The nominal height of the duct fitting. Refer to NominalDiameterOrWidth for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#772=IFCSIMPLEPROPERTYTEMPLATE('3$MxM6McHCevTX3I4xTf3w',$,'EndStyleTreatment','The end-style treatment of the duct fitting manufactured. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No end-style treatment has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#773=IFCPROPERTYSETTEMPLATE('2uxHmHfTT0uRyKASKx9IAA',$,'Pset_DuctSegmentPHistory','Definition from IAI: Duct segment performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#774,#775,#776,#777));
+#774=IFCSIMPLEPROPERTYTEMPLATE('0gxPnl2gP8mBloouqZckgB',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#775=IFCSIMPLEPROPERTYTEMPLATE('1HOPale912pf4uYNTqzxjQ',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#776=IFCSIMPLEPROPERTYTEMPLATE('0rrQ8md4zCc96azziajk2s',$,'LeakageCurve','Leakage per unit length curve versus working pressure. If a scalar is expressed then it represents LeakageClass which is flowrate per unit area at a specified pressure rating (e.g., ASHRAE Fundamentals 2001 34.16.).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#777=IFCSIMPLEPROPERTYTEMPLATE('1sVlBObK1DdejFQ0MQpwTs',$,'FluidFlowLeakage','Volumetric leakage flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#778=IFCPROPERTYSETTEMPLATE('2pw6OYf4L3jgfw7DiZXYqH',$,'Pset_DuctSegmentTypeCommon','Definition from IAI: Duct segment type common attributes.\X2\000A\X0\',$,'IfcDuctSegmentType',(#779,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793));
+#779=IFCSIMPLEPROPERTYTEMPLATE('3KWFcrPGn6kPyKxnTSa5DW',$,'Shape','Cross sectional shape. Note that this shape is uniform throughout the length of the segment. For nonuniform shapes, a transition fitting should be used instead.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#780,$,$,$,.READWRITE.);
+#780=IFCPROPERTYENUMERATION('PEnum_DuctSegmentShape',(IFCLABEL('FLATOVAL'),IFCLABEL('RECTANGULAR'),IFCLABEL('ROUND'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#781=IFCSIMPLEPROPERTYTEMPLATE('31ur6qbODD_OryA5GUiVUR',$,'Material','The duct segment material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#782=IFCSIMPLEPROPERTYTEMPLATE('1E9LojQpD1jgmgdxdo6kF9',$,'MaterialThickness','The thickness of the duct segment material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#783=IFCSIMPLEPROPERTYTEMPLATE('3fJikFy0PCFQcMEwCmU9w4',$,'WorkingPressure','Pressure classification as defined by the authority having jurisdiction (e.g., SMACNA, etc.).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#784=IFCSIMPLEPROPERTYTEMPLATE('36eN2rjOP8EermbTe1LylJ',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#785=IFCSIMPLEPROPERTYTEMPLATE('3piEUBPVD9_uSVohS7oRDX',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#786=IFCSIMPLEPROPERTYTEMPLATE('0JmrdZe$vBSekS0fKvym1J',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#787=IFCSIMPLEPROPERTYTEMPLATE('1A$WZeStrAAhATl5ahPZRF',$,'LongitudinalSeam','The type of seam to be used along the longitudinal axis of the duct segment.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#788=IFCSIMPLEPROPERTYTEMPLATE('2eXtLwRYX2_AB$97fK1H3y',$,'Length','Length of the duct segment. If a Length attribute is provided in the occurrence property set, it supersedes this value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#789=IFCSIMPLEPROPERTYTEMPLATE('2wWSS6AyD5ywjzO8_bb4nq',$,'NominalDiameterOrWidth','The nominal diameter or width of the duct segment. If the list contains only one value, then this nominal diameter or width applies to all ports. For more than value in the list, the nominal diameter or width value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#790=IFCSIMPLEPROPERTYTEMPLATE('2LQdJZcrb5juR316JnAylY',$,'NominalHeight','The nominal height of the duct segment. Refer to NominalDiameterOrWidth for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#791=IFCSIMPLEPROPERTYTEMPLATE('3TOoEb7JXDrgmTgwxTbjPS',$,'EndStyleTreatment','The end-style treatment of the duct segment manufactured. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\ANGLE: Angle. \X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\NONE: No end-style treatment has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#792=IFCSIMPLEPROPERTYTEMPLATE('1rp6VdAln2yA8yNMZN2eKo',$,'Reinforcement','The type of reinforcement, if any, used for the duct segment.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#793=IFCSIMPLEPROPERTYTEMPLATE('0shVNa2S94WhiBe3F00LU4',$,'ReinforcementSpacing','The spacing between reinforcing elements.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#794=IFCPROPERTYSETTEMPLATE('0ybyLDRMLFmf2m94kJaoBC',$,'Pset_DuctSilencerPHistory','Definition from IAI: Duct silencer performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#795,#796));
+#795=IFCSIMPLEPROPERTYTEMPLATE('1va32ixvf45OxrRi39d6bY',$,'AirFlowRate','Volumetric air flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#796=IFCSIMPLEPROPERTYTEMPLATE('3BpBwWCsXFieduCKHzJFP0',$,'AirPressureDropCurve','Air pressure drop as a function of air flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#797=IFCPROPERTYSETTEMPLATE('2$ob6SuhvE5xUoVcmeAgtL',$,'Pset_DuctSilencerTypeCommon','Definition from IAI: Duct silencer type common attributes.\X2\000A\X0\InsertionLoss and RegeneratedSound attributes deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcDuctSilencerType',(#798,#800,#801,#802,#803,#804,#805,#806));
+#798=IFCSIMPLEPROPERTYTEMPLATE('2nhK3QK_T1G9wMFIUya8T2',$,'Shape','Cross sectional shape.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#799,$,$,$,.READWRITE.);
+#799=IFCPROPERTYENUMERATION('PEnum_DuctSilencerShape',(IFCLABEL('FLATOVAL'),IFCLABEL('RECTANGULAR'),IFCLABEL('ROUND'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#800=IFCSIMPLEPROPERTYTEMPLATE('2RMuZVE$vCdPULeReuFpJR',$,'HydraulicDiameter','Hydraulic diameter',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#801=IFCSIMPLEPROPERTYTEMPLATE('0oz64GMVnCcxgJk8oM$geV',$,'Length','The finished length of the silencer.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#802=IFCSIMPLEPROPERTYTEMPLATE('1yp6WTjKz05hBwR97MU8hG',$,'Weight','The weight of the silencer.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#803=IFCSIMPLEPROPERTYTEMPLATE('1oLMIuxev1D8n7P2XjoX9C',$,'AirFlowrateRange','Possible range of airflow that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#804=IFCSIMPLEPROPERTYTEMPLATE('3AHUhjmR16CAJ4ALDM_bQU',$,'WorkingPressureRange','Allowable minimum and maximum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#805=IFCSIMPLEPROPERTYTEMPLATE('1OBzoHJTPCSgxCaBKK3O7Y',$,'TemperatureRange','Allowable minimum and maximum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#806=IFCSIMPLEPROPERTYTEMPLATE('2smCqLwSDDu9fTo1nkT0Gl',$,'HasExteriorInsulation','TRUE if the silencer has exterior insulation. FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#807=IFCPROPERTYSETTEMPLATE('1iv991o3z2gQfnTFlEXPZf',$,'Pset_EnergyConsumptionPHistoryElectricity','Definition from IAI: Measured electrical energy consumption properties.',$,'IfcPerformanceHistory',(#808,#809,#810,#811,#812,#813));
+#808=IFCSIMPLEPROPERTYTEMPLATE('29yes6iK91fuVkrADcacDY',$,'Voltage','Operating voltage.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCELECTRICVOLTAGEMEASURE',$,$,$,$,.READWRITE.);
+#809=IFCSIMPLEPROPERTYTEMPLATE('3C5oRVIsf4DQsmcyKxDX6v',$,'RealPower','Real power.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#810=IFCSIMPLEPROPERTYTEMPLATE('0bmXisy6v32etjj1mpQ2iZ',$,'ReactivePower','Reactive power.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#811=IFCSIMPLEPROPERTYTEMPLATE('22jzApVPjD2gilzgVyP84c',$,'ApparentPower','Apparent power.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#812=IFCSIMPLEPROPERTYTEMPLATE('0vGaIrAVnDiv6dmhwPIfBY',$,'PowerFactor','Power factor.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCRATIOMEASURE',$,$,$,$,.READWRITE.);
+#813=IFCSIMPLEPROPERTYTEMPLATE('2gGXNTsK9AHwGEqj849Pt1',$,'Current','Current.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCELECTRICCURRENTMEASURE',$,$,$,$,.READWRITE.);
+#814=IFCPROPERTYSETTEMPLATE('18ypnK3LXE6POPO7709FmP',$,'Pset_EnergyConsumptionPHistoryFuel','Definition from IAI: Measured fuel energy consumption properties.',$,'IfcPerformanceHistory',(#815,#816,#817));
+#815=IFCSIMPLEPROPERTYTEMPLATE('3lCr513_D3pQXOa2Ni35o4',$,'Temperature','The temperature of the fuel.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#816=IFCSIMPLEPROPERTYTEMPLATE('1mJ4GGfbrBsuHE2A3nb_yE',$,'Pressure','The pressure of the fuel.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#817=IFCSIMPLEPROPERTYTEMPLATE('38IgHkuCrCrPZ9G8giHvGN',$,'Flowrate','The flowrate of the fuel.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCMASSFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#818=IFCPROPERTYSETTEMPLATE('0F0GR_b411phLmCYBlUv$g',$,'Pset_EnergyConsumptionPHistorySteam','Definition from IAI: Measured steam energy consumption properties.',$,'IfcPerformanceHistory',(#819,#820,#821,#822));
+#819=IFCSIMPLEPROPERTYTEMPLATE('0XKiEHvoj8MApp$Yh7YKkZ',$,'Temperature','Operating steam temperature.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#820=IFCSIMPLEPROPERTYTEMPLATE('17YbdUXgT8_h68eTXCXWcw',$,'Pressure','Operating steam pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#821=IFCSIMPLEPROPERTYTEMPLATE('3cdTJhIJr3wx$Nl6coGNxD',$,'Flowrate','The mass flowrate of the steam.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCMASSFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#822=IFCSIMPLEPROPERTYTEMPLATE('2gh_y8aDz6yhg6jaMPNsql',$,'Quality','Steam quality.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#823=IFCPROPERTYSETTEMPLATE('1$ZH03UsP6O9OfHFy3ddM1',$,'Pset_EvaporativeCoolerPHistory','Definition from IAI: Evaporative cooler performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#824,#825,#826,#827,#828,#829,#830,#831));
+#824=IFCSIMPLEPROPERTYTEMPLATE('1NuFENuIXCjvMjqRkbnraC',$,'WaterSumpTemperature','Water sump temperature.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#825=IFCSIMPLEPROPERTYTEMPLATE('0bsv63k9z37fO2_skaoC0A',$,'Effectiveness','Ratio of the change in dry bulb temperature of the (primary) air stream to the difference between the entering dry bulb temperature of the (primary) air and the wet-bulb temperature of the (secondary) air.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#826=IFCSIMPLEPROPERTYTEMPLATE('3UxhdTfJrBJO08ZLFfSGfd',$,'SensibleHeatTransferRate','Sensible heat transfer rate to primary air flow.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#827=IFCSIMPLEPROPERTYTEMPLATE('2IBbbEys17IuDeR_OQyYD4',$,'LatentHeatTransferRate','Latent heat transfer rate to primary air flow.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#828=IFCSIMPLEPROPERTYTEMPLATE('0h4GBWgbTBt9EFhQpzKpyF',$,'TotalHeatTransferRate','Total heat transfer rate to primary air flow.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#829=IFCSIMPLEPROPERTYTEMPLATE('0GacG3bDf3hhJLsFYJRXYI',$,'EffectivenessTable','Total heat transfer effectiveness curve as a function of the primary air flow rate.',.P_LISTVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#830=IFCSIMPLEPROPERTYTEMPLATE('3VeCbjJuvBX9fsfUflzcfS',$,'AirPressureDropCurve','Air pressure drop as function of air flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#831=IFCSIMPLEPROPERTYTEMPLATE('09Xu5S9HnBn9tysur4K2TA',$,'WaterPressDropCurve','Water pressure drop as function of water flow rate.',.P_LISTVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#832=IFCPROPERTYSETTEMPLATE('28eM7SW_zEZu4BrDUNSjFC',$,'Pset_EvaporativeCoolerTypeCommon','Definition from IAI: Evaporative cooler type common attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead. WaterRequirement attribute unit type modified in IFC2x2 Pset Addendum.',$,'IfcEvaporativeCoolerType',(#833,#835,#836,#837,#838,#839));
+#833=IFCSIMPLEPROPERTYTEMPLATE('0vTYsRd6XDCvEH8o4Bzwbx',$,'FlowArrangement','CounterFlow: Air and water flow enter in different directions.\X2\000A\X0\CrossFlow: Air and water flow are perpendicular.\X2\000A\X0\ParallelFlow: Air and water flow enter in same directions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#834,$,$,$,.READWRITE.);
+#834=IFCPROPERTYENUMERATION('PEnum_EvaporativeCoolerFlowArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#835=IFCSIMPLEPROPERTYTEMPLATE('04QsByOxDAtvGbknJNTYi6',$,'HeatExchangeArea','Heat exchange area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#836=IFCSIMPLEPROPERTYTEMPLATE('1uYmbyCBf0i9aa3XYG1kfR',$,'HeatExchangerMediaMaterials','Heat exchanger media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#837=IFCSIMPLEPROPERTYTEMPLATE('3NUoVG1Cj63PrlmxcX$kNt',$,'OperationTemperatureRange','Allowable operation ambient air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#838=IFCSIMPLEPROPERTYTEMPLATE('30dWAlsIjA08asCzgleJsA',$,'Weight','Weight of the evaporative cooler.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#839=IFCSIMPLEPROPERTYTEMPLATE('06D2ELQALABQ_S3b2psf5K',$,'WaterRequirement','Make-up water requirement.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#840=IFCPROPERTYSETTEMPLATE('0X0m5P9jv86Q5Fo_96PSBM',$,'Pset_EvaporatorPHistory','Definition from IAI: Evaporator performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851));
+#841=IFCSIMPLEPROPERTYTEMPLATE('2a1BrZFt96FgMxVy7vKqBT',$,'HeatRejectionRate','Sum of the refrigeration effect and the heat equivalent of the power input to the compressor.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#842=IFCSIMPLEPROPERTYTEMPLATE('3BT1lKatD39OMfXbFfEvMi',$,'ExteriorHeatTransferCoefficient','Exterior heat transfer coefficient associated with exterior surface area.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMALTRANSMITTANCEMEASURE',$,$,$,$,.READWRITE.);
+#843=IFCSIMPLEPROPERTYTEMPLATE('38TLmoeCv8Peb55L9gww1E',$,'InteriorHeatTransferCoefficient','Interior heat transfer coefficient associated with interior surface area.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMALTRANSMITTANCEMEASURE',$,$,$,$,.READWRITE.);
+#844=IFCSIMPLEPROPERTYTEMPLATE('10ufRGy7T30PmSDYCvk9Ry',$,'RefrigrerantFoulingResistance','Fouling resistance on the refrigerant side.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#845=IFCSIMPLEPROPERTYTEMPLATE('2Hs8jME6f3AuFnnHdErLA$',$,'EvaporatingTemperature','Refrigerant evaporating temperature.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#846=IFCSIMPLEPROPERTYTEMPLATE('0jThtbdxP1ru$UQvzZnPk1',$,'LogarithmicMeanTemperatureDifference','Logarithmic mean temperature difference between refrigerant and water or air.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#847=IFCSIMPLEPROPERTYTEMPLATE('0RdUch$0r46ACyvUchbPfc',$,'UAcurves','UV = f (VExterior, VInterior), UV as a function of interior and exterior fluid flow velocity at the entrance.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#848=IFCSIMPLEPROPERTYTEMPLATE('3xjHawA6v7UehTLH2rGzYD',$,'CompressorEvaporatorHeatGain','Heat gain between the evaporator outlet and the compressor inlet.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#849=IFCSIMPLEPROPERTYTEMPLATE('0b5e8pg3L6Ovpdumh8cZo2',$,'CompressorEvaporatorPressureDrop','Pressure drop between the evaporator outlet and the compressor inlet.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#850=IFCSIMPLEPROPERTYTEMPLATE('27NzgvzV1D_9PswMbTLSkH',$,'EvaporatorMeanVoidFraction','Mean void fraction in evaporator.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#851=IFCSIMPLEPROPERTYTEMPLATE('3sEXaEP1n7uOUhTtCT6mSI',$,'WaterFoulingResistance','Fouling resistance on water/air side.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#852=IFCPROPERTYSETTEMPLATE('0h98NvNBn2XAz8VstWZofW',$,'Pset_EvaporatorTypeCommon','Definition from IAI: Evaporator type common attributes.\X2\000A\X0\',$,'IfcEvaporatorType',(#853,#855,#857,#859,#860,#861,#862,#863,#864,#865));
+#853=IFCSIMPLEPROPERTYTEMPLATE('3MES8aF55CHeDbvwOP0ED9',$,'EvaporatorMediumType','ColdLiquid: Evaporator is using liquid type of fluid to exchange heat with refrigerant.\X2\000A\X0\ColdAir: Evaporator is using air to exchange heat with refrigerant.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#854,$,$,$,.READWRITE.);
+#854=IFCPROPERTYENUMERATION('PEnum_EvaporatorMediumType',(IFCLABEL('COLDLIQUID'),IFCLABEL('COLDAIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#855=IFCSIMPLEPROPERTYTEMPLATE('3TqU6Vxsr85A17P_tQRxQA',$,'EvaporatorCoolant','The fluid used for the coolant in the evaporator.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#856,$,$,$,.READWRITE.);
+#856=IFCPROPERTYENUMERATION('PEnum_EvaporatorCoolant',(IFCLABEL('WATER'),IFCLABEL('BRINE'),IFCLABEL('GLYCOL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#857=IFCSIMPLEPROPERTYTEMPLATE('2ewk5clhn9sQXbbNoi3Q6q',$,'RefrigerantClass','Refrigerant class used by the compressor.\X2\000A\X0\CFC: Chlorofluorocarbons.\X2\000A\X0\HCFC: Hydrochlorofluorocarbons.\X2\000A\X0\HFC: Hydrofluorocarbons.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#858,$,$,$,.READWRITE.);
+#858=IFCPROPERTYENUMERATION('PEnum_RefrigerantClass',(IFCLABEL('CFC'),IFCLABEL('HCFC'),IFCLABEL('HFC'),IFCLABEL('HYDROCARBONS'),IFCLABEL('AMMONIA'),IFCLABEL('CO2'),IFCLABEL('H2O'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#859=IFCSIMPLEPROPERTYTEMPLATE('0tLZjP6B5Fduizzin1qfHN',$,'RefrigerantType','Refrigerant material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#860=IFCSIMPLEPROPERTYTEMPLATE('3H8iSRpW1E7hO8H_6aaEUv',$,'ExternalSurfaceArea','External surface area (both primary and secondary area).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#861=IFCSIMPLEPROPERTYTEMPLATE('3AN6qH8i59wAfLTNN8dvOR',$,'InternalSurfaceArea','Internal surface area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#862=IFCSIMPLEPROPERTYTEMPLATE('2WU$k04Ff7sQhWGPRP2l6e',$,'InternalRefrigerantVolume','Internal volume of evaporator (refrigerant side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#863=IFCSIMPLEPROPERTYTEMPLATE('3Y4ZDMmeTEIv7IAlY_j$Rg',$,'InternalWaterVolume','Internal volume of evaporator (water side).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#864=IFCSIMPLEPROPERTYTEMPLATE('1XDZgnmwv48vFQT8KQS8BL',$,'NominalHeatTransferArea','Nominal heat transfer surface area associated with nominal overall heat transfer coefficient.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#865=IFCSIMPLEPROPERTYTEMPLATE('1Ztsbg3CP4MBFkXASYy1BR',$,'NominalHeatTransferCoefficient','Nominal overall heat transfer coefficient associated with nominal heat transfer area.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#866=IFCPROPERTYSETTEMPLATE('2cztgS8LH569H7wN_nKWqV',$,'Pset_FanPHistory','Definition from IAI: Fan performance history attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877));
+#867=IFCSIMPLEPROPERTYTEMPLATE('3bVctMulHEZhY0P7sGFqcN',$,'FanRotationSpeed','Fan rotation speed.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCROTATIONALFREQUENCYMEASURE',$,$,$,$,.READWRITE.);
+#868=IFCSIMPLEPROPERTYTEMPLATE('3yX7tMYAz1nRM0flzpEW5P',$,'WheelTipSpeed','Fan blade tip speed, typically defined as the linear speed of the tip of the fan blade furthest from the shaft. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCLINEARVELOCITYMEASURE',$,$,$,$,.READWRITE.);
+#869=IFCSIMPLEPROPERTYTEMPLATE('2ixi8u5Aj8KgkAmNlTHyne',$,'FanEfficiency','Fan mechanical efficiency.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#870=IFCSIMPLEPROPERTYTEMPLATE('26iglxpbXC48ibst4pd3rD',$,'OverallEfficiency','Total efficiency of motor and fan.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#871=IFCSIMPLEPROPERTYTEMPLATE('3AMbpyx0nFaxIzpEgCBACR',$,'FanPowerRate','Fan power consumption.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#872=IFCSIMPLEPROPERTYTEMPLATE('1RFgwtnF5EYPaFggNO4kiM',$,'ShaftPowerRate','Fan shaft power.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#873=IFCSIMPLEPROPERTYTEMPLATE('1p_4hrUPX0IRxIjidk3Rgo',$,'PressureCurve','Pressure rise = f (flow rate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'Pressure rise = f (flow rate)',.READWRITE.);
+#874=IFCSIMPLEPROPERTYTEMPLATE('3zBYDaG4vE1OOE5TywbY5M',$,'EfficiencyCurve','Fan efficiency =f (flow rate).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'Fan efficiency =f (flow rate)',.READWRITE.);
+#875=IFCSIMPLEPROPERTYTEMPLATE('2skmSdgt99EPWut4d5bDT_',$,'DischargeVelocity','The speed at which air discharges from the fan through the fan housing discharge opening. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCLINEARVELOCITYMEASURE',$,$,$,$,.READWRITE.);
+#876=IFCSIMPLEPROPERTYTEMPLATE('1aqW0ANY5CHQ1Qzp5DZSPo',$,'DischargePressureLoss','Fan discharge pressure loss associated with the discharge arrangement.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#877=IFCSIMPLEPROPERTYTEMPLATE('1T7S6J7X9AgwGd1KcDFOOM',$,'DrivePowerLoss','Fan drive power losses associated with the type of connection between the motor and the fan wheel.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#878=IFCPROPERTYSETTEMPLATE('0PNWL06PbB5BJfvU0irDZk',$,'Pset_FanTypeCommon','Definition from IAI: Fan type common attributes.\X2\000A\X0\',$,'IfcFanType',(#879,#881,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892));
+#879=IFCSIMPLEPROPERTYTEMPLATE('3oA6i6_tf5$fPts6jlGVVm',$,'MotorDriveType','Motor drive type:\X2\000A\X0\DIRECTDRIVE: Direct drive. \X2\000A\X0\BELTDRIVE: Belt drive. \X2\000A\X0\COUPLING: Coupling. \X2\000A\X0\OTHER: Other type of motor drive. \X2\000A\X0\NOTKNOWN: Unknown motor drive type.\X2\000A\X0\UNSET: Unspecified motor drive type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#880,$,$,$,.READWRITE.);
+#880=IFCPROPERTYENUMERATION('PEnum_FanMotorConnectionType',(IFCLABEL('DIRECTDRIVE'),IFCLABEL('BELTDRIVE'),IFCLABEL('COUPLING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#881=IFCSIMPLEPROPERTYTEMPLATE('2B1_j0Xg58MwXLEmuE8WBG',$,'CapacityControlType','\X2\000A\X0\InletVane: Control by adjusting inlet vane\X2\000A\X0\VariableSpeedDrive: Control by variable speed drive \X2\000A\X0\BladePitchAngle: Control by adjusting blade pitch angle\X2\000A\X0\TwoSpeed: Control by switch between high and low speed\X2\000A\X0\DischargeDamper: Control by modulating discharge damper',.P_ENUMERATEDVALUE.,'IfcLabel',$,#882,$,$,$,.READWRITE.);
+#882=IFCPROPERTYENUMERATION('PEnum_FanCapacityControlType',(IFCLABEL('INLETVANE'),IFCLABEL('VARIABLESPEEDDRIVE'),IFCLABEL('BLADEPITCHANGLE'),IFCLABEL('TWOSPEED'),IFCLABEL('DISCHARGEDAMPER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#883=IFCSIMPLEPROPERTYTEMPLATE('2iTp_PgRT58wikwIejR5O2',$,'OperationTemperatureRange','Allowable operation ambient air temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#884=IFCSIMPLEPROPERTYTEMPLATE('2xhdymFdb4nxmrwvhX2H2u',$,'WheelMaterial','The material used to construct the fan wheel.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#885=IFCSIMPLEPROPERTYTEMPLATE('1T3FHlKN90CPE$chXFJkqC',$,'HousingMaterial','The material used to construct the fan housing.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#886=IFCSIMPLEPROPERTYTEMPLATE('28KFOWgyLBQe78eUJ7B7oC',$,'Weight','Weight of the fan.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#887=IFCSIMPLEPROPERTYTEMPLATE('1ATExRNPTAIuzeCGJUCi8K',$,'NominalAirFlowRate','Nominal air flow rate.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#888=IFCSIMPLEPROPERTYTEMPLATE('1iP22ymyLDmeKlYh3T2LLX',$,'NominalTotalPressure','Nominal total pressure rise across the fan.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#889=IFCSIMPLEPROPERTYTEMPLATE('2ywn6LOIzB7QLDMifi$lim',$,'NominalStaticPressure','The static pressure within the air stream that the fan must overcome to insure designed circulation of air',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#890=IFCSIMPLEPROPERTYTEMPLATE('1BEa968pn3rP7UyiaakVBx',$,'NominalRotationSpeed','Nominal fan wheel speed.',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#891=IFCSIMPLEPROPERTYTEMPLATE('20WsLucOb6dh2i$G$Hd2B_',$,'NominalPowerRate','Nominal fan power rate.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#892=IFCSIMPLEPROPERTYTEMPLATE('0Up6d$iTH2eeur9CP7aWlq',$,'OperationalCriteria','Time of operation at maximum operational ambient air temperature.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#893=IFCPROPERTYSETTEMPLATE('1rh_PpLgvAYx$4QBvDjeJ$',$,'Pset_FanTypeSmokeControl','Definition from IAI: Smoke control attributes of a fan participating as part of a smoke control system.\X2\000A\X0\',$,'IfcFanType',(#894,#895,#896));
+#894=IFCSIMPLEPROPERTYTEMPLATE('2TCwFOHEn26OgRXYjbtdKW',$,'OperationalCriteria','Time of operation at maximum operational ambient air temperature.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#895=IFCSIMPLEPROPERTYTEMPLATE('1MLZKTJvP3RfuAvHZUaQ3q',$,'MaximumDesignTemperature','Maximum design operational temperature.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#896=IFCSIMPLEPROPERTYTEMPLATE('3S70Aw2wz1DOF$HVWVl2tl',$,'SmokeControlFlowrate','Flowrate of fan while operating as a part of the smoke control system.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#897=IFCPROPERTYSETTEMPLATE('37K8coRvfE$us4Tg4tWDPP',$,'Pset_FilterPHistory','Definition from IAI: Filter performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#898,#899,#900));
+#898=IFCSIMPLEPROPERTYTEMPLATE('04aWORbZ56GRfppdRYgHsv',$,'CountedEfficiency','Filter efficiency based the particle counts concentration before and after filter against particles with certain size distribution.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#899=IFCSIMPLEPROPERTYTEMPLATE('3iGINvzx95O8pphySiI0oD',$,'WeightedEfficiency','Filter efficiency based the particle weight concentration before and after filter against particles with certain size distribution.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#900=IFCSIMPLEPROPERTYTEMPLATE('095m_s5ob4NQZJKjHKFe2O',$,'ParticleMassHolding','Mass of particle holding in the filter.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCMASSMEASURE',$,$,$,$,.READWRITE.);
+#901=IFCPROPERTYSETTEMPLATE('2FyznM_Ej8TO527vJ8MMH$',$,'Pset_FilterTypeAirParticleFilter','Definition from IAI: Air particle filter type attributes.\X2\000A\X0\',$,'IfcFilterType',(#902,#904,#905,#906,#908,#909,#910,#911,#912,#913,#914,#915));
+#902=IFCSIMPLEPROPERTYTEMPLATE('1mBHuoHnv4fBJBPez3EJMu',$,'AirParticleFilterType','A panel dry type extended surface filter is a dry-type air filter with random fiber mats or blankets in the forms of pockets, V-shaped or radial pleats, and include the following:\X2\000A\X0\CoarseFilter: Filter with a efficiency lower than 30% for atmosphere dust-spot.\X2\000A\X0\CoarseMetalScreen: Filter made of metal screen.\X2\000A\X0\CoarseCellFoams: Filter made of cell foams.\X2\000A\X0\CoarseSpunGlass: Filter made of spun glass.\X2\000A\X0\MediumFilter: Filter with an efficiency between 30-98% for atmosphere dust-spot.\X2\000A\X0\MediumElectretFilter: Filter with fine electret synthetic fibers.\X2\000A\X0\MediumNaturalFiberFilter: Filter with natural fibers.\X2\000A\X0\HEPAFilter: High efficiency particulate air filter.\X2\000A\X0\ULPAFilter: Ultra low penetration air filter.\X2\000A\X0\MembraneFilters: Filter made of membrane for certain pore diameters in flat sheet and pleated form.\X2\000A\X0\A renewable media with a moving curtain viscous filter are random-fiber media coated with viscous substance in roll form or curtain where fresh media is fed across the face of the filter and the dirty media is rewound onto a roll at the bottom or to into a reservoir:\X2\000A\X0\RollForm: Viscous filter used in roll form.\X2\000A\X0\AdhesiveReservoir: Viscous filter used in moving curtain form.\X2\000A\X0\A renewable moving curtain dry media filter is a random-fiber dry media of relatively high porosity used in moving-curtain(roll) filters.\X2\000A\X0\An electrical filter uses electrostatic precipitation to remove and collect particulate contaminants.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#903,$,$,$,.READWRITE.);
+#903=IFCPROPERTYENUMERATION('PEnum_FilterAirParticleFilterType',(IFCLABEL('COARSEMETALSCREEN'),IFCLABEL('COARSECELLFOAMS'),IFCLABEL('COARSESPUNGLASS'),IFCLABEL('MEDIUMELECTRETFILTER'),IFCLABEL('MEDIUMNATURALFIBERFILTER'),IFCLABEL('HEPAFILTER'),IFCLABEL('ULPAFILTER'),IFCLABEL('MEMBRANEFILTERS'),IFCLABEL('RENEWABLEMOVINGCURTIANDRYMEDIAFILTER'),IFCLABEL('ELECTRICALFILTER'),IFCLABEL('ROLLFORM'),IFCLABEL('ADHESIVERESERVOIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#904=IFCSIMPLEPROPERTYTEMPLATE('1bcZUDXAT5BgiPYlBPAyOP',$,'FrameMaterial','Filter frame material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#905=IFCSIMPLEPROPERTYTEMPLATE('0Eb8L6e_j4WB4RXdh9l4$f',$,'MediaMaterial','Filter media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#906=IFCSIMPLEPROPERTYTEMPLATE('0y9MchMMT5qxQK2Rc5yIE6',$,'SeparationType','Air particulate filter media separation type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#907,$,$,$,.READWRITE.);
+#907=IFCPROPERTYENUMERATION('PEnum_FilterAirParticleFilterSeparationType',(IFCLABEL('BAG'),IFCLABEL('PLEAT'),IFCLABEL('TREADSEPARATION'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#908=IFCSIMPLEPROPERTYTEMPLATE('0d91NodfjDOO5Ay60QQVWn',$,'DustHoldingCapacity','Maximum filter dust holding capacity.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#909=IFCSIMPLEPROPERTYTEMPLATE('0V8WyC6jr4ORIZIKcJjOBR',$,'FaceSurfaceArea','Face area of filter frame.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#910=IFCSIMPLEPROPERTYTEMPLATE('15kci6ypz7IPZe3T8U5ZTo',$,'MediaExtendedArea','Total extended media area.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#911=IFCSIMPLEPROPERTYTEMPLATE('2qzxgU4NT1hvwaPaMQgHSI',$,'NominalCountedEfficiency','Nominal filter efficiency based the particle count concentration before and after the filter against particles with a certain size distribution.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#912=IFCSIMPLEPROPERTYTEMPLATE('0EbvngLZzA2R_Zc8GRcmQK',$,'NominalWeightedEfficiency','Nominal filter efficiency based the particle weight concentration before and after the filter against particles with a certain size distribution.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#913=IFCSIMPLEPROPERTYTEMPLATE('3$fOm_Q293ogGQjU9WuYWl',$,'PressureDropCurve','Under certain dust holding weight, DelPressure = f (fluidflowRate)',.P_TABLEVALUE.,'IfcPressureMeasure','IfcReal',$,$,$,'DelPressure = f (fluidflowRate)',.READWRITE.);
+#914=IFCSIMPLEPROPERTYTEMPLATE('3w7VL$7Rn42g76LMIzJz4i',$,'CountedEfficiencyCurve','Counted efficiency curve as a function of dust holding weight, efficiency = f (dust holding weight).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'efficiency = f (dust holding weight)',.READWRITE.);
+#915=IFCSIMPLEPROPERTYTEMPLATE('1VMwu2Xej7G9EzW40IPBau',$,'WeightedEfficiencyCurve','Weighted efficiency curve as a function of dust holding weight, efficiency = f (dust holding weight).',.P_TABLEVALUE.,'IfcReal','IfcReal',$,$,$,'efficiency = f (dust holding weight)',.READWRITE.);
+#916=IFCPROPERTYSETTEMPLATE('10GeIomfL5P9K3zwaCxicm',$,'Pset_FilterTypeCommon','Definition from IAI: Filter type common attributes.\X2\000A\X0\',$,'IfcFilterType',(#917,#918,#919,#920,#921,#922,#923,#924,#925,#926,#927,#928));
+#917=IFCSIMPLEPROPERTYTEMPLATE('3lmm1$fLTFoenWx$xziSxY',$,'MediaMaterial','Filter media material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#918=IFCSIMPLEPROPERTYTEMPLATE('3Ik4aPS9r4LQbu4V3_aZvo',$,'Weight','Weight of filter.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#919=IFCSIMPLEPROPERTYTEMPLATE('1tibtcWEH2LeW7tsXb$R8y',$,'InitialResistance','Initial new filter fluid resistance (i.e., pressure drop at the maximum air flowrate across the filter when the filter is new per ASHRAE Standard 52.1).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#920=IFCSIMPLEPROPERTYTEMPLATE('2rag8Oz2L2ewsxcEcFZBUq',$,'FinalResistance','Filter fluid resistance when replacement is required (i.e., Pressure drop at the maximum air flowrate across the filter when the filter needs replacement per ASHRAE Standard 52.1).',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#921=IFCSIMPLEPROPERTYTEMPLATE('2IBn_FNcH7Vxv897Aj_KGQ',$,'OperationTemperatureRange','Allowable operation ambient fluid temperature range.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#922=IFCSIMPLEPROPERTYTEMPLATE('2F16BsZ6X1IP$4GMDnd_YK',$,'FlowRateRange','Possible range of fluid flowrate that can be delivered.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#923=IFCSIMPLEPROPERTYTEMPLATE('1mP7kOPZDCHATBT3W1ROf9',$,'NominalFilterFaceVelocity','Filter face velocity.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,$,$,$,.READWRITE.);
+#924=IFCSIMPLEPROPERTYTEMPLATE('2$kbW4aub53OWMJfV4L4ix',$,'NominalMediaSurfaceVelocity','Average fluid velocity at the media surface.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,$,$,$,.READWRITE.);
+#925=IFCSIMPLEPROPERTYTEMPLATE('0ci8nm28H4KANIikc4lRIy',$,'NominalPressureDrop','Total pressure drop across the filter.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#926=IFCSIMPLEPROPERTYTEMPLATE('1VM5RB31P20QP_1yanEZbX',$,'NominalFlowrate','Nominal fluid flow rate through the filter.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#927=IFCSIMPLEPROPERTYTEMPLATE('3hF9QSrAT1Hx5nEPtDJhjO',$,'NominalParticleGeometricMeanDiameter','Particle geometric mean diameter associated with nominal efficiency.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#928=IFCSIMPLEPROPERTYTEMPLATE('1o4VnNnAz2xuhVaUmT_8PX',$,'NominalParticleGeometricStandardDeviation','Particle geometric standard deviation associated with nominal efficiency.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#929=IFCPROPERTYSETTEMPLATE('015CR2E4vEpBlZwnVi1XkY',$,'Pset_FlowMeterTypeCommon','Definition from IAI: Common attributes of a flow meter type',$,'IfcFlowMeterType',(#930,#932,#933));
+#930=IFCSIMPLEPROPERTYTEMPLATE('18zWRvvfn0Y81I5nfYbKPw',$,'ReadOutType','Indication of the form that readout from the meter takes. In the case of a dial read out, this may comprise multiple dials that give a cumulative reading and/or a mechanical odometer.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#931,$,$,$,.READWRITE.);
+#931=IFCPROPERTYENUMERATION('PEnum_MeterReadOutType',(IFCLABEL('DIAL'),IFCLABEL('DIGITAL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#932=IFCSIMPLEPROPERTYTEMPLATE('0DavzIX2f5Q8gThwORutqR',$,'RemoteReading','Indicates whether the meter has a connection for remote reading through connection of a communication device (set TRUE) or not (set FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#933=IFCSIMPLEPROPERTYTEMPLATE('3p$KF3ThDEJBi3P5kH_aPF',$,'IsMain','Indicates whether the meter is the main meter on the system. If FALSE, it is a submeter. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#934=IFCPROPERTYSETTEMPLATE('2zW5vNzyH86eZKKplagexN',$,'Pset_FlowMeterTypeEnergyMeter','Definition from IAI: Device that measures, indicates and sometimes records, the energy usage in a system.',$,'IfcFlowMeterType',(#935));
+#935=IFCSIMPLEPROPERTYTEMPLATE('1P7YSQXeP1WfVkST7mbas1',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#936=IFCPROPERTYSETTEMPLATE('2HFdL4WR1Flw9UQzdHD8VG',$,'Pset_FlowMeterTypeGasMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of gas that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#937,#939,#940,#941));
+#937=IFCSIMPLEPROPERTYTEMPLATE('3wWSR_LZv43fGymCMKCScC',$,'GasType','Defines the types of gas that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#938,$,$,$,.READWRITE.);
+#938=IFCPROPERTYENUMERATION('PEnum_GasType',(IFCLABEL('COMMERCIALBUTANE'),IFCLABEL('COMMERCIALPROPANE'),IFCLABEL('LIQUEFIEDPETROLEUMGAS'),IFCLABEL('NATURALGAS'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#939=IFCSIMPLEPROPERTYTEMPLATE('38Ak_e9OvDZhomoQ5M$vCV',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#940=IFCSIMPLEPROPERTYTEMPLATE('2KFp7vrDP9zPlUDILmUcNJ',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#941=IFCSIMPLEPROPERTYTEMPLATE('1vuTRqCtzBPA$3F1lAFhsE',$,'MaximumPressureLoss','Pressure loss expected across the meter under conditions of maximum flow.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#942=IFCPROPERTYSETTEMPLATE('23pWf6Wob7lwupYQLV0Rwc',$,'Pset_FlowMeterTypeOilMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of oil that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#943,#944));
+#943=IFCSIMPLEPROPERTYTEMPLATE('2P_5oyAjD5OhLd2Jl8alBm',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#944=IFCSIMPLEPROPERTYTEMPLATE('0ksdIClwn9Ee2Ya56zOHKJ',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#945=IFCPROPERTYSETTEMPLATE('1tWeB2nTb008UcBcK2_HIY',$,'Pset_FlowMeterTypeWaterMeter','Definition from IAI: Device that measures, indicates and sometimes records, the volume of water that passes through it without interrupting the flow.',$,'IfcFlowMeterType',(#946,#948,#949,#950,#951));
+#946=IFCSIMPLEPROPERTYTEMPLATE('0fGLAp2YL1Tgm7EhbYRHQj',$,'Type','Defines the allowed values for selection of the flow meter operation type.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#947,$,$,$,.READWRITE.);
+#947=IFCPROPERTYENUMERATION('PEnum_WaterMeterType',(IFCLABEL('COMPOUND'),IFCLABEL('INFERENTIAL'),IFCLABEL('PISTON'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#948=IFCSIMPLEPROPERTYTEMPLATE('22cUSBOgL1_guHYd0iCdy7',$,'ConnectionSize','Defines the size of inlet and outlet pipe connections to the meter.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#949=IFCSIMPLEPROPERTYTEMPLATE('24LK0kI01AIe_$$b2_PZen',$,'MaximumFlowRate','Maximum rate of flow which the meter is expected to pass.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#950=IFCSIMPLEPROPERTYTEMPLATE('3cTxzVAO95Mxm5eNVblcp4',$,'MaximumPressureLoss','Pressure loss expected across the meter under conditions of maximum flow.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#951=IFCSIMPLEPROPERTYTEMPLATE('1z3Bm8T3f1NeoDE0JzO7dS',$,'BackflowPreventerType','Identifies the type of backflow preventer installed to prevent the backflow of contaminated or polluted water from an irrigation/reticulation system to a potable water supply.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#952,$,$,$,.READWRITE.);
+#952=IFCPROPERTYENUMERATION('PEnum_BackflowPreventerType',(IFCLABEL('NONE'),IFCLABEL('ATMOSPHERICVACUUMBREAKER'),IFCLABEL('ANTISIPHONVALVE'),IFCLABEL('DOUBLECHECKBACKFLOWPREVENTER'),IFCLABEL('PRESSUREVACUUMBREAKER'),IFCLABEL('REDUCEDPRESSUREBACKFLOWPREVENTER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#953=IFCPROPERTYSETTEMPLATE('3HAjT9MUz5d8$$bjZ5ns3o',$,'Pset_GasTerminalPHistory','Definition from IAI: Gas terminal performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#954));
+#954=IFCSIMPLEPROPERTYTEMPLATE('0ijA1l2JX3uBiRgcKR5Ack',$,'GasFlowRate','The volumetric flowrate of gas to the gas terminal.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#955=IFCPROPERTYSETTEMPLATE('269q55k411FfEuzYUgir02',$,'Pset_GasTerminalTypeCommon','Definition from IAI: Common attributes of gas terminal types. \X2\000A\X0\GasProperties attribute deleted in IFC2x2 Pset Addendum: Use IfcFuelProperties instead.',$,'IfcGasTerminalType',(#956));
+#956=IFCSIMPLEPROPERTYTEMPLATE('0hzm8J0Wz0$u9apvNGXotm',$,'GasFlowRateRange','Gas volumetric flowrate within which the gas terminal is designed to operate.',.P_BOUNDEDVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#957=IFCPROPERTYSETTEMPLATE('0jBLiwXor91vqiEnP455Up',$,'Pset_GasTerminalTypeGasAppliance','Definition from IAI: Piece of equipment for occupants use that is connected to a gas installation (definition is a modification from that found in BS6100).',$,'IfcGasTerminalType',(#958,#960));
+#958=IFCSIMPLEPROPERTYTEMPLATE('37qh4TTxLCSR7Y9KXaHuNn',$,'GasApplianceType','Selection of the type of gas appliance from the enumerated list of types.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#959,$,$,$,.READWRITE.);
+#959=IFCPROPERTYENUMERATION('PEnum_GasApplianceType',(IFCLABEL('GASFIRE'),IFCLABEL('GASCOOKER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#960=IFCSIMPLEPROPERTYTEMPLATE('14VBexdcj4pO4WUUKHPZ0G',$,'FlueType','Defines the types of flue that may be specified for connection to gas appliances where:\X2\000A000A\X0\BalancedFlue =\X2\0009\X0\Room sealed appliance that has its inlet for combustion air and its outlet for products of combustion in adjacent external positions, disposed so that wind effects are substantially balanced between them.\X2\000A\X0\Flued =\X2\0009\X0\Gas burning appliance designed for connection to a flue system\X2\000A\X0\Flueless =\X2\0009\X0\Gas burning appliance designed for use without connection to a flue system\X2\000A\X0\OpenFlued =\X2\0009\X0\Gas burning appliance designed to be connected to an open flue system, combustion air being drawn from a room or internal space in which the gas burning appliance is installed\X2\000A\X0\RoomSealed =\X2\0009\X0\Gas burning appliance that has its combustion system, including air inlet and products outlet, isolated from a room or internal space in which the gas burning appliance is installed\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#961,$,$,$,.READWRITE.);
+#961=IFCPROPERTYENUMERATION('PEnum_FlueType',(IFCLABEL('BALANCEDFLUE'),IFCLABEL('FLUED'),IFCLABEL('FLUELESS'),IFCLABEL('OPENFLUED'),IFCLABEL('ROOMSEALED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#962=IFCPROPERTYSETTEMPLATE('06L1R0VVP7VgUkRT0lH4$N',$,'Pset_GasTerminalTypeGasBurner','Definition from IAI: A complete unit on which or in which a flame is maintained through the provision of a gas supply.',$,'IfcGasTerminalType',(#963));
+#963=IFCSIMPLEPROPERTYTEMPLATE('0uc6jzJZv7Dh708jkRVBei',$,'GasBurnerType','Selection of the type of gas burner from the enumerated list of types',.P_ENUMERATEDVALUE.,'IfcLabel',$,#964,$,$,$,.READWRITE.);
+#964=IFCPROPERTYENUMERATION('PEnum_GasBurnerType',(IFCLABEL('FORCEDDRAFT'),IFCLABEL('NATURALDRAFT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#965=IFCPROPERTYSETTEMPLATE('2JQqSB1GvAXRoUTX7mn_G$',$,'Pset_HeatExchangerTypeCommon','Definition from IAI: Heat exchanger type common attributes.\X2\000A\X0\',$,'IfcHeatExchangerType',(#966,#968));
+#966=IFCSIMPLEPROPERTYTEMPLATE('1A1euMCDPE0e$IswhSzjAv',$,'Arrangement','Defines the basic flow arrangements for the heat exchanger:\X2\000A\X0\COUNTERFLOW: Counterflow heat exchanger arrangement. \X2\000A\X0\CROSSFLOW: Crossflow heat exchanger arrangement. \X2\000A\X0\PARALLELFLOW: Parallel flow heat exchanger arrangement. \X2\000A\X0\MULTIPASS: Multipass flow heat exchanger arrangement. \X2\000A\X0\OTHER: Other type of heat exchanger flow arrangement not defined above. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#967,$,$,$,.READWRITE.);
+#967=IFCPROPERTYENUMERATION('PEnum_HeatExchangerArrangement',(IFCLABEL('COUNTERFLOW'),IFCLABEL('CROSSFLOW'),IFCLABEL('PARALLELFLOW'),IFCLABEL('MULTIPASS'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#968=IFCSIMPLEPROPERTYTEMPLATE('2PGNcUOpLAxBt3PtFl5YRO',$,'ShellMaterial','Material used to construct the shell of the heat exchanger.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#969=IFCPROPERTYSETTEMPLATE('0uBX9uHWvAgu7zYcRRUTJw',$,'Pset_HeatExchangerTypePlate','Definition from IAI: Plate heat exchanger type common attributes.\X2\000A\X0\',$,'IfcHeatExchangerType',(#970));
+#970=IFCSIMPLEPROPERTYTEMPLATE('2eQ5SNKZbDJwaSpxZ39rd3',$,'NumberOfPlates','Number of plates used by the plate heat exchanger.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#971=IFCPROPERTYSETTEMPLATE('0pvilnnIbEEBPmEpFtm2ZK',$,'Pset_HumidifierPHistory','Definition from IAI: Humidifier performance history attributes.\X2\000A\X0\Sound attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcPerformanceHistory',(#972,#973,#974,#975));
+#972=IFCSIMPLEPROPERTYTEMPLATE('2Jji7ZGTnFoftO06t6d77S',$,'AtmosphericPressure','Ambient atmospheric pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#973=IFCSIMPLEPROPERTYTEMPLATE('0e7sPmhRfCtwPlIubaKI1S',$,'SaturationEfficiency','Saturation efficiency: Ratio of leaving air absolute humidity to the maximum absolute humidity.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#974=IFCSIMPLEPROPERTYTEMPLATE('0kcgypymf9d9nboNY_hVTo',$,'SaturationEfficiencyCurve','Saturation efficiency as a function of the air flow rate.',.P_TABLEVALUE.,'IfcReal','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
+#975=IFCSIMPLEPROPERTYTEMPLATE('1KKQhySdrFx9kYMrBV09vC',$,'AirPressureDropCurve','Air pressure drop versus air-flow rate.',.P_TABLEVALUE.,'IfcPressureMeasure','IfcVolumetricFlowRateMeasure',$,$,$,$,.READWRITE.);
+#976=IFCPROPERTYSETTEMPLATE('3wEGb7sA9F$voinaXFx1t_',$,'Pset_HumidifierTypeCommon','Definition from IAI: Humidifier type common attributes.\X2\000A\X0\WaterProperties attribute renamed to WaterRequirement and unit type modified in IFC2x2 Pset Addendum.',$,'IfcHumidifierType',(#977,#979,#980,#981,#982,#984));
+#977=IFCSIMPLEPROPERTYTEMPLATE('17FEDqlBX8nwfVs42mQXZF',$,'Application','Humidifier application.\X2\000A\X0\Fixed: Humidifier installed in a ducted flow distribution system.\X2\000A\X0\Portable: Humidifier is not installed in a ducted flow distribution system.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#978,$,$,$,.READWRITE.);
+#978=IFCPROPERTYENUMERATION('PEnum_HumidifierApplication',(IFCLABEL('PORTABLE'),IFCLABEL('FIXED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#979=IFCSIMPLEPROPERTYTEMPLATE('0zf4YNVHDAE9d9RM7eyjy5',$,'Weight','The weight of the humidifier.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#980=IFCSIMPLEPROPERTYTEMPLATE('2l3S5dst16quGTBTSXIPBc',$,'NominalMoistureGain','Nominal rate of water vapor added into the airstream.',.P_SINGLEVALUE.,'IfcMassFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#981=IFCSIMPLEPROPERTYTEMPLATE('36$1IKrIH8CeAR8FHxJWl5',$,'NominalAirFlowRate','Nominal rate of air flow into which water vapor is added.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#982=IFCSIMPLEPROPERTYTEMPLATE('1$7XWRpsX9WekR71FbjnBE',$,'InternalControl','Internal modulation control.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#983,$,$,$,.READWRITE.);
+#983=IFCPROPERTYENUMERATION('PEnum_HumidifierInternalControl',(IFCLABEL('ONOFF'),IFCLABEL('STEPPED'),IFCLABEL('MODULATING'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#984=IFCSIMPLEPROPERTYTEMPLATE('36S9FmNKfDs9OCblFl0slF',$,'WaterRequirement','Make-up water requirement.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#985=IFCPROPERTYSETTEMPLATE('1XSZmgSgnCCQLLTr5j0qU8',$,'Pset_PipeConnection','Definition from IAI: This property set is used to define the various types of pipe connections. It is applied to occurrences of pipe segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#986));
+#986=IFCSIMPLEPROPERTYTEMPLATE('0gLDSQlCv5iumk0FmKo0QS',$,'ConnectionType','The connection type between pipe segments or fittings and other segments or fittings. If the list contains only one value, then this connection type value applies to all ports. For more than one value in the list, the connection type value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\BRAZED: Brazed connection type. \X2\000A\X0\COMPRESSION: Compression connection type. \X2\000A\X0\FLANGED: Flanged connection type including bolts and gasket. \X2\000A\X0\GLANDJOINT: Gland-joint connection type. \X2\000A\X0\FLEXIBLEBOLTEDGLANDJOINT: Flexible bolted gland-joint connection type. \X2\000A\X0\FLEXIBLEBOLTEDGLANDJOINTWITHANODEENDCAP: Flexible bolted gland-joint with anode end-cap connection type. \X2\000A\X0\GROOVED: Grooved connection type. \X2\000A\X0\SOLDERED: Soldered connection type. \X2\000A\X0\SOLDERED_FEMALE: Female-soldered connection type. \X2\000A\X0\SOLDERED_MALE: Male-soldered connection type. \X2\000A\X0\SWEDGE: Swedge connection type. \X2\000A\X0\THREADED: Threaded connection type. \X2\000A\X0\THREADED_FEMALE: Female-threaded connection type. \X2\000A\X0\THREADED_MALE: Male-threaded connection type. \X2\000A\X0\WELDED: Welded connection type. \X2\000A\X0\WELDED_BUTT: Butt-welded connection type. \X2\000A\X0\WELDED_BRANCH: Branch-welded connection type. \X2\000A\X0\WELDED_FLANGE: Flange-welded connection type. \X2\000A\X0\NONE: There is no connection.\X2\000A\X0\NOTDEFINED: Undefined connection type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#987=IFCPROPERTYSETTEMPLATE('0ddUQpBFz3mR5TB72MR5wc',$,'Pset_PipeConnectionFlanged','Definition from IAI: This property set is used to define the specifics of a flanged pipe connection used between occurrences of pipe segments and fittings.\X2\000A\X0\',$,'IfcDistributionElement',(#988,#989,#990,#991,#992,#993,#994,#995,#996));
+#988=IFCSIMPLEPROPERTYTEMPLATE('1utD$NjD92JBePEvW$r_04',$,'FlangeTable','Designation of the standard table to which the flange conforms',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#989=IFCSIMPLEPROPERTYTEMPLATE('0khqBP7Nr7R8jNUEKwBzDR',$,'FlangeStandard','Designation of the standard describing the flange table',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#990=IFCSIMPLEPROPERTYTEMPLATE('2yA2PdjwPEufZkhYEEIT4o',$,'BoreSize','The nominal bore of the pipe flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#991=IFCSIMPLEPROPERTYTEMPLATE('1d_h_0mb58lBHMzIrRqpdy',$,'Material','Material from which the pipe flange is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#992=IFCSIMPLEPROPERTYTEMPLATE('2WLb6bO65ETAkeTQmrSgmW',$,'FlangeDiameter','Overall diameter of the flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#993=IFCSIMPLEPROPERTYTEMPLATE('0N1MpQBvL5hvu7bi1Xl54c',$,'FlangeThickness','Thickness of the material from which the pipe bend is constructed',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#994=IFCSIMPLEPROPERTYTEMPLATE('0a94F1pj9CbxGVueeWlb6S',$,'NumberOfBoltholes','Number of boltholes in the flange',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#995=IFCSIMPLEPROPERTYTEMPLATE('0Un0xP7tv9f8GyHh4WweUh',$,'BoltSize','Size of the bolts securing the flange',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#996=IFCSIMPLEPROPERTYTEMPLATE('1I_03uI8z0XO2ymFGofqO7',$,'BoltholePitch','Diameter of the circle along which the boltholes are placed',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#997=IFCPROPERTYSETTEMPLATE('32X4YPzODAhOG_5eTaShgu',$,'Pset_PipeFittingPHistory','Definition from IAI: Pipe fitting performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#998,#999));
+#998=IFCSIMPLEPROPERTYTEMPLATE('2$SZzVQv5BiOaTBtpZQdC8',$,'LossCoefficient','Dimensionless loss coefficient used for calculating fluid resistance representing the ratio of total pressure loss to velocity pressure at a referenced cross-section.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCREAL',$,$,$,$,.READWRITE.);
+#999=IFCSIMPLEPROPERTYTEMPLATE('0DP2dNhd1EK9XyASoKl3mA',$,'FlowrateLeakage','Leakage flowrate versus pressure difference.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1000=IFCPROPERTYSETTEMPLATE('3nxfT928j8EvEueCcYmFnb',$,'Pset_PipeFittingTypeCommon','Definition from IAI: Pipe fitting type common attributes.\X2\000A\X0\',$,'IfcPipeFittingType',(#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008,#1009,#1010,#1011));
+#1001=IFCSIMPLEPROPERTYTEMPLATE('348U3DNlv6Se1FNLiandxt',$,'SubType','Subtype of the pipe fitting..The following suggested items should be utilized whenever possible for consistency across applications:\X2\000A\X0\BEND_15DEGREE: Changes the direction of flow through 15 degrees. \X2\000A\X0\BEND_22_5DEGREE: Changes the direction of flow through 22.5 degrees. \X2\000A\X0\BEND_25DEGREE: Changes the direction of flow through 25 degrees. \X2\000A\X0\BEND_30DEGREE: Changes the direction of flow through 30 degrees. \X2\000A\X0\BEND_45DEGREE: Changes the direction of flow through 45 degrees. \X2\000A\X0\BEND_67DEGREE: Changes the direction of flow through 67 degrees. \X2\000A\X0\BEND_76DEGREE: Changes the direction of flow through 76 degrees. \X2\000A\X0\BEND_87_5DEGREE: Changes the direction of flow through 87.5 degrees. \X2\000A\X0\BEND_90DEGREE: Changes the direction of flow through 90 degrees. \X2\000A\X0\BEND_135DEGREE: Changes the direction of flow through 135 degrees. \X2\000A\X0\BEND_180DEGREE: Changes the direction of flow through 180 degrees. \X2\000A\X0\JUNCTION_CROSS_SQUARE: Branch fitting with two opposing branches that are swept in the direction of the main flow. \X2\000A\X0\JUNCTION_CROSS_SWEEP: Branch fitting with two swept opposing branches at right angles to the main flow. \X2\000A\X0\JUNCTION_TEE_SQUARE: Branch fitting in which the branch is at an angle of 90 degrees to the main pipe. \X2\000A\X0\JUNCTION_TEE_SWEEP: Branch fitting in which the branch is curved through 90 degrees to join a main pipe tangentially. \X2\000A\X0\JUNCTION_TEE_TWINBEND: Symmetrical pipe fitting in which two short radius bends curve through 90 degree to form a single pipe. \X2\000A\X0\+I1JUNCTION_TEE_TWINELBOW: Symmetrical pipe fitting in which two elbows curve through 90 degree to form a single pipe. \X2\000A\X0\JUNCTION_TEE_Y: Branch fitting in the shape of a letter Y. \X2\000A\X0\OBSTRUCTION_CAP: Device fixed onto the end of a pipe or pipe fitting to close it. \X2\000A\X0\OBSTRUCTION_PLUG: Device fixed into the end of a pipe or pipe fitting to close it. \X2\000A\X0\OTHER: Other fitting subtype.\X2\000A\X0\NOTDEFINED: The fitting subtype is not defined. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1002=IFCSIMPLEPROPERTYTEMPLATE('0ZVZdpgiz9zfvYgTbKnrsG',$,'Material','The pipe fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1003=IFCSIMPLEPROPERTYTEMPLATE('0V99Hcp996vPBznlYqwfa_',$,'PressureClass','The test or rated pressure classification of the fitting.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1004=IFCSIMPLEPROPERTYTEMPLATE('15U1GwqpT0Ewki5Ld5aV0O',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1005=IFCSIMPLEPROPERTYTEMPLATE('1Ap0TSW3jAoQcRhGawnjHL',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1006=IFCSIMPLEPROPERTYTEMPLATE('1JIp2Nb5zBYxz5owDcNyz6',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1007=IFCSIMPLEPROPERTYTEMPLATE('2QtZpPcmz2QuZNAu$XpSED',$,'NominalDiameter','The nominal diameter of the pipe fitting. If the list contains only one value, then this nominal diameter applies to all ports. For more than value in the list, the nominal diameter value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1008=IFCSIMPLEPROPERTYTEMPLATE('2JLOPHqt57YuLVu3MwMsxB',$,'InnerDiameter','The actual inner diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1009=IFCSIMPLEPROPERTYTEMPLATE('09XU658wnB$wc3gV$zR3m6',$,'OuterDiameter','The actual outer diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1010=IFCSIMPLEPROPERTYTEMPLATE('0f2v5vA_b9uvV$tm1z6xbF',$,'EndStyleTreatment','The end-style treatment of the pipe fitting as made available from the manufacturer. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1011=IFCSIMPLEPROPERTYTEMPLATE('0LBt3nbLv7f9Ki8GDCWDmO',$,'FittingLossFactor','A factor that determines the pressure loss due to friction through the fitting.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#1012=IFCPROPERTYSETTEMPLATE('3__zsiBvbEHBzAj$pHnzMB',$,'Pset_PipeSegmentPHistory','Definition from IAI: Pipe segment performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1013,#1014));
+#1013=IFCSIMPLEPROPERTYTEMPLATE('3GImJz3xDBffJcsZA86QdO',$,'LeakageCurve','Leakage per unit length curve versus working pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1014=IFCSIMPLEPROPERTYTEMPLATE('3FOmbHGY1A2g1DIirHU0UR',$,'FluidFlowLeakage','Volumetric leakage flow rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1015=IFCPROPERTYSETTEMPLATE('1JxHb0OeH0GvTTDd69ZuFx',$,'Pset_PipeSegmentTypeCommon','Definition from IAI: Pipe segment type common attributes.\X2\000A\X0\',$,'IfcPipeSegmentType',(#1016,#1017,#1018,#1019,#1020,#1021,#1022,#1023,#1024));
+#1016=IFCSIMPLEPROPERTYTEMPLATE('3w3vrUQ0f418RdszolI46C',$,'Material','The pipe fitting material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1017=IFCSIMPLEPROPERTYTEMPLATE('0zfd_7KgDAcfCBvkjYOVhu',$,'WorkingPressure','Working pressure.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1018=IFCSIMPLEPROPERTYTEMPLATE('1WANmgWJjBkxf7eTWncclV',$,'UnitWeight','Weight per unit length.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1019=IFCSIMPLEPROPERTYTEMPLATE('2t1sO0cBT5puBRmHoQQfnh',$,'PressureRange','Allowable maximum and minimum working pressure (relative to ambient pressure).',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1020=IFCSIMPLEPROPERTYTEMPLATE('02Hti8Waj5Se1c38iCfMU0',$,'TemperatureRange','Allowable maximum and minimum temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1021=IFCSIMPLEPROPERTYTEMPLATE('3CX19rOJL8_uz0v8HbzXOS',$,'NominalDiameter','The nominal diameter of the pipe segment. If the list contains only one value, then this nominal diameter applies to all ports. For more than value in the list, the nominal diameter value applies to the port that corresponds to the list index.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1022=IFCSIMPLEPROPERTYTEMPLATE('33PPXqElrANQAgvMBd6kze',$,'InnerDiameter','The actual inner diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1023=IFCSIMPLEPROPERTYTEMPLATE('16Y7reBt1Ddw2sN9g4V_AH',$,'OuterDiameter','The actual outer diameter of the pipe. Refer to NominalDiameter for comments about interpretation of multiple items in the list.',.P_LISTVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1024=IFCSIMPLEPROPERTYTEMPLATE('1mgEHgGBX40RbTwVFXXKJj',$,'EndStyleTreatment','The end-style treatment of the pipe segment as made available from the manufacturer. If the list contains only one value, then this end-style applies to all ports. For more than one value in the list, the end-style value applies to the port that corresponds to the list index.The following suggested items should be utilized whenever possible for correlation with port enumerations:\X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\NOTDEFINED: Undefined end-style type. ',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1025=IFCPROPERTYSETTEMPLATE('0Gkjq5Y5H4RgUWSgvOQ5sQ',$,'Pset_PipeSegmentTypeGutter','Definition from IAI: Gutter segment type common attributes.\X2\000A\X0\',$,'IfcPipeSegmentType',(#1026,#1027));
+#1026=IFCSIMPLEPROPERTYTEMPLATE('0ebSoh8CL3cwWh5GnySNos',$,'Slope','Angle of the gutter to allow for drainage ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1027=IFCSIMPLEPROPERTYTEMPLATE('0awoB8Suv7nxoZ9mSdNvld',$,'FlowRating','Actual flow capacity for the gutter. Value of 0.00 means this value has not been set. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1028=IFCPROPERTYSETTEMPLATE('1BBPKFDznDOfWGrL2v1ott',$,'Pset_ProjectionElementShadingDevicePHistory','Definition from IAI: Shading device performance history attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1029,#1030));
+#1029=IFCSIMPLEPROPERTYTEMPLATE('1CFW1EOHLFrwMrPKZc8b6r',$,'TiltAngle','The angle of tilt defined in the plane perpendicular to the extrusion axis (X-Axis of the local placement). The angle shall be measured from the orientation of the Z-Axis in the local placement.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcTimeSeriesValue',$,$,$,$,.READWRITE.);
+#1030=IFCSIMPLEPROPERTYTEMPLATE('3lXdnudsbF6AtsZCeJ33kp',$,'Azimuth','The azimuth of the outward normal for the outward or upward facing surface.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcTimeSeriesValue',$,$,$,$,.READWRITE.);
+#1031=IFCPROPERTYSETTEMPLATE('390BHSeoX08gddhA20S9De',$,'Pset_PumpPHistory','Definition from IAI: Pump performance history attributes.',$,'IfcPerformanceHistory',(#1032,#1033,#1034,#1035,#1036,#1037));
+#1032=IFCSIMPLEPROPERTYTEMPLATE('21Qr8lLtT7LAN4CItXOoUe',$,'MechanicalEfficiency','The pumps operational mechanical efficiency.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1033=IFCSIMPLEPROPERTYTEMPLATE('0kufNxpAr2hed2lpYXrJ7f',$,'OverallEfficiency','The pump and motor overall operational efficiency.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1034=IFCSIMPLEPROPERTYTEMPLATE('3ZTLRxTWDByhCZn3l6v30S',$,'PressureRise','The developed pressure.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#1035=IFCSIMPLEPROPERTYTEMPLATE('0Dnqvia3f3yA5NSZ$dIfC6',$,'RotationSpeed','Pump rotational speed.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCROTATIONALFREQUENCYMEASURE',$,$,$,$,.READWRITE.);
+#1036=IFCSIMPLEPROPERTYTEMPLATE('3OeUzCSaD7ZQ5HWFwjaXUw',$,'Flowrate','The actual operational fluid flowrate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1037=IFCSIMPLEPROPERTYTEMPLATE('0NkaLd0KX3WuO$EE1VQHGp',$,'Power','The actual power consumption of the pump.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOWERMEASURE',$,$,$,$,.READWRITE.);
+#1038=IFCPROPERTYSETTEMPLATE('2xbphS04zFCRbDT_6Su1pL',$,'Pset_PumpTypeCommon','Definition from IAI: Common attributes of a pump type.',$,'IfcPumpType',(#1039,#1040,#1041,#1042,#1043,#1044,#1045,#1046,#1047));
+#1039=IFCSIMPLEPROPERTYTEMPLATE('1_TrSIZBDEVvSilL4RRiAc',$,'FlowRateRange','Allowable range of volume of fluid being pumped against the resistance specified.',.P_BOUNDEDVALUE.,'IfcMassFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1040=IFCSIMPLEPROPERTYTEMPLATE('0Xt$GfAob6V8praLGRcSdq',$,'FlowResistanceRange','Allowable range of frictional resistance against which the fluid is being pumped',.P_BOUNDEDVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1041=IFCSIMPLEPROPERTYTEMPLATE('11Q5W7Hcv7PwjXNbglR43K',$,'ConnectionSize','The connection size of the to and from the pump',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1042=IFCSIMPLEPROPERTYTEMPLATE('2OHpXjdIz8$A1RDjntKIPw',$,'CasingMaterial','Material from which the casing of the pump is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1043=IFCSIMPLEPROPERTYTEMPLATE('2sMQKQl7T0Nv_8pxyioQU4',$,'ImpellerMaterial','Material from which the impeller of the pump is constructed. In the case of a positive displacement pump, the piston acts as the impeller',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1044=IFCSIMPLEPROPERTYTEMPLATE('2ga2Ia6Lj57w191RJwjXoZ',$,'ImpellerSealMaterial','Material from which the impeller shaft seal of the pump is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1045=IFCSIMPLEPROPERTYTEMPLATE('1uLz9lIdb0FuOm6kgVDb3e',$,'TemperatureRange','Allowable operational range of the fluid temperature.',.P_BOUNDEDVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1046=IFCSIMPLEPROPERTYTEMPLATE('3An4JRNaz7vBsaa4nLkeFI',$,'NetPositiveSuctionHead','Minimum liquid pressure at the pump inlet to prevent cavitation. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1047=IFCSIMPLEPROPERTYTEMPLATE('0lRup9MoP2vAyKmseuifA6',$,'NominalRotationSpeed','Pump rotational speed under nominal conditions.',.P_SINGLEVALUE.,'IfcRotationalFrequencyMeasure',$,$,$,$,$,.READWRITE.);
+#1048=IFCPROPERTYSETTEMPLATE('2uR0e0NvL32OXZ__Vos$__',$,'Pset_SpaceHeaterPHistoryCommon','Definition from IAI: Space heater performance history common attributes.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1049,#1050,#1051,#1052,#1053,#1054,#1055,#1056,#1057,#1058,#1059,#1060));
+#1049=IFCSIMPLEPROPERTYTEMPLATE('3AzIoB9cn92R5_46TUz1nY',$,'FractionRadiantHeatTransfer','Fraction of the total heat transfer rate as the radiant heat transfer.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#1050=IFCSIMPLEPROPERTYTEMPLATE('2KDSnj6rb80gZa6eNPcF_f',$,'FractionConvectiveHeatTransfer','Fraction of the total heat transfer rate as the convective heat transfer.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#1051=IFCSIMPLEPROPERTYTEMPLATE('17VLQuhhDDfRcOTZzklwnP',$,'Effectiveness','Ratio of the real heat transfer rate to the maximum possible heat transfer rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#1052=IFCSIMPLEPROPERTYTEMPLATE('25G39dk8vDRBgIgaCSqlsu',$,'SurfaceTemperature','Average surface temperature of the component.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1053=IFCSIMPLEPROPERTYTEMPLATE('26od3hsXf0hOdmYz4fvnxT',$,'SpaceAirTemperature','Dry bulb temperature in the space.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1054=IFCSIMPLEPROPERTYTEMPLATE('2lBzSaGlH1vfHGKK9lpoI9',$,'SpaceMeanRadiantTemperature','Mean radiant temperature in the space.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1055=IFCSIMPLEPROPERTYTEMPLATE('3iAm2_tz5EfPLacdW12usX',$,'AuxiliaryEnergySourceConsumption','Auxiliary energy source consumption.',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1056=IFCSIMPLEPROPERTYTEMPLATE('0AVjYnGfHDSPES6ZQG2cqN',$,'UACurve','UA curve as function of ambient temperature and surface temperature; UA = f (Tambient, Tsurface)',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1057=IFCSIMPLEPROPERTYTEMPLATE('2EhgJsZW5CGgFZpJLUZUxr',$,'OutputCapacityCurve','Partial output capacity curve (as a function of water temperature); Q = f (Twater).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1058=IFCSIMPLEPROPERTYTEMPLATE('3Yr1Ilsnj8ze38fkLMfXJA',$,'AirResistanceCurve','Air resistance curve (w/ fan only); Pressure = f ( flow rate).',.P_REFERENCEVALUE.,'IfcTimeSeries',$,$,$,$,$,.READWRITE.);
+#1059=IFCSIMPLEPROPERTYTEMPLATE('0kpbjXTKX7pAIyCXE512U4',$,'Exponent','Characteristic exponent, slope of log(heat output) vs log (surface temperature minus environmental temperature).',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcReal',$,$,$,$,.READWRITE.);
+#1060=IFCSIMPLEPROPERTYTEMPLATE('2Jzw$nOZb3sw0dYDxR_yOu',$,'HeatOutputRate','Overall heat transfer rate.',.P_REFERENCEVALUE.,'IfcTimeSeries','IfcPowerMeasure',$,$,$,$,.READWRITE.);
+#1061=IFCPROPERTYSETTEMPLATE('1fY65MKL9E_8T7I8pRdMad',$,'Pset_SpaceHeaterTypeCommon','Definition from IAI: Space heater type common attributes.\X2\000A\X0\SoundLevel attribute deleted in IFC2x2 Pset Addendum: Use IfcSoundProperties instead.',$,'IfcSpaceHeaterType',(#1062,#1064,#1066,#1067,#1068,#1069,#1070));
+#1062=IFCSIMPLEPROPERTYTEMPLATE('3JZoegwsH1avSJL6bx0Iw6',$,'TemperatureClassification','Enumeration defining the temperature classification of the space heater surface temperature.\X2\000A\X0\low temperature - surface temperature is relatively low, usually heated by hot water or electricity.\X2\000A\X0\high temperature - surface temperature is relatively high, usually heated by gas or steam.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1063,$,$,$,.READWRITE.);
+#1063=IFCPROPERTYENUMERATION('PEnum_SpaceHeaterTemperatureClassification',(IFCLABEL('LOWTEMPERATURE'),IFCLABEL('HIGHTEMPERATURE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1064=IFCSIMPLEPROPERTYTEMPLATE('2W3JFV07T8vuEZLnA$msBC',$,'HeatingSource','Enumeration defining the heating source used by the space heater.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1065,$,$,$,.READWRITE.);
+#1065=IFCPROPERTYENUMERATION('PEnum_HeatingSource',(IFCLABEL('FUEL'),IFCLABEL('GAS'),IFCLABEL('ELECTRICITY'),IFCLABEL('HOTWATER'),IFCLABEL('STEAM'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1066=IFCSIMPLEPROPERTYTEMPLATE('0QFu1Lxyf7D8GMUKLhchlz',$,'Material','Primary material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1067=IFCSIMPLEPROPERTYTEMPLATE('1g80MkIkXFwQhyvh4c5wuR',$,'BodyMass','Overall body mass of the heater.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1068=IFCSIMPLEPROPERTYTEMPLATE('1uRifiTyr3XfoP7mibdzib',$,'ThermalMassHeatCapacity','Product of component mass and specific heat',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#1069=IFCSIMPLEPROPERTYTEMPLATE('1u9kQ1InrD3RYQdCOcCCu7',$,'OutputCapacity','Total nominal heat output as listed by the manufacturer.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1070=IFCSIMPLEPROPERTYTEMPLATE('0yxxgljN5AhO9xnimpkAnJ',$,'ThermalEfficiency','Overall Thermal Efficiency is defined as gross energy output of the heat transfer device divided by the energy input.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1071=IFCPROPERTYSETTEMPLATE('20E2r1$tn4FuqKqSkKvBNu',$,'Pset_SpaceHeaterTypeHydronic','Definition from IAI: Hydronic space heater type common attributes.\X2\000A\X0\WaterProperties attribute deleted in IFC2x2 Pset Addendum: Use IfcWaterProperties instead.',$,'IfcSpaceHeaterType',(#1072,#1073));
+#1072=IFCSIMPLEPROPERTYTEMPLATE('2ly0s9TBf178VFXqCxBZNX',$,'TubingLength','Water tube length inside the component.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1073=IFCSIMPLEPROPERTYTEMPLATE('30K80RlhXDqeFagD1uH$ua',$,'WaterContent','Weight of water content within the heater.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1074=IFCPROPERTYSETTEMPLATE('0qXanxBTH25Av$MSHuhope',$,'Pset_SpaceThermalPHistory','Definition from IAI: Thermal and air flow conditions of a space or zone. HISTORY: New property set in IFC 2x2.',$,'IfcPerformanceHistory',(#1075,#1076,#1077,#1078,#1079,#1080));
+#1075=IFCSIMPLEPROPERTYTEMPLATE('2stOi7ZlnF7xMpFjhq3Czc',$,'CoolingAirFlowRate','Cooling air flow rate in the space. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1076=IFCSIMPLEPROPERTYTEMPLATE('2JCJqmNozAa9RN1pioz22q',$,'HeatingAirFlowRate','Heating air flow rate in the space. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1077=IFCSIMPLEPROPERTYTEMPLATE('3LfFIilpX4IAIBqdlK_mW5',$,'VentilationAirFlowRate','Ventilation air flow rate in the space. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1078=IFCSIMPLEPROPERTYTEMPLATE('0lKbLwCmf6SwniabXSCZ_j',$,'ExhaustAirFlowRate','Exhaust air flow rate in the space. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMETRICFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1079=IFCSIMPLEPROPERTYTEMPLATE('0xgx8YYgLD9P0HsozjH2ni',$,'SpaceTemperature','Temperature of the space. ',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCTHERMODYNAMICTEMPERATUREMEASURE',$,$,$,$,.READWRITE.);
+#1080=IFCSIMPLEPROPERTYTEMPLATE('1fIgi6TdX4xhxvwaeRG6md',$,'SpaceRelativeHumidity','The relative humidity of the space.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPOSITIVERATIOMEASURE',$,$,$,$,.READWRITE.);
+#1081=IFCPROPERTYSETTEMPLATE('34xl0ut0T0UeibpTmRD9ll',$,'Pset_TankTypeCommon','Definition from IAI: Common attributes of a tank type.',$,'IfcTankType',(#1082,#1084,#1086,#1087,#1088,#1089,#1090,#1091,#1092,#1093));
+#1082=IFCSIMPLEPROPERTYTEMPLATE('1yHQFyNkj4oBq4EUulwy6M',$,'Type','Defines the types of tank that may be specified where: \X2\000A000A\X0\BreakPressure =\X2\0009\X0\ Tank that breaks the hydraulic pressure in a distribution system\X2\000A\X0\Expansion =\X2\0009\X0\ Tank, connected to the primary circuit of a hot water system that accommodates increase in volume of the water when heated\X2\000A\X0\FeedAndExpansion =\X2\0009\X0\ Tank that supplies cold water to a hot water system and also accommodates increase in volume of the water when heated\X2\000A\X0\GasStorage_Butane =\X2\0009\X0\ Main tank to which commercial butane is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\GasStorage_LPG =\X2\0009\X0\ Main tank to which liquefied petroleum gas is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\GasStorage_Propane =\X2\0009\X0\ Main tank to which commercial propane is delivered and from which it is supplied to a gas distribution system.\X2\000A\X0\OilService =\X2\0009\X0\ Secondary tank from which oil fuel is fed to a single oil fuel burning appliance\X2\000A\X0\OilStorage =\X2\0009\X0\ Main tank to which oil fuel is delivered and from which it is supplied to an oil fuel burning appliance or oil service tank.\X2\000A\X0\PressureVessel = Tank that stores fluid under pressure.\X2\000A\X0\WaterStorage_General =\X2\0009\X0\ Tank that stores water sufficient to meet general requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_Potable =\X2\0009\X0\ Tank that stores water sufficient to meet potable water requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_Process =\X2\0009\X0\ Tank that stores water sufficient to meet process and/or production requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\WaterStorage_CoolingTowerMakeup =\X2\0009\X0\ Tank that stores water sufficient to meet cooling tower make up water requirements for a designated period of time and supplies it to points of outlet\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1083,$,$,$,.READWRITE.);
+#1083=IFCPROPERTYENUMERATION('PEnum_TankType',(IFCLABEL('BREAKPRESSURE'),IFCLABEL('EXPANSION'),IFCLABEL('FEEDANDEXPANSION'),IFCLABEL('GASSTORAGEBUTANE'),IFCLABEL('GASSTORAGELIQUIFIEDPETROLEUMGAS'),IFCLABEL('GASSTORAGEPROPANE'),IFCLABEL('OILSERVICE'),IFCLABEL('OILSTORAGE'),IFCLABEL('PRESSUREVESSEL'),IFCLABEL('WATERSTORAGEGENERAL'),IFCLABEL('WATERSTORAGEPOTABLE'),IFCLABEL('WATERSTORAGEPROCESS'),IFCLABEL('WATERSTORAGECOOLINGTOWERMAKEUP'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1084=IFCSIMPLEPROPERTYTEMPLATE('3siS99iwn3mfn1IIGR6rlE',$,'AccessType','Defines the types of access (or cover) to a tank that may be specified.\X2\000A000A\X0\Note that covers are generally specified for rectangular tanks. For cylindrical tanks, access will normally be via a manhole.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1085,$,$,$,.READWRITE.);
+#1085=IFCPROPERTYENUMERATION('PEnum_TankAccessType',(IFCLABEL('NONE'),IFCLABEL('LOOSECOVER'),IFCLABEL('MANHOLE'),IFCLABEL('SECUREDCOVER'),IFCLABEL('SECUREDCOVERWITHMANHOLE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1086=IFCSIMPLEPROPERTYTEMPLATE('3SnPqe4PHAyQ8KfA876Zhr',$,'NominalLengthOrDiameter','The nominal length or, in the case of a vertical cylindrical tank, the nominal diameter of the tank',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1087=IFCSIMPLEPROPERTYTEMPLATE('2pVMcwVsTEhwwLnQmRdv6N',$,'NominalWidthOrDiameter','The nominal width or, in the case of a horizontal cylindrical tank, the nominal diameter of the tank.\X2\000A000A\X0\Note: Not required for a vertical cylindrical tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1088=IFCSIMPLEPROPERTYTEMPLATE('2eh1J_zI5EqxFONCZMkzro',$,'NominalDepth','The nominal depth of the tank.\X2\000A000A\X0\Note: Not required for a horizontal cylindrical tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1089=IFCSIMPLEPROPERTYTEMPLATE('2DwkHMECTAiO1xRuKkc$L1',$,'NominalCapacity','The nominal or design volumetric capacity of the tank.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1090=IFCSIMPLEPROPERTYTEMPLATE('2vIJtTzET2MwLpppNkwRvJ',$,'EffectiveCapacity','The effective or actual volumetric capacity of the tank.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1091=IFCSIMPLEPROPERTYTEMPLATE('2qaoe8GHj99fgJSyXW_xC1',$,'OperatingWeight','Operating weight of the tank including all of its contents.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1092=IFCSIMPLEPROPERTYTEMPLATE('25PBFp4jfAvP7OUH4BDMed',$,'Material','Material from which the tank is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1093=IFCSIMPLEPROPERTYTEMPLATE('0BxGdvIA18HwtCXInKI4wb',$,'MaterialThickness','Thickness of the material from which the tank is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1094=IFCPROPERTYSETTEMPLATE('20rMKRPenE68wNEhY_xUzX',$,'Pset_TankTypeExpansion','Definition from IAI: Common attributes of an expansion type tank.',$,'IfcTankType',(#1095,#1096,#1097));
+#1095=IFCSIMPLEPROPERTYTEMPLATE('3NWnAkdvLBpvJLoFPhFOEM',$,'ChargePressure','Nominal or design operating pressure of the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1096=IFCSIMPLEPROPERTYTEMPLATE('1JxFlxYRXCduh2f6kJY3JU',$,'PressureRegulatorSetting','Pressure that is automatically maintained in the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1097=IFCSIMPLEPROPERTYTEMPLATE('1DcqgEXNH5qggIZMEgYZhv',$,'ReliefValveSetting','Pressure at which the relief valve activates. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1098=IFCPROPERTYSETTEMPLATE('2AKdDVlNH2Tv9JvTWNDTKJ',$,'Pset_TankTypePreformed','Definition from IAI: Fixed vessel manufactured as a single unit with one or more compartments for storing a liquid.\X2\000A000A\X0\Pset renamed from Pset_TankTypePreformedTank to Pset_TankTypePreformed in IFC2x2 Pset Addendum.',$,'IfcTankType',(#1099,#1101,#1103,#1104));
+#1099=IFCSIMPLEPROPERTYTEMPLATE('2$$3idrb50jA5MSx184gn4',$,'PatternType','Defines the types of pattern (or shape of a tank that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1100,$,$,$,.READWRITE.);
+#1100=IFCPROPERTYENUMERATION('PEnum_TankPatternType',(IFCLABEL('HORIZONTALCYLINDER'),IFCLABEL('VERTICALCYLINDER'),IFCLABEL('RECTANGULAR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1101=IFCSIMPLEPROPERTYTEMPLATE('01YsBiFOHCTf2ehlWg6p1f',$,'EndShapeType','Defines the types of end shapes that can be used for preformed tanks. The convention for reading these enumerated values is that for a vertical cylinder, the first value is the base and the second is the top; for a horizontal cylinder, the order of reading should be left to right. For a speherical tank, the value UNSET should be used.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1102,$,$,$,.READWRITE.);
+#1102=IFCPROPERTYENUMERATION('PEnum_EndShapeType',(IFCLABEL('CONCAVECONVEX'),IFCLABEL('FLATCONVEX'),IFCLABEL('CONVEXCONVEX'),IFCLABEL('CONCAVEFLAT'),IFCLABEL('FLATFLAT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
+#1103=IFCSIMPLEPROPERTYTEMPLATE('1ZPdjeDmX5eO4wasWMhFKz',$,'FirstCurvatureRadius','FirstCurvatureRadius should be defined as the base or left side radius of curvature value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1104=IFCSIMPLEPROPERTYTEMPLATE('0IiaMqMV9BrQZK3TukeEEc',$,'SecondCurvatureRadius','SecondCurvatureRadius should be defined as the top or right side radius of curvature value.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1105=IFCPROPERTYSETTEMPLATE('1uXoy$$x5FCRCpdnPlhWRW',$,'Pset_TankTypePressureVessel','Definition from IAI: Common attributes of a pressure vessel.',$,'IfcTankType',(#1106,#1107,#1108));
+#1106=IFCSIMPLEPROPERTYTEMPLATE('0da6C6QfnFSBdqeqPGWNDi',$,'ChargePressure','Nominal or design operating pressure of the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1107=IFCSIMPLEPROPERTYTEMPLATE('1M3WhFhgP0w9BlL97aeGFp',$,'PressureRegulatorSetting','Pressure that is automatically maintained in the tank. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1108=IFCSIMPLEPROPERTYTEMPLATE('2B8uzdbX1F6fKAyKwJ0YPi',$,'ReliefValveSetting','Pressure at which the relief valve activates. ',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1109=IFCPROPERTYSETTEMPLATE('1TrplXo551nf9YWkVXUbIu',$,'Pset_TankTypeSectional','Definition from IAI: Fixed vessel constructed from sectional parts with one or more compartments for storing a liquid.\X2\000A000A\X0\Note (1): All sectional construction tanks are considered to be rectangular by default.\X2\000A\X0\Note (2): Generally, it is not expected that sectional construction tanks will be used for the purposes of gas storage.\X2\000A000A\X0\Pset renamed from Pset_TankTypeSectionalTank to Pset_TankTypeSectional in IFC2x2 Pset Addendum.',$,'IfcTankType',(#1110,#1111,#1112));
+#1110=IFCSIMPLEPROPERTYTEMPLATE('1Te5FOGKjFyeYILaii658n',$,'NumberOfSections','Number of sections used in the construction of the tank\X2\000A000A\X0\Note: All sections assumed to be the same size.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1111=IFCSIMPLEPROPERTYTEMPLATE('02MohtjlzDef4peBknt$Q2',$,'SectionLength','The length of a section used in the construction of the tank',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1112=IFCSIMPLEPROPERTYTEMPLATE('0qzXsyBJrDTfT_fuVgV8oy',$,'SectionWidth','The width of a section used in the construction of the tank.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1113=IFCPROPERTYSETTEMPLATE('22A7wbxHv6ufYxv6E7RBhW',$,'Pset_TubeBundleTypeCommon','Definition from IAI: Tube bundle type common attributes.\X2\000A\X0\',$,'IfcTubeBundleType',(#1114,#1115,#1116,#1117,#1118,#1119,#1120,#1121,#1122,#1123,#1124,#1125,#1126,#1127,#1128));
+#1114=IFCSIMPLEPROPERTYTEMPLATE('1ftS6toSv1EfhnrEVFNoJ9',$,'NumberOfRows','Number of tube rows in the tube bundle assembly.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1115=IFCSIMPLEPROPERTYTEMPLATE('0YI6ziKYvC0QLYqb$RiiEl',$,'StaggeredRowSpacing','Staggered tube row spacing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1116=IFCSIMPLEPROPERTYTEMPLATE('3Z_ranHjH0cBhMTYyBK_I5',$,'InLineRowSpacing','In-line tube row spacing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1117=IFCSIMPLEPROPERTYTEMPLATE('3AtFjjfNT6Y841KqaX3WtJ',$,'NumberOfCircuits','Number of parallel fluid tube circuits.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1118=IFCSIMPLEPROPERTYTEMPLATE('00DQqh3CDDXeS9LO9BbOPl',$,'FoulingFactor','Fouling factor of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcThermalResistanceMeasure',$,$,$,$,$,.READWRITE.);
+#1119=IFCSIMPLEPROPERTYTEMPLATE('2xww5pWJbBcge3lJ7iOjSU',$,'ThermalConductivity','The thermal conductivity of the tube.',.P_SINGLEVALUE.,'IfcThermalConductivityMeasure',$,$,$,$,$,.READWRITE.);
+#1120=IFCSIMPLEPROPERTYTEMPLATE('3WpYvSrXf2SAcNchAIjOPK',$,'Length','Length of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1121=IFCSIMPLEPROPERTYTEMPLATE('2GY9X4VwT3xuLFaZtAz0$V',$,'Volume','Total volume of fluid in the tubes and their headers.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1122=IFCSIMPLEPROPERTYTEMPLATE('0vRp9j1Wz3ch3de07xnQiT',$,'NominalDiameter','Nominal diameter or width of the tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1123=IFCSIMPLEPROPERTYTEMPLATE('3ocL3ZBij8jwBhDu8RU6Pp',$,'OutsideDiameter','Actual outside diameter of the tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1124=IFCSIMPLEPROPERTYTEMPLATE('1aQO4gJ_X4tx$ptJDaRsqq',$,'InsideDiameter','Actual inner diameter of the tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1125=IFCSIMPLEPROPERTYTEMPLATE('3kPNBcnqz8xwJ4Y5_ceZHH',$,'HorizontalSpacing','Horizontal spacing between tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1126=IFCSIMPLEPROPERTYTEMPLATE('1A$fyLi_5FaB1$hotwqDK2',$,'VerticalSpacing','Vertical spacing between tubes in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1127=IFCSIMPLEPROPERTYTEMPLATE('2Kyqo_yZX0gOUBmWEz6t8A',$,'Material','Material used for construction of the tubes.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1128=IFCSIMPLEPROPERTYTEMPLATE('288taIhcn16wFJdhB1tK$A',$,'HasTurbulator','TRUE if the tube has a turbulator, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1129=IFCPROPERTYSETTEMPLATE('0MXGb7V1D7lBAaFpLqZGKF',$,'Pset_TubeBundleTypeFinned','Definition from IAI: Finned tube bundle type attributes.\X2\000A\X0\Contains the attributes related to the fins attached to a tube in a finned tube bundle such as is commonly found in coils.\X2\000A\X0\',$,'IfcTubeBundleType',(#1130,#1131,#1132,#1133,#1134,#1135,#1136,#1137,#1138));
+#1130=IFCSIMPLEPROPERTYTEMPLATE('36PSf78OL1W8GxSaDAnICI',$,'Spacing','Distance between fins on a tube in the tube bundle.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1131=IFCSIMPLEPROPERTYTEMPLATE('20YINZOCXCOvdxbMYkXQyv',$,'Thickness','Thickness of the fin.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1132=IFCSIMPLEPROPERTYTEMPLATE('2BKlEr1AD7duYGuVDvs1q2',$,'ThermalConductivity','The thermal conductivity of the fin.',.P_SINGLEVALUE.,'IfcThermalConductivityMeasure',$,$,$,$,$,.READWRITE.);
+#1133=IFCSIMPLEPROPERTYTEMPLATE('3xSuiW$LD0UPRlvC6oOLa8',$,'Length','Length of the fin as measured parallel to the direction of airflow.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1134=IFCSIMPLEPROPERTYTEMPLATE('3eNuLfUVX3Dhcab3O$hQU6',$,'Height','Length of the fin as measured perpendicular to the direction of airflow.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1135=IFCSIMPLEPROPERTYTEMPLATE('0RHYrt_Nz36ADKtVCAEVsW',$,'Diameter','Actual diameter of a fin for circular fins only.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1136=IFCSIMPLEPROPERTYTEMPLATE('2Z3VQxrlD0BwjGGtLPJZPv',$,'Material','Material used for construction of the fins.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1137=IFCSIMPLEPROPERTYTEMPLATE('3w$n8zOxbAnQxgPLyu$BD0',$,'FinCorrugatedType','Description of a fin corrugated type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1138=IFCSIMPLEPROPERTYTEMPLATE('07i5Xlti15qPrlIxmr9Xfd',$,'HasCoating','TRUE if the fin has a coating, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1139=IFCPROPERTYSETTEMPLATE('3InpMfa6L2Vg5$Wz9yJrlG',$,'Pset_UnitaryEquipmentTypeAirConditioningUnit','Definition from IAI: Air conditioning unit equipment type attributes.\X2\000A\X0\Note that these attributes were formely Pset_PackagedACUnit prior to IFC2x2.\X2\000A\X0\HeatingEnergySource attribute deleted in IFC2x2 Pset Addendum: Use IfcEnergyProperties, IfcFuelProperties, etc. instead.',$,'IfcUnitaryEquipmentType',(#1140,#1141,#1142,#1143,#1144,#1145,#1146,#1147,#1148));
+#1140=IFCSIMPLEPROPERTYTEMPLATE('0J3TZh24j23R7ugFScVZUP',$,'SensibleCoolingCapacity','Sensible cooling capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1141=IFCSIMPLEPROPERTYTEMPLATE('1Ugu0J8$L9bORcajgpQOjo',$,'LatentCoolingCapacity','Latent cooling capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1142=IFCSIMPLEPROPERTYTEMPLATE('2MHmBzlV5Fpep7i9sUTz0v',$,'CoolingEfficiency','Coefficient of Performance: Ratio of cooling energy output to energy input under full load operating conditions per ARI Standards 210/240, 270, 275, 360, 340 and 365. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1143=IFCSIMPLEPROPERTYTEMPLATE('0Tb_nJ3NPAMBxE13sBtoP6',$,'HeatingCapacity','Heating capacity of the PackagedACUnit per ARI Standards 210/240, 270, 275, 360, 340 and 365 for heat pumps, AFUE for fuel burning and NEMA for electric heat. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1144=IFCSIMPLEPROPERTYTEMPLATE('08ToHUh3vAB93iYSHa6sBO',$,'HeatingEfficiency','Heating efficiency of the PackagedACUnit under full load heating conditions per ARI Standards 210/240, 270, 275, 360, 340 and 365 for heat pumps, AFUE for fuel burning and NEMA for electric heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1145=IFCSIMPLEPROPERTYTEMPLATE('3N4GlgsaH1Xx20jNRl62gd',$,'CondenserFlowrate','Flow rate of fluid through the condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1146=IFCSIMPLEPROPERTYTEMPLATE('2dAZiaBtb5TufdzccDt_AQ',$,'CondenserEnteringTemperature','Temperature of fluid entering condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1147=IFCSIMPLEPROPERTYTEMPLATE('2m1wMqJ3HEQe1$hUog1qYj',$,'CondenserLeavingTemperature','Termperature of fluid leaving condenser per manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1148=IFCSIMPLEPROPERTYTEMPLATE('07WA3IPXH2LBVBKMKJfcY$',$,'OutsideAirFlowrate','Flow rate of outside air entering the PackagedACUnit per the manufacturer''s listing (if available) ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1149=IFCPROPERTYSETTEMPLATE('0vsrmzilTEtObiToetppsG',$,'Pset_UnitaryEquipmentTypeAirHandler','Definition from IAI: Air handler unitary equipment type attributes.\X2\000A\X0\Note that these attributes were formerly Pset_AirHandler prior to IFC2x2.\X2\000A\X0\',$,'IfcUnitaryEquipmentType',(#1150,#1152,#1154));
+#1150=IFCSIMPLEPROPERTYTEMPLATE('20jY7fc3fD_xbInDrignAL',$,'AirHandlerConstruction','Enumeration defining how the air handler might be fabricated. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1151,$,$,$,.READWRITE.);
+#1151=IFCPROPERTYENUMERATION('PEnum_AirHandlerConstruction',(IFCLABEL('MANUFACTUREDITEM'),IFCLABEL('CONSTRUCTEDONSITE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1152=IFCSIMPLEPROPERTYTEMPLATE('2w_M1PTZv9mgVKoXp4qNA6',$,'AirHandlerFanCoilArrangement','Enumeration defining the arrangement of the supply air fan and the cooling coil. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1153,$,$,$,.READWRITE.);
+#1153=IFCPROPERTYENUMERATION('PEnum_AirHandlerFanCoilArrangement',(IFCLABEL('BLOWTHROUGH'),IFCLABEL('DRAWTHROUGH'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1154=IFCSIMPLEPROPERTYTEMPLATE('2RYnNYiUbC2xRkGwd2S0Xl',$,'DualDeck','Does the AirHandler have a dual deck? TRUE = Yes, FALSE = No. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1155=IFCPROPERTYSETTEMPLATE('2Q41ym3KHETgxnlfbdg0gH',$,'Pset_ValvePHistory','Definition from IAI: Valve performance history common attributes of a typical 2 port pattern type valve.\X2\000A\X0\',$,'IfcPerformanceHistory',(#1156,#1157,#1158));
+#1156=IFCSIMPLEPROPERTYTEMPLATE('1Z03FKM5P9vhYb513ksBqg',$,'PercentageOpen','The ratio between the amount that the valve is open to the full open position of the valve.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCRATIOMEASURE',$,$,$,$,.READWRITE.);
+#1157=IFCSIMPLEPROPERTYTEMPLATE('35F4bWHsn23uWvpHpXHbQb',$,'MeasuredFlowRate','The rate of flow of a fluid measured across the valve.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCMASSFLOWRATEMEASURE',$,$,$,$,.READWRITE.);
+#1158=IFCSIMPLEPROPERTYTEMPLATE('0t3w3Twxz6dPBmPKh8x0Ng',$,'MeasuredPressureDrop','The actual pressure drop in the fluid measured across the valve.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCPRESSUREMEASURE',$,$,$,$,.READWRITE.);
+#1159=IFCPROPERTYSETTEMPLATE('0z3N6796n4c9KeTc4_4aNI',$,'Pset_ValveTypeAirRelease','Definition from IAI: Valve used to release air from a pipe or fitting. \X2\000A\X0\Note that an air release valve is constrained to have a single port pattern\X2\000A\X0\',$,'IfcValveType',(#1160));
+#1160=IFCSIMPLEPROPERTYTEMPLATE('1PFcrCtQn1mxeCikhIE4Lu',$,'IsAutomatic','Indication of whether the valve is automatically operated (TRUE) or manually operated (FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1161=IFCPROPERTYSETTEMPLATE('2KWvfyXvXA4O2_cNx1cjwt',$,'Pset_ValveTypeCommon','Definition from IAI: Valve type common attributes.\X2\000A\X0\',$,'IfcValveType',(#1162,#1164,#1166,#1168,#1169,#1170,#1171,#1172,#1173,#1174));
+#1162=IFCSIMPLEPROPERTYTEMPLATE('0Vtv3zCYrCFgMhNZabAV25',$,'ValvePattern','The configuration of the ports of a valve according to either the linear route taken by a fluid flowing through the valve or by the number of ports where:\X2\000A000A\X0\SINGLEPORT = Valve that has a single entry port from the system that it serves, the exit port being to the surrounding environment.\X2\000A\X0\ANGLED_2_PORT = Valve in which the direction of flow is changed through 90 degrees\X2\000A\X0\STRAIGHT_2_PORT = Valve in which the flow is straight through\X2\000A\X0\STRAIGHT_3_PORT = Valve with three separate ports\X2\000A\X0\CROSSOVER_4_PORT = Valve with 4 separate ports\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1163,$,$,$,.READWRITE.);
+#1163=IFCPROPERTYENUMERATION('PEnum_ValvePattern',(IFCLABEL('SINGLEPORT'),IFCLABEL('ANGLED_2_PORT'),IFCLABEL('STRAIGHT_2_PORT'),IFCLABEL('STRAIGHT_3_PORT'),IFCLABEL('CROSSOVER_4_PORT'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1164=IFCSIMPLEPROPERTYTEMPLATE('1Fv8j5r5TDUeEBrXXZIeqI',$,'ValveOperation','The method of valve operation where:\X2\000A000A\X0\DROPWEIGHT = A valve that is closed by the action of a weighted lever being released, the weight normally being prevented from dropping by being held by a wire, the closure normally being made by the action of heat on a fusible link in the wire\X2\000A\X0\FLOAT = A valve that is opened and closed by the action of a float that rises and falls with water level. The float may be a ball attached to a lever or other mechanism\X2\000A\X0\HYDRAULIC = A valve that is opened and closed by hydraulic actuation\X2\000A\X0\LEVER = A valve that is opened and closed by the action of a lever rotating the gate within the valve.\X2\000A\X0\LOCKSHIELD = A valve that requires the use of a special lockshield key for opening and closing, the operating mechanism being protected by a shroud during normal operation.\X2\000A\X0\MOTORIZED = A valve that is opened and closed by the action of an electric motor on an actuator\X2\000A\X0\PNEUMATIC = A valve that is opened and closed by pneumatic actuation\X2\000A\X0\SOLENOID = A valve that is normally held open by a magnetic field in a coil acting on the gate but that is closed immediately if the electrical current generating the magnetic field is removed. \X2\000A\X0\SPRING = A valve that is normally held in position by the pressure of a spring on a plate but that may be caused to open if the pressure of the fluid is sufficient to overcome the spring pressure. \X2\000A\X0\THERMOSTATIC = A valve in which the ports are opened or closed to maintain a required predetermined temperature.\X2\000A\X0\WHEEL = A valve that is opened and closed by the action of a wheel moving the gate within the valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1165,$,$,$,.READWRITE.);
+#1165=IFCPROPERTYENUMERATION('PEnum_ValveOperation',(IFCLABEL('DROPWEIGHT'),IFCLABEL('FLOAT'),IFCLABEL('HYDRAULIC'),IFCLABEL('LEVER'),IFCLABEL('LOCKSHIELD'),IFCLABEL('MOTORIZED'),IFCLABEL('PNEUMATIC'),IFCLABEL('SOLENOID'),IFCLABEL('SPRING'),IFCLABEL('THERMOSTATIC'),IFCLABEL('WHEEL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1166=IFCSIMPLEPROPERTYTEMPLATE('25B0g3DSv2zvBpYLXKAN4W',$,'ValveMechanism','The mechanism by which the valve function is achieved where:\X2\000A000A\X0\BALL Valve that has a ported ball that can be turned relative to the body seat ports\X2\000A\X0\BUTTERFLY Valve in which a streamlined disc pivots about a diametric axis\X2\000A\X0\CONFIGUREDGATE Screwdown valve in which the closing gate is shaped in a configured manner to have a more precise control of pressure and flow change across the valve.\X2\000A\X0\GLAND Valve with a tapered seating, in which a rotatable plug is retained by means of a gland and gland packing\X2\000A\X0\GLOBE Screwdown valve that has a spherical body\X2\000A\X0\LUBRICATEDPLUG Plug valve in which a lubricant is injected under pressure between the plug face and the body\X2\000A\X0\NEEDLE Valve for regulating the flow in or from a pipe, in which a slender cone moves along the axis of flow to close against a fixed conical seat\X2\000A\X0\PARALLELSLIDE Screwdown valve that has a machined plate that slides in formed grooves to form a seal\X2\000A\X0\PLUG Valve that has a ported plug that can be turned relative to the body seat ports\X2\000A\X0\WEDGEGATE Screwdown valve that has a wedge shaped plate fitting into tapered guides to form a seal',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1167,$,$,$,.READWRITE.);
+#1167=IFCPROPERTYENUMERATION('PEnum_ValveMechanism',(IFCLABEL('BALL'),IFCLABEL('BUTTERFLY'),IFCLABEL('CONFIGUREDGATE'),IFCLABEL('GLAND'),IFCLABEL('GLOBE'),IFCLABEL('LUBRICATEDPLUG'),IFCLABEL('NEEDLE'),IFCLABEL('PARALLELSLIDE'),IFCLABEL('PLUG'),IFCLABEL('WEDGEGATE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1168=IFCSIMPLEPROPERTYTEMPLATE('2Rr51IBg14nx89jRxjK9io',$,'Size','The size of the connection to the valve (or to each connection for faucets, mixing valves, etc.)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1169=IFCSIMPLEPROPERTYTEMPLATE('3m$$bRgInEMhJr18ZSYpnT',$,'BodyMaterial','Material from which the body of the valve is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1170=IFCSIMPLEPROPERTYTEMPLATE('0xBNCgLWH4yeTzBzcc9M1f',$,'OperatingMechanismMaterial','Material from which the operating mechanism (gate, globe, plug, needle, clack etc.) of the valve is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1171=IFCSIMPLEPROPERTYTEMPLATE('1JAKgws9zBih8jKG_eAfie',$,'TestPressure','The maximum pressure to which the valve has been subjected under test',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1172=IFCSIMPLEPROPERTYTEMPLATE('0Yd68bKA9FPvT2pTuWWW$U',$,'WorkingPressure','The normally expected maximum working pressure of the valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1173=IFCSIMPLEPROPERTYTEMPLATE('0GxXoeIm18pf53t_LXO5DF',$,'FlowCoefficient','Flow coefficient (the quantity of fluid that passes through a fully open valve at unit pressure drop), typically expressed as the Kv or Cv value for the valve.',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#1174=IFCSIMPLEPROPERTYTEMPLATE('11ddS1OQD51gBskJB9K6EL',$,'CloseOffRating','Close off rating.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1175=IFCPROPERTYSETTEMPLATE('1PhhWAmnT5zuFqwSr4Q01n',$,'Pset_ValveTypeDrawOffCock','Definition from BS6100 250 6223: A small diameter valve, used to drain water from a cistern or water filled system.',$,'IfcValveType',(#1176));
+#1176=IFCSIMPLEPROPERTYTEMPLATE('2sit0jWD9COh_MuX$677iN',$,'HasHoseUnion','Indicates whether the drawoff cock is fitted with a hose union connection (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1177=IFCPROPERTYSETTEMPLATE('13ao3jQyn3ABSFZAY$dZFC',$,'Pset_ValveTypeFaucet','Definition from BS6100: A small diameter valve, with a free outlet, from which water is drawn.',$,'IfcValveType',(#1178,#1180,#1182,#1184,#1185));
+#1178=IFCSIMPLEPROPERTYTEMPLATE('3gzWLkF8D2JRWG6NtTRWcQ',$,'FaucetType','Defines the range of faucet types that may be specified where:\X2\000A000A\X0\Bib =\X2\0009\X0\ Faucet with a horizontal inlet and a nozzle that discharges downwards.\X2\000A\X0\Globe =\X2\0009\X0\ Faucet fitted through the end of a bath, with a horizontal inlet, a partially spherical body and a vertical nozzle.\X2\000A\X0\Diverter =\X2\0009\X0\Combination faucet assembly with a valve to enable the flow of mixed water to be transferred to a showerhead.\X2\000A\X0\DividedFlowCombination =\X2\0009\X0\ Combination faucet assembly in which hot and cold water are kept separate until emerging from a common nozzle\X2\000A\X0\Pillar =\X2\0009\X0\ Faucet that has a vertical inlet and a nozzle that discharges downwards\X2\000A\X0\SingleOutletCombination =\X2\0009\X0\ Combination faucet assembly in which hot and cold water mix before emerging from a common nozzle\X2\000A\X0\Spray =\X2\0009\X0\ Faucet with a spray outlet\X2\000A\X0\SprayMixing =\X2\0009\X0\ Spray faucet connected to hot and cold water supplies that delivers water at a temperature determined during use.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1179,$,$,$,.READWRITE.);
+#1179=IFCPROPERTYENUMERATION('PEnum_FaucetType',(IFCLABEL('BIB'),IFCLABEL('GLOBE'),IFCLABEL('DIVERTER'),IFCLABEL('DIVIDEDFLOWCOMBINATION'),IFCLABEL('PILLAR'),IFCLABEL('SINGLEOUTLETCOMBINATION'),IFCLABEL('SPRAY'),IFCLABEL('SPRAYMIXING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1180=IFCSIMPLEPROPERTYTEMPLATE('1vEyhSzA556QUJIE3ZRI5a',$,'FaucetOperation','Defines the range of ways in which a faucet can be operated that may be specified where:\X2\000A000A\X0\CeramicDisc =\X2\0009\X0\ Quick action faucet with a ceramic seal to open or close the orifice\X2\000A\X0\LeverHandle =\X2\0009\X0\ Quick action faucet that is operated by a lever handle\X2\000A\X0\NonConcussiveSelfClosing =\X2\0009\X0\ Self closing faucet that does not induce surge pressure\X2\000A\X0\QuarterTurn =\X2\0009\X0\ Quick action faucet that can be fully opened or shut by turning the operating mechanism through 90 degrees.\X2\000A\X0\QuickAction =\X2\0009\X0\ Faucet that can be opened or closed fully with a single small movement of the operating mechanism\X2\000A\X0\ScrewDown =\X2\0009\X0\ Faucet in which a plate or disc is moved, by the rotation of a screwed spindle, to close or open the orifice.\X2\000A\X0\SelfClosing =\X2\0009\X0\ Faucet that is opened by pressure of the top of an operating spindle and is closed under the action of a spring or weight when the pressure is released\X2\000A\X0\TimedSelfClosing = \X2\0009\X0\Self closing faucet that discharges for a predetermined period of time\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1181,$,$,$,.READWRITE.);
+#1181=IFCPROPERTYENUMERATION('PEnum_FaucetOperation',(IFCLABEL('CERAMICDISC'),IFCLABEL('LEVERHANDLE'),IFCLABEL('NONCONCUSSIVESELFCLOSING'),IFCLABEL('QUATERTURN'),IFCLABEL('QUICKACTION'),IFCLABEL('SCREWDOWN'),IFCLABEL('SELFCLOSING'),IFCLABEL('TIMEDSELFCLOSING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1182=IFCSIMPLEPROPERTYTEMPLATE('33sKZpjur0vgz5fCUNBvfK',$,'FaucetFunction','Defines the operating temperature of a faucet that may be specified.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1183,$,$,$,.READWRITE.);
+#1183=IFCPROPERTYENUMERATION('PEnum_FaucetFunction',(IFCLABEL('COLD'),IFCLABEL('HOT'),IFCLABEL('MIXED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1184=IFCSIMPLEPROPERTYTEMPLATE('1P8vzEN$j6nAUX5xU6Mo32',$,'Finish','Description of the finish applied to the faucet',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1185=IFCSIMPLEPROPERTYTEMPLATE('37c80UWA14Cgl0Rpx5ZS$X',$,'FaucetTopDescription','Description of the operating mechanism/top of the faucet',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1186=IFCPROPERTYSETTEMPLATE('0kadfqOEH3JP42roHv9I52',$,'Pset_ValveTypeFlushing','Definition from IAI: Valve that flushes a predetermined quantity of water to cleanse a WC, urinal or slop hopper.\X2\000A\X0\Note that a flushing valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1187,#1188,#1189));
+#1187=IFCSIMPLEPROPERTYTEMPLATE('2N6khtTw14QwxxDK_Z$LDJ',$,'FlushingRate','The predetermined quantity of water to be flushed',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1188=IFCSIMPLEPROPERTYTEMPLATE('1GNudZCBrCIBzZpJcqbkt8',$,'HasIntegralShutOffDevice','Indication of whether the flushing valve has an integral shut off device fitted (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1189=IFCSIMPLEPROPERTYTEMPLATE('3Vkq7FUVbBsuBSl94EuKO8',$,'IsHighPressure','Indication of whether the flushing valve is suitable for use on a high pressure water main (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1190=IFCPROPERTYSETTEMPLATE('1HYd_X0355YQGaUZOkV4dB',$,'Pset_ValveTypeGasTap','Definition from IAI: A small diameter valve, used to discharge gas from a system.',$,'IfcValveType',(#1191));
+#1191=IFCSIMPLEPROPERTYTEMPLATE('0yZOdbhof9RBSblzAkZQ6m',$,'HasHoseUnion','Indicates whether the gas tap is fitted with a hose union connection (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1192=IFCPROPERTYSETTEMPLATE('3$zDfbTKz8WxeflwVwC8Ia',$,'Pset_ValveTypeIsolating','Definition from IAI: Valve that is used to isolate system components.\X2\000A\X0\Note that an isolating valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1193,#1194));
+#1193=IFCSIMPLEPROPERTYTEMPLATE('1l2uKpIOz1nuOOL$r29eDY',$,'IsNormallyOpen','If TRUE, the valve is normally open. If FALSE is is normally closed. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1194=IFCSIMPLEPROPERTYTEMPLATE('2Xk9JnQO5AVQ$Pm$DdZGLu',$,'IsolatingPurpose','Defines the purpose for which the isolating valve is used since the way in which the valve is identified as an isolating valve may be in the context of its use. Note that unless there is a contextual name for the isolating valve (as in the case of a Landing Valve on a rising fire main), then the value assigned shoulkd be UNSET',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1195,$,$,$,.READWRITE.);
+#1195=IFCPROPERTYENUMERATION('PEnum_IsolatingPurpose',(IFCLABEL('LANDING'),IFCLABEL('LANDINGWITHPRESSUREREGULATION'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1196=IFCPROPERTYSETTEMPLATE('2Am_SHn1H9lvDUCMoBaXlI',$,'Pset_ValveTypeMixing','Definition from IAI: A valve where typically the temperature of the outlet is determined by mixing hot and cold water inlet flows.',$,'IfcValveType',(#1197,#1199));
+#1197=IFCSIMPLEPROPERTYTEMPLATE('0g6xp$04zCCOXyhjcbsUSY',$,'MixerControl','Defines the form of control of the mixing valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1198,$,$,$,.READWRITE.);
+#1198=IFCPROPERTYENUMERATION('PEnum_MixingValveControl',(IFCLABEL('MANUAL'),IFCLABEL('PREDEFINED'),IFCLABEL('THERMOSTATIC'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1199=IFCSIMPLEPROPERTYTEMPLATE('0wWv7dQGz8iQUu_2IZqVhE',$,'OutletConnectionSize','The size of the pipework connection from the mixing valve.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1200=IFCPROPERTYSETTEMPLATE('2fzHzgAsP709a93BHUuSlL',$,'Pset_ValveTypePressureReducing','Definition from IAI: Valve that reduces the pressure of a fluid immediately downstream of its position in a pipeline to a preselected value or by a predetermined ratio.\X2\000A\X0\Note that a pressure reducing valve is constrained to have a 2 port pattern.\X2\000A\X0\',$,'IfcValveType',(#1201,#1202));
+#1201=IFCSIMPLEPROPERTYTEMPLATE('0CTXCm2Cb0xg0O5pfm99xk',$,'UpstreamPressure','The operating pressure of the fluid upstream of the pressure reducing valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1202=IFCSIMPLEPROPERTYTEMPLATE('1gmL6eTLn5T9jMkevwKvWB',$,'DownstreamPressure','The operating pressure of the fluid downstream of the pressure reducing valve',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1203=IFCPROPERTYSETTEMPLATE('0A$UJlsMHAIxCX5NfBOiBb',$,'Pset_ValveTypePressureRelief','Definition from IAI: Spring or weight loaded valve that automatically discharges to a safe place fluid that has built up to excessive pressure in pipes or fittings.\X2\000A\X0\Note that a pressure relief valve is constrained to have a single port pattern.\X2\000A\X0\',$,'IfcValveType',(#1204));
+#1204=IFCSIMPLEPROPERTYTEMPLATE('3nM_EJKujA5PzJMBZDp$og',$,'ReliefPressure','The pressure at which the spring or weight in the valve is set to discharge fluid',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1205=IFCPROPERTYSETTEMPLATE('23FQLmd8r06gGSfG$_vmYu',$,'Pset_VibrationIsolatorTypeCommon','Definition from IAI: Vibration isolator type common attributes.\X2\000A\X0\',$,'IfcVibrationIsolatorType',(#1206,#1207,#1208,#1209,#1210,#1211));
+#1206=IFCSIMPLEPROPERTYTEMPLATE('1sFSa_Pyb4LgANT7kEw0yh',$,'VibrationTransmissibility','The vibration transmissibility percentage.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1207=IFCSIMPLEPROPERTYTEMPLATE('3$5je__lPCyuImCA24rSFT',$,'IsolatorStaticDeflection','Static deflection of the vibration isolator.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1208=IFCSIMPLEPROPERTYTEMPLATE('10EjzGdBbD1hs9UyIj_A7E',$,'IsolatorCompressibility','The compressibility of the vibration isolator.',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1209=IFCSIMPLEPROPERTYTEMPLATE('0Nedk47Lj2eOA58YdZeYQC',$,'Height','Height of the vibration isolator before tha application of load. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1210=IFCSIMPLEPROPERTYTEMPLATE('2CtzO6DvT3bxrLryLvul2o',$,'Material','Material from which the damping element of the vibration isolator is constructed. ',.P_REFERENCEVALUE.,'IfcMaterial ',$,$,$,$,$,.READWRITE.);
+#1211=IFCSIMPLEPROPERTYTEMPLATE('3I9_dKk7rA_xS3EvouC51X',$,'MaximumSupportedWeight','The maximum weight that can be carried by the vibration isolator. ',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#1212=IFCPROPERTYSETTEMPLATE('1MkwvVFNnF3AueJSFnASur',$,'Pset_ActorCommon','Definition from IAI: A property set that enables further classification of actors, including the ability to give a number of actors to be designated as a population, the number being specified as a property to be dealt with as a single value rather than having to aggregate a number of instances of IfcActor.',$,'IfcActor',(#1213,#1214,#1215));
+#1213=IFCSIMPLEPROPERTYTEMPLATE('2fO_v3yqb5qgVPd35k1L9X',$,'NumberOfActors','The number of actors that are to be dealt with together in the population.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1214=IFCSIMPLEPROPERTYTEMPLATE('2XqS0lhFvBUvGhNBry4aB_',$,'Category','Designation of the category into which the actors in the population belong.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1215=IFCSIMPLEPROPERTYTEMPLATE('0sygUX5Hb3u8IpA51fQLGA',$,'SkillLevel','Skill level exhibited by the actor and which indicates an extent of their capability to perform actions on the artefacts upon which they can act.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1216=IFCPROPERTYSETTEMPLATE('0mTM09ZEDAAQakpM49F3Ay',$,'Pset_ProductRequirements','Definition from IAI: Categorization of the required properties of an entity that are used to determine what the level of the requirement is, to enable its performance/quality to be determined, assessed, or measured, and compared against the requirement, and then to analyze whether the entity is suitable for use within a given context..',$,'IfcProduct',(#1217,#1218,#1219,#1220,#1221,#1222,#1223,#1224,#1225,#1226));
+#1217=IFCSIMPLEPROPERTYTEMPLATE('1XLxQDYln3tgrH9NmyaXkO',$,'Name','Subject matter for which a value is to be reported.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1218=IFCSIMPLEPROPERTYTEMPLATE('2WqP0fZDDDaumoyHbQArh2',$,'Category','A reference to a classification of the degree of aggregation or granularity of topic data such as regional, local etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1219=IFCSIMPLEPROPERTYTEMPLATE('0VhO4RBUL4qRBCXyUZ4kGz',$,'GroupName','Name of grouping of topics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1220=IFCSIMPLEPROPERTYTEMPLATE('3q2HhN$lPDIBzqvXTn2Lqd',$,'Classification','A reference to a classification of the topic',.P_REFERENCEVALUE.,'IfcClassificationReference',$,$,$,$,$,.READWRITE.);
+#1221=IFCSIMPLEPROPERTYTEMPLATE('0bAQXgMqH51uwRE8Ee3ksm',$,'DemandValue','Value of the subject matter as determined using an agreed scale for what is required.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1222=IFCSIMPLEPROPERTYTEMPLATE('3o1xWS0uX9PgQ$1SwI4WWH',$,'DemandThresholdValue','Value of the subject matter above or below which a special significance is attached.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1223=IFCSIMPLEPROPERTYTEMPLATE('2XZf4E8JD1vwpkwOO8w9ND',$,'DemandImportanceValue','Importance of the topic relative to the importance of other topics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1224=IFCSIMPLEPROPERTYTEMPLATE('2ZevLs7FTC49gj3a9sZ4SJ',$,'SupplyEvaluationValue','Value of the subject matter as determined using an agreed scale for what is provided, or capable of being provided.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1225=IFCSIMPLEPROPERTYTEMPLATE('3ElVqfsJT4UfxsUK2mT_l6',$,'GapValue','Difference determined between the topic demand value and the topic supply evaluation value.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1226=IFCSIMPLEPROPERTYTEMPLATE('1DzDp332b5xxCl3E2unabI',$,'GapValueWeighted','Difference determined between the topic demand value and the topic supply evaluation value, weighted for topic demand importance value.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1227=IFCPROPERTYSETTEMPLATE('0haWkl8vz3j8fUZ9aDbGOX',$,'Pset_ProjectCommon','Definition from IAI: Common properties for a building project.',$,'IfcProject',(#1228,#1229,#1230));
+#1228=IFCSIMPLEPROPERTYTEMPLATE('2_3$o$xX1Atxq26DafII_V',$,'ConstructionMode','The type of construction action the project deals with, e.g. new construction, renovation, refurbishment, etc. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1229=IFCSIMPLEPROPERTYTEMPLATE('3Eum6BoM1EKv3s4PxJptfx',$,'BuildingPermitId','The building permit identifier for the written authorization required by building authorities before construction on a specific project can begin.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1230=IFCSIMPLEPROPERTYTEMPLATE('2EVo$JLSbE9AihUZqf96zl',$,'GrossAreaPlanned','Total planned area for the project. Used for programming the project',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1231=IFCPROPERTYSETTEMPLATE('2EirlRx7XBEhCbznWEZxij',$,'Pset_DesignPoint','Definition from IAI: A point of connection taken as a reference for hydraulic calculations in sprinkler systems. The point is assigned to an instance of IfcDistributionPort and located according to circumstances as set out by local building codes. For instance, it may be either the last elbow, tee or branch downstream of which a sprinkler array is located (where ranges are directly connected to the distribution pipe without risers or drops) or the point of connection of the riser or drop nearest the installation valves in the sprinkler array (where ranges are connected to the distribution pipe with risers or drops). Other circumstances may be referenced in local codes and the assignment of the design point must be established by a user.\X2\000A\X0\',$,'IfcDistributionPort',(#1232));
+#1232=IFCSIMPLEPROPERTYTEMPLATE('039GtPbm1F7u_pRJP9EOuO',$,'IsDesignPoint','Indicates whether an instance of IfcDistributionPort is to act as the design point for sprinkler hydraulic calculation (set TRUE) or not (either set FALSE or assumed to be FALSE where an instance of the property set is not assigned to an instance of IfcDistributionPort). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1233=IFCPROPERTYSETTEMPLATE('2lFPTE54z9MhLLsV5ogorN',$,'Pset_DrainageCatchment','Definition from IAI: Area of land that drains naturally to a given point (BS6100 modified). Used as a non type driven property set in conjunction with an appropriate instance of IfcSpatialStructureElement that is identified as a catchment using the inherited IfcRoot.Name attribute. Catchments may be nested using IfcRelNests so that subcatchment areas (as component parts of a catchment area) can be identified. A catchment area will be geometrically defined by a closed loop (closed polyline or polyloop)\X2\000A\X0\Note also that the boundary between catchment areas (watershed) is not currently identified.\X2\000A\X0\',$,'IfcSite',(#1234));
+#1234=IFCSIMPLEPROPERTYTEMPLATE('3aqx2jrKzBlxezluYx1vRR',$,'AreaDrained','The area measure enclosed within the catchment',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1235=IFCPROPERTYSETTEMPLATE('3l3o1nbjn9NgRRr__SRG6i',$,'Pset_DrainageCulvert','Definition from IAI: Covered channel or large pipe that forms a watercourse below ground level, usually under a road or railway (BS6100). Used as a non type driven property set in conjunction with an instance of IfcSystem that is classified as a culvert.\X2\000A\X0\',$,'IfcSystem',(#1236,#1237));
+#1236=IFCSIMPLEPROPERTYTEMPLATE('0tzcpEyqjE_Q1cl$sEjMUT',$,'InternalWidth','The internal width of the culvert',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1237=IFCSIMPLEPROPERTYTEMPLATE('1k$Z6t7Ef0APaDRWQDeyEp',$,'ClearDepth','The clear depth of the culvert',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1238=IFCPROPERTYSETTEMPLATE('0AmMAl4ojEgOZx1BpfYL4o',$,'Pset_DrainageOutfall','Definition from IAI: Structure through which water is discharged into a watercourse or body of water (BS6100). Used as a non type driven property set in conjunction with an instance of IfcProxy that is identified as an outfall using the inherited IfcRoot.Name attribute.\X2\000A\X0\',$,'IfcProxy',(#1239));
+#1239=IFCSIMPLEPROPERTYTEMPLATE('2ho9HIlBn1gRv5miefid_9',$,'InvertLevel','The lowest point of the outfall',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1240=IFCPROPERTYSETTEMPLATE('38buQ3TR59FP6AspHbzDBF',$,'Pset_DrainageReserve','Definition from IAI: Area exclusively reserved for the routing of drainage services. Used as a non type driven property set in conjunction with an appropriate instance of IfcSpatialStructureElement that is identified as a drainage reserve using the inherited IfcRoot.Name attribute.\X2\000A\X0\',$,'IfcSite',(#1241));
+#1241=IFCSIMPLEPROPERTYTEMPLATE('2t9RBWqxP3rBFsNtM_7G3T',$,'Width','The width of the drainage reserve',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1242=IFCPROPERTYSETTEMPLATE('1UIRuRLOD24wgUWkhM0MQb',$,'Pset_FireSuppressionTerminalTypeBreechingInlet','Definition from IAI: Symmetrical pipe fitting that unites two or more inlets into a single pipe (BS6100 330 114 adapted).',$,'IfcFireSuppressionTerminalType',(#1243,#1245,#1246,#1247,#1249,#1250));
+#1243=IFCSIMPLEPROPERTYTEMPLATE('0choSJxcz0IeZeX6aVHpxN',$,'BreechingInletType','Defines the type of breeching inlet.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1244,$,$,$,.READWRITE.);
+#1244=IFCPROPERTYENUMERATION('PEnum_BreechingInletType',(IFCLABEL('TWOWAY'),IFCLABEL('FOURWAY'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#1245=IFCSIMPLEPROPERTYTEMPLATE('3IeWXdCFn6mu0TylmeScRq',$,'InletDiameter','The inlet diameter of the breeching inlet.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1246=IFCSIMPLEPROPERTYTEMPLATE('2vvKMrhYf84xWmn1pirg2A',$,'OutletDiameter','The outlet diameter of the breeching inlet.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1247=IFCSIMPLEPROPERTYTEMPLATE('17DqBp6Rr9jvUnhdS228yd',$,'CouplingType','Defines the type coupling on the inlet of the breeching inlet.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1248,$,$,$,.READWRITE.);
+#1248=IFCPROPERTYENUMERATION('PEnum_BreechingInletCouplingType',(IFCLABEL('INSTANTANEOUS_FEMALE'),IFCLABEL('INSTANTANEOUS_MALE'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#1249=IFCSIMPLEPROPERTYTEMPLATE('1zTd7jVqz2MOc_GDalf5ST',$,'HasCaps','Does the inlet connection have protective caps.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1250=IFCSIMPLEPROPERTYTEMPLATE('3vhCxNR91ECQESv0D5nrM2',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1251=IFCPROPERTYSETTEMPLATE('2bJ$XoP6X5NQ7mUmzSQj3l',$,'Pset_FireSuppressionTerminalTypeFireHydrant','Definition from IAI: Device, fitted to a pipe, through which a temporary supply of water may be provided (BS6100 330 6107)\X2\000A000A\X0\For further details on fire hydrants, see www.firehydrant.org',$,'IfcFireSuppressionTerminalType',(#1252,#1254,#1255,#1256,#1257,#1258,#1259,#1260,#1261,#1262));
+#1252=IFCSIMPLEPROPERTYTEMPLATE('0suQG1pMPABRbblUMqELgE',$,'FireHydrantType','Defines the range of hydrant types from which the required type can be selected where:\X2\000A000A\X0\DryBarrel =\X2\0009\X0\ A hydrant that has isolating valves fitted below ground and that may be used where the possibility of water freezing is a consideration.\X2\000A\X0\WetBarrel =\X2\0009\X0\ A hydrant that has isolating valves fitted above ground and that may be used where there is no possibility of water freezing.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1253,$,$,$,.READWRITE.);
+#1253=IFCPROPERTYENUMERATION('PEnum_FireHydrantType',(IFCLABEL('DryBarrel'),IFCLABEL('WetBarrel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1254=IFCSIMPLEPROPERTYTEMPLATE('1CXRtXpdz4u9ISjzf6UCq6',$,'PumperConnectionSize','The size of a connection to which a fire hose may be connected that is then linked to a pumping unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1255=IFCSIMPLEPROPERTYTEMPLATE('1lPmUT8_P07Pyz3GlVTPMD',$,'NumberOfHoseConnections','The number of hose connections on the hydrant (excluding the pumper connection)',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1256=IFCSIMPLEPROPERTYTEMPLATE('1of4d1qxj55vv1D2gocTmi',$,'HoseConnectionSize','The size of connections to which a hose may be connected (other than that to be linked to a pumping unit).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1257=IFCSIMPLEPROPERTYTEMPLATE('0ULOtAHLP7muw1KubVQraC',$,'DischargeFlowRate','The volumetric rate of fluid discharge.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1258=IFCSIMPLEPROPERTYTEMPLATE('2hWF6j7eLAhx4jReQFaZDm',$,'FlowClass','Alphanumeric indication of the flow class of a hydrant (may be used in connection with or instead of the FlowRate property)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1259=IFCSIMPLEPROPERTYTEMPLATE('2xtj9yNaHA8QI9bHitT4E3',$,'WaterIsPotable','Indication of whether the water flow from the hydrant is potable (set TRUE) or non potable (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1260=IFCSIMPLEPROPERTYTEMPLATE('2fK5hFU8H6pf790b9PA20i',$,'PressureRating','Maximum pressure that the hydrant is manufactured to withstand.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1261=IFCSIMPLEPROPERTYTEMPLATE('1jax1hNAL0UeBDZ$bMyDy2',$,'BodyColor','Color of the body of the hydrant.\X2\000A000A\X0\Note: Consult local fire regulations for statutory colors that may be required for hydrant bodies in particular circumstances.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1262=IFCSIMPLEPROPERTYTEMPLATE('3erUIrETH5o9UtSXwt65zg',$,'CapColor','Color of the caps of the hydrant.\X2\000A000A\X0\Note: Consult local fire regulations for statutory colors that may be required for hydrant caps in particular circumstances.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1263=IFCPROPERTYSETTEMPLATE('1Hf_iOZvjAKhSpNATnFVQS',$,'Pset_FireSuppressionTerminalTypeHoseReel','Definition from IAI: A supporting framework on which a hose may be wound (BS6100 155 8201).\X2\000A000A\X0\Note that the service provided by the hose (water/foam) is determined by the context of the system onto which the hose reel is connected.',$,'IfcFireSuppressionTerminalType',(#1264,#1266,#1268,#1269,#1270,#1271,#1273,#1274));
+#1264=IFCSIMPLEPROPERTYTEMPLATE('3Ybv1fdmbDyQ95AP_Cgnju',$,'HoseReelType','Identifies the predefined types of hose arrangement from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1265,$,$,$,.READWRITE.);
+#1265=IFCPROPERTYENUMERATION('PEnum_HoseReelType',(IFCLABEL('Rack'),IFCLABEL('Reel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1266=IFCSIMPLEPROPERTYTEMPLATE('1tqNiFNTTAu91XFhs9jMa3',$,'HoseReelMountingType','Identifies the predefined types of hose reel mounting from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1267,$,$,$,.READWRITE.);
+#1267=IFCPROPERTYENUMERATION('PEnum_HoseReelMountingType',(IFCLABEL('Cabinet_Recessed'),IFCLABEL('Cabinet_SemiRecessed'),IFCLABEL('Surface'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1268=IFCSIMPLEPROPERTYTEMPLATE('2sMFb9Nrb7fQeV6OORoN0j',$,'InletConnectionSize','Size of the inlet connection to the hose reel.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1269=IFCSIMPLEPROPERTYTEMPLATE('0smyuyCkf6z8H9fADj$ObL',$,'HoseDiameter','Notional diameter (bore) of the hose.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1270=IFCSIMPLEPROPERTYTEMPLATE('23cO1Q035079GuRgM3$QpI',$,'HoseLength','Notional length of the hose fitted to the hose reel when fully extended.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1271=IFCSIMPLEPROPERTYTEMPLATE('14gAmMzfz6Kwh1AhFNH5SC',$,'HoseNozzleType','Identifies the predefined types of nozzle (in terms of spray pattern) fitted to the end of the hose from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1272,$,$,$,.READWRITE.);
+#1272=IFCPROPERTYENUMERATION('PEnum_HoseNozzleType',(IFCLABEL('Fog'),IFCLABEL('StraightStream'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1273=IFCSIMPLEPROPERTYTEMPLATE('1KhFZoVTjEYhZpyonvcRo3',$,'ClassOfService','A classification of usage of the hose reel that may be applied.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1274=IFCSIMPLEPROPERTYTEMPLATE('1gzeeMZ416m9DuoZCfYsjX',$,'ClassificationAuthority','The name of the authority that applies the classification of service to the hose reel (e.g. NFPA/FEMA)',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1275=IFCPROPERTYSETTEMPLATE('0D6KbJVzX1$97TF6u1cWrB',$,'Pset_FireSuppressionTerminalTypeSprinkler','Definition from IAI: Device for sprinkling water from a pipe under pressure over an area (BS6100 100 3432)',$,'IfcFireSuppressionTerminalType',(#1276,#1278,#1280,#1282,#1283,#1284,#1285,#1287,#1288,#1289,#1290,#1291,#1292,#1293));
+#1276=IFCSIMPLEPROPERTYTEMPLATE('0w78OMbbr1u8RGZUo4JjlM',$,'SprinklerType','Identifies the predefined types of sprinkler from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1277,$,$,$,.READWRITE.);
+#1277=IFCPROPERTYENUMERATION('PEnum_SprinklerType',(IFCLABEL('Ceiling'),IFCLABEL('Concealed'),IFCLABEL('Cut-off'),IFCLABEL('Pendant'),IFCLABEL('RecessedPendant'),IFCLABEL('Sidewall'),IFCLABEL('Upright'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1278=IFCSIMPLEPROPERTYTEMPLATE('044LqQeCzCrvXU2tudWjiT',$,'Activation','Identifies the predefined methods of sprinkler activation from which that required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1279,$,$,$,.READWRITE.);
+#1279=IFCPROPERTYENUMERATION('PEnum_SprinklerActivation',(IFCLABEL('Bulb'),IFCLABEL('FusibleSolder'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1280=IFCSIMPLEPROPERTYTEMPLATE('0fuc8PYQ96Q9s4Ye7LkRbU',$,'Response','Identifies the predefined methods of sprinkler response from which that required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1281,$,$,$,.READWRITE.);
+#1281=IFCPROPERTYENUMERATION('PEnum_SprinklerResponse',(IFCLABEL('Quick'),IFCLABEL('Standard')),$);
+#1282=IFCSIMPLEPROPERTYTEMPLATE('0GJNpaJaz8uBHFXGzi431P',$,'ActivationTemperature','The temperature at which the object is designed to activate.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1283=IFCSIMPLEPROPERTYTEMPLATE('3yrn3T1vf8yu1$UR5hMSTM',$,'CoverageArea','The area that the sprinkler is designed to protect.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1284=IFCSIMPLEPROPERTYTEMPLATE('2uGkQFUJzCpwJQxW_L6HSX',$,'HasDeflector','Indication of whether the sprinkler has a deflector (baffle) fitted to diffuse the discharge on activation (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1285=IFCSIMPLEPROPERTYTEMPLATE('1hRMN9QKv5HPWVHCIUnXkX',$,'BulbLiquidColor','The color of the liquid in the bulb for a bulb activated sprinkler. Note that the liquid color varies according to the activation temperature requirement of the sprinkler head. Note also that this property does not need to be asserted for quick response activated sprinklers.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1286,$,$,$,.READWRITE.);
+#1286=IFCPROPERTYENUMERATION('PEnum_SprinklerBulbLiquidColor',(IFCLABEL('Orange'),IFCLABEL('Red'),IFCLABEL('Yellow'),IFCLABEL('Green'),IFCLABEL('Blue'),IFCLABEL('Mauve'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1287=IFCSIMPLEPROPERTYTEMPLATE('0e6p_jztb1fwRGFpDyhl9b',$,'DischargeFlowRate','The volumetric rate of fluid discharge.',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1288=IFCSIMPLEPROPERTYTEMPLATE('2GRasVr695qQOTDsE9QAz8',$,'ResidualFlowingPressure','The residual flowing pressure in the pipeline at which the discharge flow rate is determined.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1289=IFCSIMPLEPROPERTYTEMPLATE('01QpveZwbBSOvIZ8cI6cHR',$,'DischargeCoefficient','The coefficient of flow at the sprinkler',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#1290=IFCSIMPLEPROPERTYTEMPLATE('2oKk_ybovENw4o_7Wxn8bK',$,'MaximumWorkingPressure','Maximum pressure that the object is manufactured to withstand.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#1291=IFCSIMPLEPROPERTYTEMPLATE('13sJ8aa7D32OkhQPtFMoMe',$,'ConnectionSize','Size of the inlet connection to the sprinkler.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1292=IFCSIMPLEPROPERTYTEMPLATE('2n1NCrnFz2VRkLMjEHyVQd',$,'FrameMaterial','The material used to construct the frame of the sprinkler.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1293=IFCSIMPLEPROPERTYTEMPLATE('3hIcmGldn7tOuWa9m_q50W',$,'DeflectorMaterial','The material used to construct the deflector plate.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1294=IFCPROPERTYSETTEMPLATE('2PkFiiMxDCDvfWDDQJHT1m',$,'Pset_SanitaryTerminalTypeBath','Definition from IAI: Sanitary appliance for immersion of the human body or parts of it (BS6100).',$,'IfcSanitaryTerminalType',(#1295,#1297,#1298,#1299,#1300,#1301,#1302,#1303,#1304));
+#1295=IFCSIMPLEPROPERTYTEMPLATE('2kUM$t$KDC_PpcM1HW_$Hu',$,'BathType','The property enumeration defines the types of bath that may be specified within the property set where:\X2\000A000A\X0\Domestic =\X2\0009\X0\Bath, for one person at a time, into which the whole body can be easily immersed.\X2\000A\X0\DomesticCorner =\X2\0009\X0\Bath, for one person at a time, into which the whole body can be easily immersed and in which the immersion trough is at an angle.\X2\000A\X0\Foot =\X2\0009\X0\Shallow bath for washing the feet.\X2\000A\X0\Jacuzzi =\X2\0009\X0\Whirlpool bath for more than one person\X2\000A\X0\Plunge =\X2\0009\X0\Bath, usually for more than one person at a time, into which the whole body can be easily immersed.\X2\000A\X0\Sitz =\X2\0009\X0\Bath in which a bather sits as in a chair.\X2\000A\X0\Treatment =\X2\0009\X0\Bath used for hydrotherapy purposes.\X2\000A\X0\Whirlpool =\X2\0009\X0\Bath in which an integrated device agitates the water by pumped circulation or induction of water and/or air.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1296,$,$,$,.READWRITE.);
+#1296=IFCPROPERTYENUMERATION('PEnum_BathType',(IFCLABEL('Domestic'),IFCLABEL('DomesticCorner'),IFCLABEL('Foot'),IFCLABEL('Jacuzzi'),IFCLABEL('Plunge'),IFCLABEL('Sitz'),IFCLABEL('Treatment'),IFCLABEL('Whirlpool'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#1297=IFCSIMPLEPROPERTYTEMPLATE('12tWalxLDCYvRDTIrj9GWv',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1298=IFCSIMPLEPROPERTYTEMPLATE('3JndEYD7jAVwdTnYAeIBDt',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1299=IFCSIMPLEPROPERTYTEMPLATE('2qAyyujmz5Qvk2B$c3TBAw',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1300=IFCSIMPLEPROPERTYTEMPLATE('1Kp15$Xe17hwYYIc66iPAU',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1301=IFCSIMPLEPROPERTYTEMPLATE('0vqz4jW$n6QxQnt3XgHFs9',$,'MaterialThickness','Thickness of the material from which the object is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1302=IFCSIMPLEPROPERTYTEMPLATE('16$5MVS2D4of3tqgKkW1aW',$,'Color','Principal color of the object.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1303=IFCSIMPLEPROPERTYTEMPLATE('2YC321NL57MwPCCM5ticem',$,'DrainSize','The size of the drain outlet connection from the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1304=IFCSIMPLEPROPERTYTEMPLATE('32PiCJ2u92h9DsHwfHfTYM',$,'HasGrabHandles','Indicates whether the bath is fitted with handles that provide assistance to a bather in entering or leaving the bath',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1305=IFCPROPERTYSETTEMPLATE('01eRZYW9XF6gpJRCGFRKsm',$,'Pset_SanitaryTerminalTypeBidet','Definition from IAI: Waste water appliance for washing the excretory organs while sitting astride the bowl (BS6100)',$,'IfcSanitaryTerminalType',(#1306,#1308,#1309,#1310,#1311,#1312,#1313,#1314));
+#1306=IFCSIMPLEPROPERTYTEMPLATE('24rFxZT_55gB2X_1xPum$B',$,'BidetMounting','The property enumeration Pset_SanitaryMountingEnum defines the forms of mounting or fixing of the sanitary terminal that may be specified within property sets used to define sanitary terminals (WC\X2\2019\X0\s, basins, sinks, etc.) where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1307,$,$,$,.READWRITE.);
+#1307=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1308=IFCSIMPLEPROPERTYTEMPLATE('2NXMZimJ12_8Zb3WS7zYaA',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1309=IFCSIMPLEPROPERTYTEMPLATE('1p4byPbI16rx90MJZFl3rd',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1310=IFCSIMPLEPROPERTYTEMPLATE('3iaOGKwEbCTxo8cVDFphKJ',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1311=IFCSIMPLEPROPERTYTEMPLATE('3EgAKb69jBu8iUneq0OGe5',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1312=IFCSIMPLEPROPERTYTEMPLATE('18rl6s8D91E9TewajBR2zJ',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1313=IFCSIMPLEPROPERTYTEMPLATE('3deFtBrPr0Ou9sUM8_vJ_k',$,'SpilloverLevel','The level at which water spills out of the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1314=IFCSIMPLEPROPERTYTEMPLATE('3JhRZ22DXCsB5jO6OasOk4',$,'DrainSize','The size of the drain outlet connection from the object ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1315=IFCPROPERTYSETTEMPLATE('1dA9tfohP5u95O2tdnIqor',$,'Pset_SanitaryTerminalTypeCistern','Definition from IAI: A water storage unit attached to a sanitary terminal that is fitted with a device, operated automatically or by the user, that discharges water to cleanse a water closet (toilet) pan, urinal or slop hopper. (BS6100 330 5008)',$,'IfcSanitaryTerminalType',(#1316,#1318,#1319,#1320,#1322,#1323,#1324,#1325));
+#1316=IFCSIMPLEPROPERTYTEMPLATE('1QdWjOAUT9mAxL09GccIaJ',$,'CisternHeight','Enumeration that identifies the height of the cistern or, if set to ''None'' if the urinal has no cistern and is flushed using mains or high pressure water through a flushing valve.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1317,$,$,$,.READWRITE.);
+#1317=IFCPROPERTYENUMERATION('PEnum_CisternHeight',(IFCLABEL('HighLevel'),IFCLABEL('LowLevel'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1318=IFCSIMPLEPROPERTYTEMPLATE('0XJfuzYVPE_vagUpoBT6yt',$,'CisternCapacity','Volumetric capacity of the cistern',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1319=IFCSIMPLEPROPERTYTEMPLATE('1wbwpT0Tj51umQwe9uYBcD',$,'IsSingleFlush','Indicates whether the cistern is single flush = TRUE (i.e. the same amount of water is used for each and every flush) or dual flush = FALSE (i.e. the amount of water used for a flush may be selected by the user to be high or low depending on the waste material to be removed)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1320=IFCSIMPLEPROPERTYTEMPLATE('1nNrCgcyf9YQWO_bF3xSWr',$,'FlushType','The property enumeration Pset_FlushTypeEnum defines the types of flushing mechanism that may be specified for cisterns and sanitary terminals where:-\X2\000A000A\X0\Lever =\X2\0009\X0\Flushing is achieved by twisting a lever that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Pull =\X2\0009\X0\Flushing is achieved by pulling a handle or knob vertically upwards that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Push =\X2\0009\X0\Flushing is achieved by pushing a button or plate that causes a predetermined flow of water to be passed from a cistern to the sanitary terminal.\X2\000A\X0\Sensor = Flush is activated through an automatic sensing mechanism.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1321,$,$,$,.READWRITE.);
+#1321=IFCPROPERTYENUMERATION('PEnum_FlushType',(IFCLABEL('Lever'),IFCLABEL('Pull'),IFCLABEL('Push'),IFCLABEL('Sensor'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#1322=IFCSIMPLEPROPERTYTEMPLATE('0UD4fyCZDDOg0Oxh4PAPI6',$,'FlushRate','The minimum and maximum volume of water used at each flush. Where a single flush is used, the value of upper bound and lower bound should be equal. For a dual flush toilet, the lower bound should be used for the lesser flush rate and the upper bound for the greater flush rate. Where flush is achieved using mains pressure water through a flush valve, the value of upper and lower bound should be equal and should be the same as the flush rate property of the flush valve (see relevant valve property set). Alternatively, in this case, do not assert the flush rate property; refer to the flush rate of the flush valve.',.P_BOUNDEDVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1323=IFCSIMPLEPROPERTYTEMPLATE('00a35QOADBiOICYFLNi3yy',$,'IsAutomaticFlush','Boolean value that determines if the cistern is flushed automatically either after each use or periodically (TRUE) or whether manual flushing is required (FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1324=IFCSIMPLEPROPERTYTEMPLATE('38pexwjf5BROQDOOTfiZwp',$,'CisternMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1325=IFCSIMPLEPROPERTYTEMPLATE('2dvbZWfrP6juZQJ1CWj6OT',$,'CisternColor','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1326=IFCPROPERTYSETTEMPLATE('1zMP5HxFzBvAn3Bsp0m_Jm',$,'Pset_SanitaryTerminalTypeSanitaryFountain','Definition from IAI: A sanitary terminal that provides a low pressure jet of water for a specific purpose (IAI).',$,'IfcSanitaryTerminalType',(#1327,#1329,#1331,#1332,#1333,#1334,#1335,#1336));
+#1327=IFCSIMPLEPROPERTYTEMPLATE('0S8vpVL9nB$8mr$72c0PKP',$,'FountainType','Selection of the type of fountain from the enumerated list of types where:-\X2\000A000A\X0\DrinkingWater =\X2\0009\X0\Sanitary appliance that provides a low pressure jet of drinking water.\X2\000A\X0\Eyewash =\X2\0009\X0\Waste water appliance, usually installed in work places where there is a risk of injury to eyes by solid particles or dangerous liquids, with which the user can wash the eyes without touching them.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1328,$,$,$,.READWRITE.);
+#1328=IFCPROPERTYENUMERATION('PEnum_FountainType',(IFCLABEL('DrinkingWater'),IFCLABEL('Eyewash'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1329=IFCSIMPLEPROPERTYTEMPLATE('1Hj$3Pbfn5xBn9MvmynkXU',$,'Mounting','Selection of the form of mounting of the fountain from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1330,$,$,$,.READWRITE.);
+#1330=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1331=IFCSIMPLEPROPERTYTEMPLATE('3bj94vfwzEZxTwHu1Xc1VM',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1332=IFCSIMPLEPROPERTYTEMPLATE('1Ys2t05NnCpgvu_QYcA7qy',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1333=IFCSIMPLEPROPERTYTEMPLATE('1AsqTCqKP4MuZAzMeKlNst',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1334=IFCSIMPLEPROPERTYTEMPLATE('1s3eqgu$vCaA1Y0UBfOgW$',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1335=IFCSIMPLEPROPERTYTEMPLATE('2GxdHXN0rD1xRA2pdMZrA_',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1336=IFCSIMPLEPROPERTYTEMPLATE('0DK2vwHhrCQOkACr_rIr6H',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1337=IFCPROPERTYSETTEMPLATE('13MEPS1rTFXOGdYu578meb',$,'Pset_SanitaryTerminalTypeShower','Definition from IAI: Installation or waste water appliance that emits a spray of water to wash the human body (BS6100).',$,'IfcSanitaryTerminalType',(#1338,#1340,#1341,#1342,#1343,#1344,#1345,#1346,#1347,#1348));
+#1338=IFCSIMPLEPROPERTYTEMPLATE('1739LMPM9A9eDT43O7xDK5',$,'ShowerType','Selection of the type of shower from the enumerated list of types where:-\X2\000A000A\X0\Drench = \X2\0009\X0\Shower that rapidly gives a thorough soaking in an emergency\X2\000A\X0\Individual =\X2\0009\X0\Shower unit that is typically enclosed and is for the use of one person at a time\X2\000A\X0\Tunnel = \X2\0009\X0\Shower that has a succession of shower heads or spreaders that operate simultaneously along its length\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1339,$,$,$,.READWRITE.);
+#1339=IFCPROPERTYENUMERATION('PEnum_ShowerType',(IFCLABEL('Drench'),IFCLABEL('Individual'),IFCLABEL('Tunnel'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1340=IFCSIMPLEPROPERTYTEMPLATE('3tza4e395BtR5WS7DRaJ5a',$,'HasTray','Indicates whether the shower has a separate receptacle that catches the water in a shower and directs it to a waste outlet.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1341=IFCSIMPLEPROPERTYTEMPLATE('1xQ849tY54xusMiLIVjBrY',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1342=IFCSIMPLEPROPERTYTEMPLATE('3zHUqSdwbALAHF3_XhS0Zn',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1343=IFCSIMPLEPROPERTYTEMPLATE('3e8pCjc1T8RxeLndgvAr99',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1344=IFCSIMPLEPROPERTYTEMPLATE('3IbpRwgsH0CRAl5iigS0Ro',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1345=IFCSIMPLEPROPERTYTEMPLATE('0qLbQTE5595ertcbl6vdRh',$,'MaterialThickness','Thickness of the material from which the object is constructed',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1346=IFCSIMPLEPROPERTYTEMPLATE('3sj4G9E6f5luol9YWW1iKY',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1347=IFCSIMPLEPROPERTYTEMPLATE('1fJq3087XEHhGKrYQnG32m',$,'ShowerHeadDescription','A description of the shower head(s) that emit the spray of water',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1348=IFCSIMPLEPROPERTYTEMPLATE('2L6GlIq3z3TxrE$4LX6dpa',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1349=IFCPROPERTYSETTEMPLATE('2NrQvkC9fEUvRgBoX8_Fnk',$,'Pset_SanitaryTerminalTypeSink','Definition from IAI: Waste water appliance for receiving, retaining or disposing of domestic, culinary, laboratory or industrial process liquids.',$,'IfcSanitaryTerminalType',(#1350,#1352,#1354,#1355,#1356,#1357,#1358,#1359));
+#1350=IFCSIMPLEPROPERTYTEMPLATE('0oz9RlizD8uBZgSK2VGFav',$,'SinkType','Selection of the type of sink from the enumerated list of types where:-\X2\000A000A\X0\Belfast = \X2\0009\X0\Deep sink that has a plain edge and a weir overflow\X2\000A\X0\.\X2\000A\X0\Bucket = \X2\0009\X0\Sink at low level, with protected front edge, that facilitates filling and emptying buckets, usually with a hinged grid on which to stand them.\X2\000A\X0\Cleaners =\X2\0009\X0\ Sink, usually fixed at normal height (900mm), with protected front edge.\X2\000A\X0\Combination_Left =\X2\0009\X0\ Sink with integral drainer on left hand side\X2\000A\X0\.\X2\000A\X0\Combination_Right =\X2\0009\X0\ Sink with integral drainer on right hand side\X2\000A\X0\.\X2\000A\X0\Combination_Double = \X2\0009\X0\Sink with integral drainer on both sides\X2\000A\X0\.\X2\000A\X0\Drip =\X2\0009\X0\ Small sink that catches drips or flow from a faucet\X2\000A\X0\.\X2\000A\X0\Laboratory =\X2\0009\X0\ Sink, of acid resisting material, with a top edge shaped to facilitate fixing to the underside of a desktop\X2\000A\X0\.\X2\000A\X0\London =\X2\0009\X0\ Deep sink that has a plain edge and no overflow\X2\000A\X0\.\X2\000A\X0\Plaster = Sink with sediment receiver to prevent waste plaster passing into drains\X2\000A\X0\.\X2\000A\X0\Pot =\X2\0009\X0\ Large metal sink, with a standing waste, for washing cooking utensils\X2\000A\X0\.\X2\000A\X0\Rinsing =\X2\0009\X0\ Metal sink in which water can be heated and culinary utensils and tableware immersed at high temperature that destroys most harmful bacteria and allows subsequent self drying.\X2\000A\X0\.\X2\000A\X0\Shelf =\X2\0009\X0\ Ceramic sink with an integral back shelf through which water fittings are mounted\X2\000A\X0\.\X2\000A\X0\VegetablePreparation =\X2\0009\X0\Large metal sink, with a standing waste, for washing and preparing vegetables\X2\000A\X0\.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1351,$,$,$,.READWRITE.);
+#1351=IFCPROPERTYENUMERATION('PEnum_SinkType',(IFCLABEL('Belfast'),IFCLABEL('Bucket'),IFCLABEL('Cleaners'),IFCLABEL('Combination_Left'),IFCLABEL('Combination_Right'),IFCLABEL('Combination_Double'),IFCLABEL('Drip'),IFCLABEL('Laboratory'),IFCLABEL('London'),IFCLABEL('Plaster'),IFCLABEL('Pot'),IFCLABEL('Rinsing'),IFCLABEL('Shelf'),IFCLABEL('VegetablePreparation'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1352=IFCSIMPLEPROPERTYTEMPLATE('3$NRFVWsnE8BSS_71XDYrm',$,'SinkMounting','Selection of the form of mounting of the sink from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1353,$,$,$,.READWRITE.);
+#1353=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1354=IFCSIMPLEPROPERTYTEMPLATE('0vlM8qM513PAOXopRifo55',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1355=IFCSIMPLEPROPERTYTEMPLATE('3ojA$oXWfAnheZTd7RlWJz',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1356=IFCSIMPLEPROPERTYTEMPLATE('130OcPsOP8n9AUwIMsZe8x',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1357=IFCSIMPLEPROPERTYTEMPLATE('1zZstJFI5FU8Nt1$$HUx6r',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1358=IFCSIMPLEPROPERTYTEMPLATE('1VqdDHqFX2ivZJPcWGPKhO',$,'Color','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1359=IFCSIMPLEPROPERTYTEMPLATE('18sPWGUhr0VxDpKP0OfgRG',$,'DrainSize','The size of the drain outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1360=IFCPROPERTYSETTEMPLATE('11lQak3or0dgMn3d3OTQI$',$,'Pset_SanitaryTerminalTypeToiletPan','Definition from IAI: Soil appliance for the disposal of excrement.',$,'IfcSanitaryTerminalType',(#1361,#1363,#1365,#1367,#1368,#1369,#1370,#1371,#1372));
+#1361=IFCSIMPLEPROPERTYTEMPLATE('13vqcFMG14MxgPZXDle8iK',$,'ToiletType','Enumeration that defines the types of toilet (water closet) arrangements that may be specified where:-\X2\000A000A\X0\BedPanWasher =\X2\0009\X0\Enclosed soil appliance in which bedpans and urinal bottles are emptied and cleansed\X2\000A\X0\Chemical =\X2\0009\X0\Portable receptacle or soil appliance that receives and retains excrement in either an integral or a separate container, in which it is chemically treated and from which it has to be emptied periodically.\X2\000A\X0\CloseCoupled =\X2\0009\X0\Toilet suite in which a flushing cistern is connected directly to the water closet pan.\X2\000A\X0\LooseCoupled =\X2\0009\X0\Toilet arrangement in which a flushing cistern is connected to the water closet pan through a flushing pipe.\X2\000A\X0\SlopHopper =\X2\0009\X0\Hopper shaped soil appliance with a flushing rim and outlet similar to those of a toilet pan, into which human excrement is emptied for disposal\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1362,$,$,$,.READWRITE.);
+#1362=IFCPROPERTYENUMERATION('PEnum_ToiletType',(IFCLABEL('BedPanWasher'),IFCLABEL('Chemical'),IFCLABEL('CloseCoupled'),IFCLABEL('LooseCoupled'),IFCLABEL('SlopHopper'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#1363=IFCSIMPLEPROPERTYTEMPLATE('0j6YUivx1DDQ6GJJD7c$J6',$,'ToiletPanType','The property enumeration Pset_ToiletPanTypeEnum defines the types of toilet pan that may be specified within the property set Pset_Toilet:-\X2\000A000A\X0\Siphonic =\X2\0009\X0\Toilet pan in which excrement is removed by siphonage induced by the flushing water.\X2\000A\X0\Squat =\X2\0009\X0\Toilet pan with an elongated bowl installed with its top edge at or near floor level, so that the user has to squat.\X2\000A\X0\WashDown =\X2\0009\X0\Toilet pan in which excrement is removed by the momentum of the flushing water.\X2\000A\X0\WashOut =\X2\0009\X0\A washdown toilet pan in which excrement falls first into a shallow water filled bowl.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1364,$,$,$,.READWRITE.);
+#1364=IFCPROPERTYENUMERATION('PEnum_ToiletPanType',(IFCLABEL('Siphonic'),IFCLABEL('Squat'),IFCLABEL('WashDown'),IFCLABEL('WashOut'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1365=IFCSIMPLEPROPERTYTEMPLATE('1IlYOrH_HAvxBK4FPUB1hE',$,'PanMounting','The property enumeration Pset_SanitaryMountingEnum defines the forms of mounting or fixing of the sanitary terminal that may be specified within property sets used to define sanitary terminals (WC\X2\2019\X0\s, basins, sinks, etc.) where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1366,$,$,$,.READWRITE.);
+#1366=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1367=IFCSIMPLEPROPERTYTEMPLATE('1f$IsVA7PEygX1e37L6ndW',$,'PanMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1368=IFCSIMPLEPROPERTYTEMPLATE('2O9SHF7vHDL8o79OmgpEDB',$,'PanColor','Color selection for this object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1369=IFCSIMPLEPROPERTYTEMPLATE('398_dNxXTDKxx1GhccsBJL',$,'SpilloverLevel','The level at which water spills out of the terminal.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1370=IFCSIMPLEPROPERTYTEMPLATE('1EvegHMkn7ywYxQmew$v2$',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1371=IFCSIMPLEPROPERTYTEMPLATE('3kKQVFsJr6leWyMHsXjWJB',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1372=IFCSIMPLEPROPERTYTEMPLATE('0j6zDDuR57r8wknkOfks_n',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1373=IFCPROPERTYSETTEMPLATE('2OFsrjocL05QFX86gPkD69',$,'Pset_SanitaryTerminalTypeUrinal','Definition from IAI: Soil appliance that receives urine and directs it to a waste outlet (BS6100)',$,'IfcSanitaryTerminalType',(#1374,#1376,#1377,#1378,#1379,#1380,#1381));
+#1374=IFCSIMPLEPROPERTYTEMPLATE('0kgZdz4TL3owKdgQ_GVcfV',$,'UrinalType','Selection of the type of urinal from the enumerated list of types where:-\X2\000A000A\X0\Bowl =\X2\0009\X0\Individual wall mounted urinal\X2\000A\X0\Slab =\X2\0009\X0\Urinal that consists of a slab or sheet fixed to a wall and down which urinal flows into a floor channel\X2\000A\X0\Stall =\X2\0009\X0\Floor mounted urinal that consists of an elliptically shaped sanitary stall fixed to a wall and down which urine flows into a floor channel\X2\000A\X0\Trough =\X2\0009\X0\Wall mounted urinal of elongated rectangular shape on plan, that can be used by more than one person at a time.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1375,$,$,$,.READWRITE.);
+#1375=IFCPROPERTYENUMERATION('PEnum_UrinalType',(IFCLABEL('Bowl'),IFCLABEL('Slab'),IFCLABEL('Stall'),IFCLABEL('Trough'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1376=IFCSIMPLEPROPERTYTEMPLATE('2dmsR$yOzFn8HU2OS9sruP',$,'UrinalMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1377=IFCSIMPLEPROPERTYTEMPLATE('32LF0RdmHBmfeoLwGPTXkw',$,'UrinalColor','Color of the urinal',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1378=IFCSIMPLEPROPERTYTEMPLATE('0QBKrLlkv6iQhOKcMAtbUm',$,'SpilloverLevel','The level at which water spills out of the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1379=IFCSIMPLEPROPERTYTEMPLATE('2GZusOswfEe9i61377muva',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1380=IFCSIMPLEPROPERTYTEMPLATE('2fUgiePqPBOwhCFvr20ucO',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1381=IFCSIMPLEPROPERTYTEMPLATE('2lXsWD1kDFKATmFQ_kI8XE',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1382=IFCPROPERTYSETTEMPLATE('2FqsMJnH9EIfAN3K2ooVoU',$,'Pset_SanitaryTerminalTypeWashHandBasin','Definition from IAI: Waste water appliance for washing the upper parts of the body.',$,'IfcSanitaryTerminalType',(#1383,#1385,#1387,#1388,#1389,#1390,#1391,#1392));
+#1383=IFCSIMPLEPROPERTYTEMPLATE('20i88bzOXB3876K$dHe79J',$,'WashHandBasinType','Defines the types of wash hand basin that may be specified where: \X2\000A\X0\DentalCuspidor = Waste water appliance that receives and flushes away mouth washings\X2\000A\X0\HandRinse = Wall mounted wash hand basin that has an overall width of 500mm or less\X2\000A\X0\Hospital = Wash hand basin that has a smooth easy clean surface without tapholes or overflow slot for use where hygiene is of prime importance. \X2\000A\X0\Tipup = Wash hand basin mounted on pivots so that it can be emptied by tilting \X2\000A\X0\Vanity = Wash hand basin for installation into a horizontal surface \X2\000A\X0\Washfountain = Wash hand basin that is circular, semi-circular or polygonal on plan, at which more than one person can wash at the same time. \X2\000A\X0\WashingTrough = Wash hand basin of elongated rectangular shape in plan, at which more than one person can wash at the same time.\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1384,$,$,$,.READWRITE.);
+#1384=IFCPROPERTYENUMERATION('PEnum_WashHandBasinType',(IFCLABEL('DentalCuspidor'),IFCLABEL('HandRinse'),IFCLABEL('Hospital'),IFCLABEL('Tipup'),IFCLABEL('Washfountain'),IFCLABEL('WashingTrough'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1385=IFCSIMPLEPROPERTYTEMPLATE('1xwCmWCuT8vQ0Z1BUJBgR0',$,'WashHandBasinMounting','Selection of the form of mounting from the enumerated list of mountings where:-\X2\000A000A\X0\BackToWall =\X2\0009\X0\A pedestal mounted sanitary terminal that fits flush to the wall at the rear to cover its service connections\X2\000A\X0\Pedestal =\X2\0009\X0\A floor mounted sanitary terminal that has an integral base\X2\000A\X0\CounterTop =\X2\0009\X0\A sanitary terminal that is installed into a horizontal surface that is installed into a horizontal surface. Note: When applied to a wash hand basin, the term more normally used is \X2\2018\X0\vanity\X2\2019\X0\. See also Wash Hand Basin Type specification.\X2\000A\X0\WallHung =\X2\0009\X0\A sanitary terminal cantilevered clear of the floor\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1386,$,$,$,.READWRITE.);
+#1386=IFCPROPERTYENUMERATION('PEnum_SanitaryMounting',(IFCLABEL('BackToWall'),IFCLABEL('Pedestal'),IFCLABEL('CounterTop'),IFCLABEL('WallHung'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1387=IFCSIMPLEPROPERTYTEMPLATE('0puKwDBprDruy4G1NpG5L2',$,'NominalLength','Nominal or quoted length of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1388=IFCSIMPLEPROPERTYTEMPLATE('2nGDUeH_f4rh1rZg7g_QPz',$,'NominalWidth','Nominal or quoted width of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1389=IFCSIMPLEPROPERTYTEMPLATE('2VG9xs1D18FRPlH5lOcRj8',$,'NominalDepth','Nominal or quoted depth of the object. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1390=IFCSIMPLEPROPERTYTEMPLATE('294eJ28gb8xg6I$xEXEnPm',$,'Material','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1391=IFCSIMPLEPROPERTYTEMPLATE('3jwk8l1_HE3gm$48lDFfr2',$,'Color','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1392=IFCSIMPLEPROPERTYTEMPLATE('1rGFHs$hr2mPjJOLV0Ms68',$,'DrainSize','The size of the drain outlet connection from the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1393=IFCPROPERTYSETTEMPLATE('08QkFjLKX6tx8JMKDIPB_m',$,'Pset_SanitaryTerminalTypeWCSeat','Definition from IAI: Hinged seat that fits on the top of a water closet (WC) pan. (BS6100 330 1401)',$,'IfcSanitaryTerminalType',(#1394,#1396,#1397,#1398));
+#1394=IFCSIMPLEPROPERTYTEMPLATE('1ITVk_5F51zvCWaOGcig23',$,'SeatType','The property enumeration Pset_ToiletSeatTypeEnum defines the types of seat that may be attached to the toilet pan and specified within the property set Pset_Toilet where:-\X2\000A000A\X0\Extension =\X2\0009\X0\WC seat that is attached at the back, by means of side or top hinges, to a flat piece of material secured to the water closet pan\X2\000A\X0\Inset =\X2\0009\X0\Seat that consists of pads of impervious material fixed to the top of a water closet pan\X2\000A\X0\OpenFrontSeat =\X2\0009\X0\Hinged WC seat shaped like a horseshoe with the gap at the front\X2\000A\X0\RingSeat =\X2\0009\X0\WC seat in the shape of a ring\X2\000A\X0\SelfRaising =\X2\0009\X0\WC seat with balanced weights or springs to raise it when not in use\X2\000A\X0\None =\X2\0009\X0\There is no seat attached to the water closet pan\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1395,$,$,$,.READWRITE.);
+#1395=IFCPROPERTYENUMERATION('PEnum_ToiletSeatType',(IFCLABEL('Extension'),IFCLABEL('Inset'),IFCLABEL('OpenFrontSeat'),IFCLABEL('RingSeat'),IFCLABEL('SelfRaising'),IFCLABEL('None'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#1396=IFCSIMPLEPROPERTYTEMPLATE('3LL5h4b8bAfBzUxdCD1jUT',$,'SeatHasCover','Indicates whether there is a cover associated with the toilet seat',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1397=IFCSIMPLEPROPERTYTEMPLATE('1S$MmsFnDDAhI38zW5iM7d',$,'SeatMaterial','Material from which the object is constructed',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1398=IFCSIMPLEPROPERTYTEMPLATE('323ZMxfZH8qvD8DPmTIhZP',$,'SeatColor','Color of the object',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1399=IFCPROPERTYSETTEMPLATE('2o_p2$KDv959sjfEuoEUT4',$,'Pset_WasteTerminalTypeFloorTrap','Definition from IAI: Pipe fitting, set into the floor, that retains liquid to prevent the passage of foul air.',$,'IfcWasteTerminalType',(#1400,#1401,#1402,#1403,#1404,#1405,#1406,#1408,#1409,#1410,#1412,#1413,#1414,#1415));
+#1400=IFCSIMPLEPROPERTYTEMPLATE('0AHAcKmYP5MgGID6y9xbBl',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1401=IFCSIMPLEPROPERTYTEMPLATE('09mc8Wc4f2pOS1JrEjnhZw',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1402=IFCSIMPLEPROPERTYTEMPLATE('3NviMgWqH6hui5ldmWnu_3',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the chamber of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1403=IFCSIMPLEPROPERTYTEMPLATE('1z7X4$IuT8zRWSSsxbrNOf',$,'IsForSullageWater','Indicates if the purpose of the floor trap is to receive sullage water, or if that is amongst its purposes (= TRUE), or not (= FALSE). Note that if TRUE, it is expected that an upstand or kerb will be placed around the floor trap to prevent the ingress of surface water runoff; the provision of the upstand or kerb is not dealt with in this property set.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1404=IFCSIMPLEPROPERTYTEMPLATE('08l7e1a1jFru50CRQdE3lP',$,'SpilloverLevel','The level at which water spills out of the terminal.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1405=IFCSIMPLEPROPERTYTEMPLATE('260Bqih3X3ZOv0AHCVQOOx',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1406=IFCSIMPLEPROPERTYTEMPLATE('0Fi7sHJlv4XuyF_E5$td0O',$,'TrapType','Identifies the predefined types of waste trap used in combination with the floor trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1407,$,$,$,.READWRITE.);
+#1407=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1408=IFCSIMPLEPROPERTYTEMPLATE('2vEZjHOL94g8wB86MYlE3l',$,'HasStrainer','Indicates whether the gully trap has a strainer (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1409=IFCSIMPLEPROPERTYTEMPLATE('15VDaz3WH9_9D8LnHw$RBQ',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1410=IFCSIMPLEPROPERTYTEMPLATE('30CKgdJCTCSALq996idyDD',$,'InletPatternType','Identifies the pattern of inlet connections to a trap.\X2\000A000A\X0\A trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1411,$,$,$,.READWRITE.);
+#1411=IFCPROPERTYENUMERATION('PEnum_InletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
+#1412=IFCSIMPLEPROPERTYTEMPLATE('1$GT7o0Q9BUQY_sAzAa2_$',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1413=IFCSIMPLEPROPERTYTEMPLATE('1xm3sojVn4uxijPhTdxAwh',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1414=IFCSIMPLEPROPERTYTEMPLATE('22PZlWd_H5R8Vb7hiofbiq',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1415=IFCSIMPLEPROPERTYTEMPLATE('0wNkLg7UXEgulwUrOx2YZI',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1416=IFCPROPERTYSETTEMPLATE('2XKiokOv95J9G5uv9Z4d5l',$,'Pset_WasteTerminalTypeFloorWaste','Definition from IAI: Pipe fitting, set into the floor, that collects waste water and discharges it to a separate trap.',$,'IfcWasteTerminalType',(#1417,#1418,#1419,#1420,#1421,#1422,#1423,#1424));
+#1417=IFCSIMPLEPROPERTYTEMPLATE('0YzElMgtrE3vLhjmczytxl',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1418=IFCSIMPLEPROPERTYTEMPLATE('38G_Ra3zXFzuduLLNvqYpz',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1419=IFCSIMPLEPROPERTYTEMPLATE('0hFdDLXqHChhUfhD30qkwU',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1420=IFCSIMPLEPROPERTYTEMPLATE('1hZvCXSE1Dufqj0s245vT5',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1421=IFCSIMPLEPROPERTYTEMPLATE('0lnnhyWkL8ReQdYsAlGX$D',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1422=IFCSIMPLEPROPERTYTEMPLATE('2LNsOC0$v6AA4LkwvWLcy_',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1423=IFCSIMPLEPROPERTYTEMPLATE('2VDclZqvv44wKpvEm$hfya',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the waste.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1424=IFCSIMPLEPROPERTYTEMPLATE('201ko5kY10nxiEqjwa9sJ9',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1425=IFCPROPERTYSETTEMPLATE('39zfWQJwjA58HpwhP016H6',$,'Pset_WasteTerminalTypeGreaseInterceptor','Definition from IAI: Chamber, on the line of a drain or discharge pipe, that prevents grease passing into a drainage system (BS6100 330 6205).',$,'IfcWasteTerminalType',(#1426,#1427,#1428,#1429,#1430,#1431,#1432,#1433,#1434,#1435,#1436,#1437));
+#1426=IFCSIMPLEPROPERTYTEMPLATE('0croF6N6X4EBlMmc$gmWM8',$,'NominalBodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1427=IFCSIMPLEPROPERTYTEMPLATE('0atQVt89f9$9zYFnicAJkE',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1428=IFCSIMPLEPROPERTYTEMPLATE('311USf8L98BOL2ancnw6eY',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1429=IFCSIMPLEPROPERTYTEMPLATE('3sMEFyd8PA2eE_yOd$UBJG',$,'BodyDepth','Nominal or quoted length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1430=IFCSIMPLEPROPERTYTEMPLATE('3JBGQLd0f8i9xA2EQ0YAJ1',$,'StrainerMaterial','Material from which the strainer is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1431=IFCSIMPLEPROPERTYTEMPLATE('0eVVefXQjETR7z2vcTfwzT',$,'StrainerDiameter','Diameter, measured in plan view, of the strainer basket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1432=IFCSIMPLEPROPERTYTEMPLATE('3J9E37ZA10_xL9iqxX4WH_',$,'StrainerDepth','Depth, measured in elevation view, of the strainer basket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1433=IFCSIMPLEPROPERTYTEMPLATE('2wEaInoK9BKPaVXgAk8x4$',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1434=IFCSIMPLEPROPERTYTEMPLATE('2D3F7MVrH1dgNAOr9x$Cx9',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1435=IFCSIMPLEPROPERTYTEMPLATE('3Mer$yQpz2zRq4Egjs4bam',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the grease interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1436=IFCSIMPLEPROPERTYTEMPLATE('19CxfvIhfBMwHUQeJJaY_U',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the grease interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1437=IFCSIMPLEPROPERTYTEMPLATE('21_rtZewP5rPy4HY3oostk',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1438=IFCPROPERTYSETTEMPLATE('2sKyYKyuTFmQRTfVegJSpE',$,'Pset_WasteTerminalTypeGullySump','Definition from IAI: Pipe fitting or assembly of fittings to receive surface water or waste water, fitted with a grating or sealed cover.',$,'IfcWasteTerminalType',(#1439,#1440,#1441,#1442,#1443,#1445,#1447,#1448,#1450,#1451,#1452,#1453));
+#1439=IFCSIMPLEPROPERTYTEMPLATE('3MZFpbNUH8fPXHzRarDbpX',$,'NominalSumpLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1440=IFCSIMPLEPROPERTYTEMPLATE('2H02rYIJf1HvJYIRsFzQd6',$,'NominalSumpWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1441=IFCSIMPLEPROPERTYTEMPLATE('3UGKGTSj1188s1CwawLazK',$,'NominalSumpDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1442=IFCSIMPLEPROPERTYTEMPLATE('0AoBBgBZv0HvDES_OfLWbK',$,'SumpMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1443=IFCSIMPLEPROPERTYTEMPLATE('2SXlSq0erA2uNVyihkED1W',$,'GullyType','Identifies the predefined types of gully from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1444,$,$,$,.READWRITE.);
+#1444=IFCPROPERTYENUMERATION('PEnum_GullyType',(IFCLABEL('Vertical'),IFCLABEL('BackInlet'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1445=IFCSIMPLEPROPERTYTEMPLATE('1asD7v3y576uIVd8GkoYav',$,'TrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1446,$,$,$,.READWRITE.);
+#1446=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1447=IFCSIMPLEPROPERTYTEMPLATE('3htDhNxK5AyfPtxYE$WtNl',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1448=IFCSIMPLEPROPERTYTEMPLATE('37Nx5fmCL4uBW091noCoZr',$,'BackInletPatternType','Identifies the pattern of inlet connections to a gully trap.\X2\000A000A\X0\A gulley trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the gully trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A000A\X0\ 2\X2\000A\X0\ |\X2\000A\X0\ ----------------\X2\000A\X0\ ! |\X2\000A\X0\1-| |-3\X2\000A\X0\ ! |\X2\000A\X0\ ----------------\X2\000A\X0\ |\X2\000A\X0\ 4',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1449,$,$,$,.READWRITE.);
+#1449=IFCPROPERTYENUMERATION('PEnum_BackInletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
+#1450=IFCSIMPLEPROPERTYTEMPLATE('3LI1F8jBPAl8WweHAgLouU',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1451=IFCSIMPLEPROPERTYTEMPLATE('2sLokuNOfD8998_b8ML$pF',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1452=IFCSIMPLEPROPERTYTEMPLATE('3syl0SgEz7GerMlU_fpaC9',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1453=IFCSIMPLEPROPERTYTEMPLATE('1adT8Vs_55reMkbSEp_GuX',$,'CoverMaterial','Material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1454=IFCPROPERTYSETTEMPLATE('0xxkk4vAfAwASTs$NJg__F',$,'Pset_WasteTerminalTypeGullyTrap','Definition from IAI: Pipe fitting or assembly of fittings to receive surface water or waste water, fitted with a grating or sealed cover and discharging through a trap (BS6100 330 3504 modified)',$,'IfcWasteTerminalType',(#1455,#1456,#1457,#1458,#1459,#1461,#1462,#1464,#1465,#1467,#1468,#1469,#1470));
+#1455=IFCSIMPLEPROPERTYTEMPLATE('0jUXptVbz7ggX$vMULbOxQ',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1456=IFCSIMPLEPROPERTYTEMPLATE('0VhgByDWD90htC$BYJYrSD',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1457=IFCSIMPLEPROPERTYTEMPLATE('1RoGTg7_X7wwXD7yPiGtrO',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the chamber of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1458=IFCSIMPLEPROPERTYTEMPLATE('19KajfCK13tRU4Am04dSpv',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1459=IFCSIMPLEPROPERTYTEMPLATE('2hCzcOCZ50gAmYl$_wYnbJ',$,'GullyType','Identifies the predefined types of gully from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1460,$,$,$,.READWRITE.);
+#1460=IFCPROPERTYENUMERATION('PEnum_GullyType',(IFCLABEL('Vertical'),IFCLABEL('BackInlet'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1461=IFCSIMPLEPROPERTYTEMPLATE('3EShiJC_j0JwiBj3wvUDdx',$,'HasStrainer','Indicates whether the gully trap has a strainer (= TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1462=IFCSIMPLEPROPERTYTEMPLATE('0FtpZq1QfC7fU6mq3CVUb9',$,'TrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1463,$,$,$,.READWRITE.);
+#1463=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1464=IFCSIMPLEPROPERTYTEMPLATE('2XktsHQorBSxXJAbeC3xi_',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1465=IFCSIMPLEPROPERTYTEMPLATE('3APCS1yXv7pvWmpDQBD3Kh',$,'BackInletPatternType','Identifies the pattern of inlet connections to a gully trap.\X2\000A000A\X0\A gulley trap may have 0,1,2,3 or 4 inlet connections and the pattern of their arrangement may vary. The enumeration makes the convention that an outlet is either vertical or is placed at the bottom (south side) of the gully trap (when viewed in plan). Position 1 is to the left (west), position 2 is to the top (north), position 3 is to the right (east) and position 4 is to the bottom (south).\X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1466,$,$,$,.READWRITE.);
+#1466=IFCPROPERTYENUMERATION('PEnum_BackInletPatternType',(IFCLABEL('None'),IFCLABEL('1'),IFCLABEL('2'),IFCLABEL('3'),IFCLABEL('4'),IFCLABEL('12'),IFCLABEL('13'),IFCLABEL('14'),IFCLABEL('23'),IFCLABEL('24'),IFCLABEL('34'),IFCLABEL('123'),IFCLABEL('124'),IFCLABEL('134'),IFCLABEL('234'),IFCLABEL('1234')),$);
+#1467=IFCSIMPLEPROPERTYTEMPLATE('1PVyUvj1DEV9beRKhWuNp6',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1468=IFCSIMPLEPROPERTYTEMPLATE('3cblPMORP0l9Ws6aCE9P_L',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1469=IFCSIMPLEPROPERTYTEMPLATE('2b8mNlhhD4wOdYVxFwIeqL',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the gully trap.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1470=IFCSIMPLEPROPERTYTEMPLATE('1kz_U2Q5TCGuWDpiDoHHEj',$,'CoverMaterial','Material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1471=IFCPROPERTYSETTEMPLATE('3QBhCrbSP0xRtCWSuwKE2T',$,'Pset_WasteTerminalTypeOilInterceptor','Definition from IAI: One or more chambers arranged to prevent the ingress of oil to a drain or sewer, that retain the oil for later removal (BS6100 330 67316).',$,'IfcWasteTerminalType',(#1472,#1473,#1474,#1475,#1476,#1477,#1478,#1479,#1480));
+#1472=IFCSIMPLEPROPERTYTEMPLATE('0R9xNLoJ92gBdxSR4oY1eP',$,'BodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1473=IFCSIMPLEPROPERTYTEMPLATE('0Fn5gBbl5B5BpbvYLXLxqK',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1474=IFCSIMPLEPROPERTYTEMPLATE('2QEF85GV52FAt8ymUGziYF',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1475=IFCSIMPLEPROPERTYTEMPLATE('2qr2xo$hDBS9InNho1UMFi',$,'NominalBodyDepth','Nominal or quoted length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1476=IFCSIMPLEPROPERTYTEMPLATE('2jhruHwDj4jeoIozcRH7DE',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1477=IFCSIMPLEPROPERTYTEMPLATE('1d$nIGIdrDkRh2oVuwsZeo',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1478=IFCSIMPLEPROPERTYTEMPLATE('3yUvbCRHj8uuTYKya38fch',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1479=IFCSIMPLEPROPERTYTEMPLATE('0RlzfVHOD94A6WVzFeEfkq',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1480=IFCSIMPLEPROPERTYTEMPLATE('2aKWNJzgjCmuAE5VlygEu_',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1481=IFCPROPERTYSETTEMPLATE('3EO7zk5$T3DwPb8o1iF6n2',$,'Pset_WasteTerminalTypePetrolInterceptor','Definition from IAI: Two or more chambers with inlet and outlet pipes arranged to allow petrol/gasoline collected on the surface of water drained into them to evaporate through ventilating pipes.',$,'IfcWasteTerminalType',(#1482,#1483,#1484,#1485,#1486,#1487,#1488,#1489,#1490,#1491));
+#1482=IFCSIMPLEPROPERTYTEMPLATE('2phwys9RP52ASTw4sDTxZs',$,'BodyMaterial','The material from which the object is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1483=IFCSIMPLEPROPERTYTEMPLATE('2bBYdkEW58dh6v34IvZROc',$,'NominalBodyLength','Nominal or quoted length, measured along the x-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1484=IFCSIMPLEPROPERTYTEMPLATE('3Li2MYSqbFJejAv5SiYDeX',$,'NominalBodyWidth','Nominal or quoted length, measured along the y-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1485=IFCSIMPLEPROPERTYTEMPLATE('10XxC8lHj0BuQj51NBaUiQ',$,'NominalBodyDepth','Nominal or quoted =length, measured along the z-axis of the local coordinate system of the object, of the body of the object.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1486=IFCSIMPLEPROPERTYTEMPLATE('10J0gK25P4vhDcdFGCFQm9',$,'InletConnectionSize','Size of the inlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1487=IFCSIMPLEPROPERTYTEMPLATE('1$i30W6kT3XP9bH1qPuOKQ',$,'OutletConnectionSize','Size of the outlet connection.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1488=IFCSIMPLEPROPERTYTEMPLATE('3CK8aSgVXAlgiFM3wCksMg',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1489=IFCSIMPLEPROPERTYTEMPLATE('3KnTf2cj94tPapDoxUZ4CW',$,'CoverWidth','The length measured along the x-axis in the local coordinate system of the cover of the oil interceptor.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1490=IFCSIMPLEPROPERTYTEMPLATE('3vJsvHn0b3Ih3GucqHb2YO',$,'CoverMaterial','Material from which the cover is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1491=IFCSIMPLEPROPERTYTEMPLATE('07LoOFVtf9Fx3s0P2auZHT',$,'VentilatingPipeSize','Size of the ventilating pipe(s)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1492=IFCPROPERTYSETTEMPLATE('0Dod68NUnBqQvFF8OG_Z5B',$,'Pset_WasteTerminalTypeRoofDrain','Definition from IAI: Pipe fitting, set into the roof, that collects rainwater for discharge into the rainwater system.',$,'IfcWasteTerminalType',(#1493,#1494,#1495,#1496,#1497,#1498,#1499,#1500));
+#1493=IFCSIMPLEPROPERTYTEMPLATE('2wDCaIdQ13Ef_GwbA16ACN',$,'NominalBodyLength','Nominal or quoted length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1494=IFCSIMPLEPROPERTYTEMPLATE('3pScwF7XLDDOkphT_hN48X',$,'NominalBodyWidth','Nominal or quoted length measured along the y-axis in the local coordinate system of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1495=IFCSIMPLEPROPERTYTEMPLATE('2o2Ff7oTL2fP2AmzwwwNyt',$,'NominalBodyDepth','Nominal or quoted length measured along the z-axis in the local coordinate system of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1496=IFCSIMPLEPROPERTYTEMPLATE('1cWUhr$QjClAwxl8mJ$6rg',$,'BodyMaterial','The primary material used to construct the object',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1497=IFCSIMPLEPROPERTYTEMPLATE('1ExjMpOx53ZPIBzsExvPju',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1498=IFCSIMPLEPROPERTYTEMPLATE('112vKSZ6H21fjGRImq1$cs',$,'CoverLength','The length measured along the x-axis in the local coordinate system or the radius (in the case of a circular shape in plan) of the cover of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1499=IFCSIMPLEPROPERTYTEMPLATE('2c8MhcJbDBcR1blu_aRuMJ',$,'CoverWidth','The length measured along the y-axis in the local coordinate system of the cover of the drain.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1500=IFCSIMPLEPROPERTYTEMPLATE('0VxznatA13OBTks7aySFwr',$,'CoverMaterial','Material from which the cover or grating is constructed.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1501=IFCPROPERTYSETTEMPLATE('3MSyRP0iPAhQ30ERNjMZyI',$,'Pset_WasteTerminalTypeWasteDisposalUnit','Definition from IAI: Electrically operated device that reduces kitchen or other waste into fragments small enough to be flushed into a drainage system.',$,'IfcWasteTerminalType',(#1502,#1503,#1504));
+#1502=IFCSIMPLEPROPERTYTEMPLATE('1_eW6Y0N57gv4_NKlihtN4',$,'DrainConnectionSize','Size of the drain connection inlet to the waste disposal unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1503=IFCSIMPLEPROPERTYTEMPLATE('3ykghronL0nfK25x0pWqBI',$,'OutletConnectionSize','Size of the outlet connection from the waste disposal unit',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1504=IFCSIMPLEPROPERTYTEMPLATE('0mIUfbaYPBbxY5BuFK4lw7',$,'NominalDepth','Nominal or quoted depth of the object measured from the inlet drain connection to the base of the unit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1505=IFCPROPERTYSETTEMPLATE('1GCacasTj5oeZnpHdahKd2',$,'Pset_WasteTerminalTypeWasteTrap','Definition from IAI: Pipe fitting, set adjacent to a sanitary terminal, that retains liquid to prevent the passage of foul air.',$,'IfcWasteTerminalType',(#1506,#1508,#1509));
+#1506=IFCSIMPLEPROPERTYTEMPLATE('2WUUeCNWH7y9yuuZH_y7VO',$,'WasteTrapType','Identifies the predefined types of trap from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1507,$,$,$,.READWRITE.);
+#1507=IFCPROPERTYENUMERATION('PEnum_TrapType',(IFCLABEL('None'),IFCLABEL('P_Trap'),IFCLABEL('Q_Trap'),IFCLABEL('S_Trap'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#1508=IFCSIMPLEPROPERTYTEMPLATE('27XM5WuunA7Bu1BtNFVlO$',$,'OutletConnectionSize','Size of the outlet connection from the object',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1509=IFCSIMPLEPROPERTYTEMPLATE('0goThPNYjBbQcAQKpCe1zP',$,'InletConnectionSize','Size of the inlet connection(s), where used, of the inlet connections.\X2\000A000A\X0\Note that all inlet connections are assumed to be the same size.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1510=IFCPROPERTYSETTEMPLATE('1DLDSVpGn0PuXpMZtfUJHb',$,'Pset_BuildingCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuilding. Please note that several building attributes are handled directly at the IfcBuilding instance, the building number (or short name) by IfcBuilding.Name, the building name (or long name) by IfcBuilding.LongName, and the description (or comments) by IfcBuilding.Description. Actual building quantities, like building perimeter, building area and building volume are provided by IfcElementQuantities, and the building classification according to national building code by IfcClassificationReference. ',$,'IfcBuilding',(#1511,#1512,#1513,#1514,#1515,#1516,#1517,#1518,#1519,#1520,#1521));
+#1511=IFCSIMPLEPROPERTYTEMPLATE('12eEDv_jjDhedlYbyy92xh',$,'BuildingID','A unique identifier assigned to a building. A temporary identifier is initially assigned at the time of making a planning application. This temporary identifier is changed to a permanent identifier when the building is registered into a statutory buildings and properties database.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1512=IFCSIMPLEPROPERTYTEMPLATE('0MBM57Wkn3cvQDjTrXiAeT',$,'IsPermanentID','Indicates whether the identity assigned to a building is permanent (= TRUE) or temporary (=FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1513=IFCSIMPLEPROPERTYTEMPLATE('0xDEBuscHFAAfxCp_DMQM2',$,'MainFireUse','Main fire use for the building which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1514=IFCSIMPLEPROPERTYTEMPLATE('38G8BxzEb7P9bHvJ8JZxal',$,'AncillaryFireUse','Ancillary fire use for the building which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1515=IFCSIMPLEPROPERTYTEMPLATE('2R_g7TniH0O8PtizSlcVbq',$,'SprinklerProtection','Indication whether this object is sprinkler protected (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1516=IFCSIMPLEPROPERTYTEMPLATE('3mTlD$96j9CAlivSrZxQf4',$,'SprinklerProtectionAutomatic','Indication whether this object has an automatic sprinkler protection (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1517=IFCSIMPLEPROPERTYTEMPLATE('2mAVS8WL5Fvv8D6hNzwWzo',$,'OccupancyType','Occupancy type for this object.\X2\000A\X0\It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1518=IFCSIMPLEPROPERTYTEMPLATE('14QJcFVtz2rPjZhBliFYPQ',$,'GrossPlannedArea','Total planned area for the building Used for programming the building.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1519=IFCSIMPLEPROPERTYTEMPLATE('2CmDsKXWr0z8AZvbIkdL6C',$,'NumberOfStoreys','Captures the number of storeys within a building for those cases where the IfcBuildingStorey entity is not used. Note that if IfcBuilingStorey is asserted and the number of storeys in a building can be determined from it, then this approach should be used in preference to setting a property for the number of storeys.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1520=IFCSIMPLEPROPERTYTEMPLATE('1xIMJ8$9z0lh2ts$AUKtfk',$,'YearOfConstruction','Year of construction of this building, including expected year of completion.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1521=IFCSIMPLEPROPERTYTEMPLATE('2l9YIuVc15FuDvpdVhfZAg',$,'IsLandmarked','This builing is listed as a historic building (TRUE), or not (FALSE), or unknown.',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
+#1522=IFCPROPERTYSETTEMPLATE('10ZPAup_v82OJ78L7j3Rop',$,'Pset_BuildingElementProxyCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuildingElementProxy.',$,'IfcBuildingElementProxy',(#1523));
+#1523=IFCSIMPLEPROPERTYTEMPLATE('2cSDiPkqL4lB8w1e3Bbr_7',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1524=IFCPROPERTYSETTEMPLATE('06kR_4_$93Oh9$yrlFe9Gh',$,'Pset_BuildingStoreyCommon','Definition from IAI: Properties common to the definition of all instances of IfcBuildingStorey. Please note that several building attributes are handled directly at the IfcBuildingStorey instance, the building storey number (or short name) by IfcBuildingStorey.Name, the building storey name (or long name) by IfcBuildingStorey.LongName, and the description (or comments) by IfcBuildingStorey.Description. Actual building storey quantities, like building storey perimeter, building storey area and building storey volume are provided by IfcElementQuantities, and the building storey classification according to national building code by IfcClassificationReference. \X2\000A\X0\',$,'IfcBuildingStorey',(#1525,#1526,#1527,#1528,#1529,#1530));
+#1525=IFCSIMPLEPROPERTYTEMPLATE('1erlnsTXjEuQBl3EXikiyh',$,'EntranceLevel','Indication whether this building storey is an entrance level to the building (TRUE), or (FALSE) if otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1526=IFCSIMPLEPROPERTYTEMPLATE('0xcolJKA9DlAoPdQU5zsbJ',$,'AboveGround','Indication whether this building storey is fully above ground (TRUE), or below ground (FALSE), or partially above and below ground (UNKNOWN) - as in sloped terrain.',.P_SINGLEVALUE.,'IfcLogical',$,$,$,$,$,.READWRITE.);
+#1527=IFCSIMPLEPROPERTYTEMPLATE('1wJI$e_ML5gfSJE4QibVN$',$,'SprinklerProtection','Indication whether this object is sprinkler protected (true) or not (false).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1528=IFCSIMPLEPROPERTYTEMPLATE('00X29dv1LBKQQbXeg6tFRv',$,'SprinklerProtectionAutomatic','Indication whether this object has an automatic sprinkler protection (true) or not (false).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1529=IFCSIMPLEPROPERTYTEMPLATE('330t2_dMj0jx_eaNbJe1uh',$,'GrossAreaPlanned','Total planned area for the building storey. Used for programming the building storey.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1530=IFCSIMPLEPROPERTYTEMPLATE('0jlH4Q_b94Bw7YAyTumSkk',$,'NetAreaPlanned','Total planned net area for the building storey. Used for programming the building storey.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1531=IFCPROPERTYSETTEMPLATE('3VQgIPXUz88gjAWnaLgZ6L',$,'Pset_BuildingUse','Definition from IAI: Provides information on on the real estate context of the building of interest both current and anticipated.',$,'IfcBuilding',(#1532,#1533,#1534,#1535,#1536,#1537,#1538,#1539,#1540,#1541,#1542,#1543));
+#1532=IFCSIMPLEPROPERTYTEMPLATE('1wv5oOw1j8mwgjPFGt39ML',$,'MarketCategory','Category of use e.g. residential, commercial, recreation etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1533=IFCSIMPLEPROPERTYTEMPLATE('2hzpGNe8fEavQQvmMWMIIR',$,'MarketSubCategory','Subset of category of use e.g. multi-family, 2 bedroom, low rise',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1534=IFCSIMPLEPROPERTYTEMPLATE('1f7TKOAi9BSAE7yWrZn1S$',$,'PlanningControlStatus','Label of zoning category or class, or planning control category for the site or facility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1535=IFCSIMPLEPROPERTYTEMPLATE('2bNcmCYHfDYehRte82RZ99',$,'NarrativeText','Added information relating to the adjacent building use that is not appropriate to the general descriptive text associated with an entity through the inherited IfcRoot.Description',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1536=IFCSIMPLEPROPERTYTEMPLATE('1kUeCDw_964xDum$NhKuON',$,'VacancyRateInCategoryNow','Percentage of vacancy found in the particular category currently',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1537=IFCSIMPLEPROPERTYTEMPLATE('2roW_qTffC4uDubCH6YNa6',$,'TenureModesAvailableNow','A list of the tenure modes that are currently available expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1538=IFCSIMPLEPROPERTYTEMPLATE('3ORwlM$cT9sBapeCNCQn7t',$,'MarketSubCategoriesAvailableNow','A list of the sub categories of property that are currently available expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1539=IFCSIMPLEPROPERTYTEMPLATE('1t_idley96OPHt_E8MdiEY',$,'RentalRatesInCategoryNow','Range of the cost rates for property currently available in the required category.',.P_BOUNDEDVALUE.,'IfcMonetaryMeasure',$,$,$,$,$,.READWRITE.);
+#1540=IFCSIMPLEPROPERTYTEMPLATE('00AxRA961FxPeJaMtxpmFC',$,'VacancyRateInCategoryFuture','Percentage of vacancy found in the particular category expected in the future',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1541=IFCSIMPLEPROPERTYTEMPLATE('1CWkk7RsT2zvuscrotOSr2',$,'TenureModesAvailableFuture','A list of the tenure modes that are expected to be available in the future expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1542=IFCSIMPLEPROPERTYTEMPLATE('02WkYiSBP9CAVPF4k_oCH9',$,'MarketSubCategoriesAvailableFuture','A list of the sub categories of property that are expected to be available in the future expressed in terms of IfcLabel',.P_LISTVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1543=IFCSIMPLEPROPERTYTEMPLATE('0m4$kZ$jL6m9XK6L_KuMP6',$,'RentalRatesInCategoryFuture','Range of the cost rates for property expected to be available in the future in the required category.',.P_BOUNDEDVALUE.,'IfcMonetaryMeasure',$,$,$,$,$,.READWRITE.);
+#1544=IFCPROPERTYSETTEMPLATE('0BulcaI2jBjO9CpsnbSlmJ',$,'Pset_BuildingUseAdjacent','Definition from IAI: Provides information on adjacent buildings and their uses to enable their impact on the building of interest to be determined. Note that for each instance of the property set used, where there is an existence of risk, there will be an instance of the property set Pset_Risk (q.v)',$,'IfcBuilding',(#1545,#1546,#1547,#1548));
+#1545=IFCSIMPLEPROPERTYTEMPLATE('0sNdIDKFD7VvrrI7xKhTlL',$,'MarketCategory','Category of use e.g. residential, commercial, recreation etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1546=IFCSIMPLEPROPERTYTEMPLATE('20SvjKPBPBDQL0_IUrxKrG',$,'MarketSubCategory','Subset of category of use e.g. multi-family, 2 bedroom, low rise',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1547=IFCSIMPLEPROPERTYTEMPLATE('2Mu45VPWf9v9jnncdCdot9',$,'PlanningControlStatus','Label of zoning category or class, or planning control category for the site or facility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1548=IFCSIMPLEPROPERTYTEMPLATE('3hEwPFeFr3gQUbM67yCoYH',$,'NarrativeText','Added information relating to the adjacent building use that is not appropriate to the general descriptive text associated with an entity through the inherited IfcRoot.Description',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1549=IFCPROPERTYSETTEMPLATE('2nZ1R73tvCF9D4tFgWnhtW',$,'Pset_BuildingWaterStorage','The basic set of properties that are used for determining the water requirements for a building.\X2\000A\X0\Typically, this property set is expected to be used in conjunction with IfcBuilding.',$,'IfcBuilding',(#1550,#1551,#1552,#1553,#1554));
+#1550=IFCSIMPLEPROPERTYTEMPLATE('0uNA0VywDBCfKK71vgxPli',$,'WaterStorageRatePerPerson','The volume of domestic water that needs to be stored per person. ',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1551=IFCSIMPLEPROPERTYTEMPLATE('0kNVBqIWDDWf2K69DenrGZ',$,'OneDayPotableWater','The volume of water that needs to be stored to supply water to the building for human use for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1552=IFCSIMPLEPROPERTYTEMPLATE('1YIy5KYjT6M9gTZXsfN8wK',$,'OneDayEssentialWater','The volume of water that needs to be stored to supply water to the building for uninterrupted water supply to essential areas for one day in the event of water supply failure. An essential area is considered to be a part of a building carrying out a critical function and that is unable to operate in the intended manner without a water supply.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1553=IFCSIMPLEPROPERTYTEMPLATE('11Tmi4d6fDLOBdDrGnypKy',$,'OneDayCoolingTowerMakeupWater','The volume of water that needs to be stored to supply make up water to the cooling towers in a building for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1554=IFCSIMPLEPROPERTYTEMPLATE('1zHlBCrJrEqg7kQk9ZTHat',$,'OneDayProcessOrProductionWater','The volume of water that needs to be stored to supply water for process or production requirements in a building for one day in the event of water supply failure.',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#1555=IFCPROPERTYSETTEMPLATE('36FWmrk692CgIg7u0hvxhe',$,'Pset_CoveringCeiling','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering with the PredefinedType set to CEILING.',$,'IfcCovering',(#1556,#1557,#1558,#1559));
+#1556=IFCSIMPLEPROPERTYTEMPLATE('1kN735JdD0_vHHzuHi4$9P',$,'FragilityRating','The level of fragility of the ceiling.\X2\000A\X0\It is giving according to the national building code. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1557=IFCSIMPLEPROPERTYTEMPLATE('1jROxcPgb5sRQ3RfkDgw3E',$,'Permeability','Ratio of the permeability of the ceiling.\X2\000A\X0\The ration can be used to indicate an open ceiling (that enables identification of whether ceiling construction should be considered as impeding distribution of sprinkler water, light etc. from installations within the ceiling area) .',.P_SINGLEVALUE.,'IfcNormalisedRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1558=IFCSIMPLEPROPERTYTEMPLATE('12ecHK3rD5D9pzYS5jIDcw',$,'TileLength','Length of ceiling tiles. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1559=IFCSIMPLEPROPERTYTEMPLATE('1u0RM5zkD86vDgjKmFjck6',$,'TileWidth','Width of ceiling tiles. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1560=IFCPROPERTYSETTEMPLATE('2D5B7GMaLFa8iibZZush4g',$,'Pset_CoveringCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering.',$,'IfcCovering,IfcCoveringType',(#1561,#1562,#1563,#1564,#1565,#1566,#1567,#1568,#1569,#1570));
+#1561=IFCSIMPLEPROPERTYTEMPLATE('15BAZa3rrDmxn_6_$7uYKJ',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1562=IFCSIMPLEPROPERTYTEMPLATE('2qjHmAC151ohdZH7pA8Khn',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1563=IFCSIMPLEPROPERTYTEMPLATE('3W6wydFhb5yRHMfVu5W5gb',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1564=IFCSIMPLEPROPERTYTEMPLATE('12rQ71GM1Amh1FbAdabxWw',$,'FlammabilityRating','Flammability Rating for this object.\X2\000A\X0\It is given according to the national building code that governs the rating of flammability for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1565=IFCSIMPLEPROPERTYTEMPLATE('1kpX$gWJfFIhKLVjBB_6Ra',$,'FragilityRating','Indication on the fragility of the covering (e.g., under fire conditions). It is given according to the national building code that might provide a classification for fragility.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1566=IFCSIMPLEPROPERTYTEMPLATE('3KQHN1b896fu6PhujUxJwa',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1567=IFCSIMPLEPROPERTYTEMPLATE('2IqB16OEn1_vg2JqeG4kKC',$,'Material','Main material of the covering, it should only be given, if no IfcMaterial class is assigned to the IfcCovering instance.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1568=IFCSIMPLEPROPERTYTEMPLATE('3wPoeu6jPCb95ldJhw_2tV',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1569=IFCSIMPLEPROPERTYTEMPLATE('12GDK5Syv5tgvSoNPbsHkG',$,'TotalThickness','Thickness of the covering, The thickness information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1570=IFCSIMPLEPROPERTYTEMPLATE('3kDD6F4UnCn8DBo0V$v3Rk',$,'Finish','Finish selection for this object.\X2\000A\X0\Here specification of the surface finish for informational purposes',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1571=IFCPROPERTYSETTEMPLATE('3LLtzjasr8UBSdTle7mmyx',$,'Pset_CoveringFlooring','Definition from IAI: Properties common to the definition of all occurrences of IfcCovering with the PredefinedType set to FLOORING.',$,'IfcCovering',(#1572,#1573));
+#1572=IFCSIMPLEPROPERTYTEMPLATE('1j6xw$AqD0Zv0818ehHqCJ',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1573=IFCSIMPLEPROPERTYTEMPLATE('2eoXJfDe96$fzP8AReSEfU',$,'HasAntiStaticSurface','Indication whether the surface finish is designed to prevent electrostatic charge (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1574=IFCPROPERTYSETTEMPLATE('1feg9_SEfCOxF0QLGO2Fai',$,'Pset_Draughting','Definition from IAI: Property set to capture layer and colour as a quick win implementation within IFC2x platform to enable more efficient exchange of 3D building models.\X2\000A\X0\NOTE: With implementation of the IFC2x2 capabilities defined in the presentation resources (IfcPresentationLayerAssignment, IfcCurveStyle) the use of this property set may become obsolete.',$,'IfcElement,IfcSpatialStructureElement',(#1575,#1576));
+#1575=IFCSIMPLEPROPERTYTEMPLATE('0$a6tMVaj9aevVxaru0kqa',$,'LayerName','Identifier of the layer name within the sending application.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1576=IFCCOMPLEXPROPERTYTEMPLATE('0jdn88Ifr4wgOEntxHPg2M',$,'Colour','Significant colour definition of the whole element for all shape representations, it is given for highlighting/differentiation purposes, full colour representation of individual geometric representation items, using the IFC2x2 presentation schemas, always takes precedence. In case of several colour information available (line, upper/lower surface, etc.) the sending application shall identify the most significant single colour to be included,','RGB_Colour',.P_COMPLEX.,(#1577,#1578,#1579));
+#1577=IFCSIMPLEPROPERTYTEMPLATE('3XsqfcdDr16ftypeeq46Al',$,'Red','Red component of the RGB colour specification given by an integer of 0..255',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1578=IFCSIMPLEPROPERTYTEMPLATE('1Wo3H6IDLDxuozZkuPT4iB',$,'Green','Green component of the RGB colour specification given by an integer of 0..256',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1579=IFCSIMPLEPROPERTYTEMPLATE('1SL2v8n5n4CvX450EcUXDp',$,'Blue','Blue component of the RGB colour specification given by an integer of 0..257',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1580=IFCPROPERTYSETTEMPLATE('1I3cnY971CQBXQ12n4qZg9',$,'Pset_ElementShading','Definition from IAI: Shading device properties associated with an element that represents a shading device, e.g. an IfcBuildingElementProxy or any other building element.\X2\000A\X0\',$,'IfcElement',(#1581,#1583,#1584,#1585,#1586,#1587,#1588,#1589,#1590));
+#1581=IFCSIMPLEPROPERTYTEMPLATE('2S$$NL_CP0U83oKIvTUc2$',$,'ShadingDeviceType','Specifies the type of shading device.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1582,$,$,$,.READWRITE.);
+#1582=IFCPROPERTYENUMERATION('PEnum_ElementShading',(IFCLABEL('FIXED'),IFCLABEL('MOVABLE'),IFCLABEL('EXTERIOR'),IFCLABEL('INTERIOR'),IFCLABEL('OVERHANG'),IFCLABEL('SIDEFIN'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#1583=IFCSIMPLEPROPERTYTEMPLATE('15jTMn8UP3MxFrK7lXt8G4',$,'Azimuth','Azimuth of the element as derived from the placement of the element shape, by convention: North = 0'' and measurement is done clockwise (I.e. east = 90'', if unit is grad). The calculation procedure will be specific for each type of element. In cases of inconsistency between the geometric parameters and the azimuth property, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1584=IFCSIMPLEPROPERTYTEMPLATE('0mn9rbO7H0cxzgSTjmqBzS',$,'Inclination','Inclination of the element as derived from the placement of the element shape, by convention: Vertical = 0'', horizontal = 90'', if unit is grad). The calculation procedure will be specific for each type of element. In cases of inconsistency between the geometric parameters and the azimuth property, provided in the attached property set, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositivePlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1585=IFCSIMPLEPROPERTYTEMPLATE('0JNMihrLzBvfkN4MRjr8hv',$,'TiltRange','The minimum and maximum angles of possible tilt defined in the plane perpendicular to the extrusion axis (X-Axis of the local placement). The angle shall be measured from the orientation of the Z-Axis in the local placement.',.P_BOUNDEDVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1586=IFCSIMPLEPROPERTYTEMPLATE('2i784GCrbA_9BzJ95t87Bk',$,'AverageSolarTransmittance','Overall or average ratio of the solar flux transmitted through a body to that incident upon it.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1587=IFCSIMPLEPROPERTYTEMPLATE('3LMwI9LG5A1RcLp7Jf$Q3X',$,'AverageVisibleTransmittance','Overall or average ratio of the visible spectral flux transmitted through a body to that incident upon it.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1588=IFCSIMPLEPROPERTYTEMPLATE('1yVbjwTo95$AEl7_mF441S',$,'Reflectance','The ratio of reflected power to incident power.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1589=IFCSIMPLEPROPERTYTEMPLATE('2j5Maf1m9DwvuN$5ymGPnX',$,'Roughness','A measure of the vertical deviations of the surface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1590=IFCSIMPLEPROPERTYTEMPLATE('1VHSgxVf123Ap4Vx1$FJAd',$,'Color','The color of the surface.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1591=IFCPROPERTYSETTEMPLATE('2PgxYW18LAzR9Q3Zxm6v1j',$,'Pset_OpeningElementCommon','Definition from IAI: Properties common to the definition of all instances of IfcOpeningElement.\X2\000A\X0\',$,'IfcOpeningElement',(#1592,#1593,#1594,#1595,#1596));
+#1592=IFCSIMPLEPROPERTYTEMPLATE('01V2pG4jH11AdpxrQJ4_Gd',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1593=IFCSIMPLEPROPERTYTEMPLATE('2xHxpHUQTB0RN8kzvgbT7o',$,'Purpose','Indication of the purpose for that opening, e.g. ''ventilation'', ''access'', etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1594=IFCSIMPLEPROPERTYTEMPLATE('3Md4$JOzr3kxNBqik$0o7V',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the space (in case of e.g., a corridor) is designed to serve as an exit space, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1595=IFCSIMPLEPROPERTYTEMPLATE('05RJy88rb0Vg8XR8yfCESr',$,'ProtectedOpening','Indication whether the opening is considered to be protected under fire safety considerations. If (TRUE) it counts as a protected opening under the applicable building code, (FALSE) otherwise. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1596=IFCSIMPLEPROPERTYTEMPLATE('2TL_$My_b6mANy$f5ZBVsD',$,'ParallelJambs','Indicated, whether the jambs of an opening in a curved building element are intended to be parallel (TRUE) or are radial (FALSE). Radial means, that the extension of the jambs are rays through the axis of the revolution forming the curved building element. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1597=IFCPROPERTYSETTEMPLATE('2UnL_UHdfFd8t82v3yjT0w',$,'Pset_QuantityTakeOff','Definition from IAI: Description of quantities for work items to be exchanged in addition to the IfcElementQuantity\X2\000A\X0\',$,'IfcElement',(#1598,#1599,#1602));
+#1598=IFCSIMPLEPROPERTYTEMPLATE('1gbTBKS8vCAuUT$cf3iVIw',$,'Reference','Reference ID for this specified type of quantity, e.g. linking back to a macro name, etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1599=IFCCOMPLEXPROPERTYTEMPLATE('2zx0DJ1vf04Ote2us03Gg7',$,'LayerQuantity','Quantity take-off information specific to a single layer of the element, if multiple layer information is passed, then the property shall be indexed, e.g. LayerQuantity1, ayerQuantity2, \X2\2026\X0\','QTO_Layer',.P_COMPLEX.,(#1600,#1601));
+#1600=IFCSIMPLEPROPERTYTEMPLATE('3$pMNWROTFuh2uYWuO0nbZ',$,'MaterialLayer','Indication of the material layer (e.g. of a wall or slab) to which the quantity information belongs to)',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1601=IFCSIMPLEPROPERTYTEMPLATE('2FgMkejVjB8O0usf1iYaJQ',$,'LocalContext','Local context information for the take-off quantity, if multiple information items are passed, then the property shall be indexed, e.g. LocalContext1, LocalContext2, \X2\2026\X0\',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1602=IFCSIMPLEPROPERTYTEMPLATE('1bunfIEAbA1vAkunODI1H9',$,'LocalContext','Local context information for the take-off quantity, if multiple information items are passed, then the property shall be indexed, e.g. LocalContext1, LocalContext2, \X2\2026\X0\',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1603=IFCPROPERTYSETTEMPLATE('0GrkZRWoz559wbOVj4DhF3',$,'Pset_SiteCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSite. Please note that several site attributes are handled directly at the IfcSite instance, the site number (or short name) by IfcSite.Name, the site name (or long name) by IfcSite.LongName, and the description (or comments) by IfcSite.Description. The land title number is also given as an explicit attribute IfcSite.LandTitleNumber. Actual site quantities, like site perimeter, site area and site volume are provided by IfcElementQuantities, and site classification according to national building code by IfcClassificationReference. The global positioning of the site in terms of Northing and Easting and height above sea level datum is given by IfcSite.RefLongitude, IfcSite.RefLatitude, IfcSite.RefElevation and the postal address by IfcSite.SiteAddress.',$,'IfcSite',(#1604,#1605,#1606));
+#1604=IFCSIMPLEPROPERTYTEMPLATE('2rnyxfg2HE$v0NbQFX_aOY',$,'BuildableArea','The area of utilization expressed as a minimum value and a maximum value - according to local building codes. ',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1605=IFCSIMPLEPROPERTYTEMPLATE('284gs4f5128wvEKSy7m_oR',$,'TotalArea','Total area of the site - masured according to local building codes.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1606=IFCSIMPLEPROPERTYTEMPLATE('0yZ4QCBSDARQrks0Vl5WVA',$,'BuildingHeightLimit','Calculated maximum height of buildings on this site - according to local building codes. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1607=IFCPROPERTYSETTEMPLATE('2NzitGo59AM9KMGD90BPVJ',$,'Pset_SpaceCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace. Please note that several space attributes are handled directly at the IfcSpace instance, the space number (or short name) by IfcSpace.Name, the space name (or long name) by IfcSpace:LongName, and the description (or comments) by IfcSpace.Description. Actual space quantities, like space perimeter, space area and space volume are provided by IfcElementQuantities, and space classification according to national building code by IfcClassificationReference. The level above zero (relative to the building) for the slab row construction is provided by the IfcBuildingStorey.Elevation, the level above zero (relative to the building) for the floor finish is provided by the IfcSpace.ElevationWithFlooring.',$,'IfcSpace',(#1608,#1609,#1610,#1611,#1612,#1613,#1614,#1615,#1616,#1617,#1618,#1619));
+#1608=IFCSIMPLEPROPERTYTEMPLATE('3ZNCklAM14axAyO8R5yudI',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1609=IFCSIMPLEPROPERTYTEMPLATE('3Un3Qd2zbFcAZT7tPEPIJy',$,'Category','Category of space usage or utilization of the area. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1610=IFCSIMPLEPROPERTYTEMPLATE('0DqMDMnvP56xe6WVepkJRC',$,'FloorCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1611=IFCSIMPLEPROPERTYTEMPLATE('3Y0Bbo9ZnBYwtvg6LpuyR$',$,'WallCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1612=IFCSIMPLEPROPERTYTEMPLATE('3FX3zhoPjCwQsb9h_w5Dnl',$,'CeilingCovering','Label to indicate the material or finish of the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1613=IFCSIMPLEPROPERTYTEMPLATE('3sMHkM0GT9y8lXsVbEDJxu',$,'SkirtingBoard','Label to indicate the material or construction of the skirting board around the space flooring. The label is used for room book information and often displayed in room stamp.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1614=IFCSIMPLEPROPERTYTEMPLATE('0j$Rd71vb5Ww_L$ctcrrlD',$,'GrossPlannedArea','Total planned area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1615=IFCSIMPLEPROPERTYTEMPLATE('2qV94Ro3jDCvtbTnqCm5AT',$,'NetPlannedArea',$,.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1616=IFCSIMPLEPROPERTYTEMPLATE('0DLkAeIhX78xrhfulW01hy',$,'PubliclyAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as a publicly accessible space, e.g., for a public toilet (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1617=IFCSIMPLEPROPERTYTEMPLATE('33RayuGinC6hL3$E5Iv9cX',$,'HandicapAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as an accessible space for handicapped people, e.g., for a public toilet (TRUE) or not (FALSE). This information is often used to declare the need for access for the disabled and for special design requirements of this space.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1618=IFCSIMPLEPROPERTYTEMPLATE('0WwVp4WNj3bRr3p43k7SQD',$,'ConcealedFlooring','Indication whether this space is declared to be a concealed flooring (TRUE) or not (FALSE). A concealed flooring is normally meant to be the space beneath a raised floor.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1619=IFCSIMPLEPROPERTYTEMPLATE('0uLbdP8vb3oQlEqR7aNGLm',$,'ConcealedCeiling','Indication whether this space is declared to be a concealed ceiling (TRUE) or not (FALSE). A concealed ceiling is normally meant to be the space between a slab and a suspended ceiling.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1620=IFCPROPERTYSETTEMPLATE('3MN_FnmXL4DvWg_3JXYw7C',$,'Pset_SpaceFireSafetyRequirements','Definition from IAI: Properties related to fire protection of spaces that apply to the occurrences of IfcSpace or IfcZone.',$,'IfcSpace,IfcZone',(#1621,#1622,#1623,#1624,#1625,#1626,#1627,#1628,#1629));
+#1621=IFCSIMPLEPROPERTYTEMPLATE('1mN6H3vbL9pPKSusIkiUcq',$,'MainFireUse','Main fire use for the space which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1622=IFCSIMPLEPROPERTYTEMPLATE('18HfZ5hbPBu8a7ntNdvh7H',$,'AncillaryFireUse','Ancillary fire use for the space which is assigned from the fire use classification table as given by the relevant national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1623=IFCSIMPLEPROPERTYTEMPLATE('32L7cT$fn0PeOunMzLsNdM',$,'FireRiskFactor','Fire Risk factor assigned to the space according to local building regulations.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1624=IFCSIMPLEPROPERTYTEMPLATE('1dXb1Uoxb1cvqQAhMmvUAj',$,'FireHazardFactor','Fire hazard code of the space. The coding depends on the national fire safety regulations.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1625=IFCSIMPLEPROPERTYTEMPLATE('1KsQhOB35FkghwEI1Itm7u',$,'FlammableStorage','Indication whether the space is intended to serve as a storage of flammable material (which is regarded as such by the presiding building code. (TRUE) indicates yes, (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1626=IFCSIMPLEPROPERTYTEMPLATE('0yNMzuwP12zwxYfoHpWzLa',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the space (in case of e.g., a corridor) is designed to serve as an exit space, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1627=IFCSIMPLEPROPERTYTEMPLATE('2A0Z7l64vBHvjsXLbk__lQ',$,'SprinklerProtection','Indication whether the space is sprinkler protected (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1628=IFCSIMPLEPROPERTYTEMPLATE('3vk62BM45BN95aToz3vr_l',$,'SprinklerProtectionAutomatic','Indication whether the space has an automatic sprinkler protection (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "SprinklerProtection" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1629=IFCSIMPLEPROPERTYTEMPLATE('1n6lSkyFH3NO7nZIcYwrz7',$,'AirPressurization','Indication whether the space is required to have pressurized air (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1630=IFCPROPERTYSETTEMPLATE('0zJVZ8itb6RxrWN7UsvBIe',$,'Pset_SpaceLightingRequirements','Definition from IAI: Properties related to the lighting requirements that apply to the occurrences of IfcSpace or IfcZone. This includes the required artificial lighting, illuminance, etc.',$,'IfcSpace,IfcZone',(#1631,#1632));
+#1631=IFCSIMPLEPROPERTYTEMPLATE('0QA1LeRu58avmctxb_SOv4',$,'ArtificialLighting','Indication whether this space requires artificial lighting (as natural lighting would be not sufficient). (TRUE) indicates yes (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1632=IFCSIMPLEPROPERTYTEMPLATE('3QmBikv_n2n9Ihh5oLHZn5',$,'Illuminance','Required average illuminance value for this space.',.P_SINGLEVALUE.,'IfcIlluminanceMeasure',$,$,$,$,$,.READWRITE.);
+#1633=IFCPROPERTYSETTEMPLATE('2bTXM3_wP9ihRySpnBa6V9',$,'Pset_SpaceOccupancyRequirements','Definition from IAI: Properties concerning work activities occurring or expected to occur within one or a set of similar spatial structure elements.',$,'IfcSpace,IfcZone',(#1634,#1635,#1636,#1637,#1638,#1639,#1640));
+#1634=IFCSIMPLEPROPERTYTEMPLATE('3RBbaFpkz8uBCnIatv5Rxp',$,'OccupancyType','Occupancy type for this object. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1635=IFCSIMPLEPROPERTYTEMPLATE('3fyq8NIqv4QBWXB391TKm6',$,'OccupancyNumber','Number of people required for the activity assigned to this space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1636=IFCSIMPLEPROPERTYTEMPLATE('100$mP6ejAuB0iFKsIyJ1y',$,'OccupancyNumberPeak','Maximal number of people required for the activity assigned to this space in peak time.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1637=IFCSIMPLEPROPERTYTEMPLATE('30CHA1pwv7bRfZQlqE8SY$',$,'OccupancyTimePerDay','The amount of time during the day that the activity is required within this space.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#1638=IFCSIMPLEPROPERTYTEMPLATE('3jpzrvTgnBzfM$MA2fCzlM',$,'AreaPerOccupant','Design occupancy loading for this type of usage assigned to this space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1639=IFCSIMPLEPROPERTYTEMPLATE('3wwxejxxHFZRCMOvQaZGKU',$,'MinimumHeadroom','Headroom required for the activity assigned to this space.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1640=IFCSIMPLEPROPERTYTEMPLATE('3oU35fngn0OOzh1D0Jwq82',$,'IsOutlookDesirable','An indication of whether the outlook is desirable (set TRUE) or not (set FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1641=IFCPROPERTYSETTEMPLATE('0kR5fLHbn0zQYmldUhEm$d',$,'Pset_SpaceParking','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace which have an attribute value for ObjectType = ''Parking''. NOTE: Modified in IFC 2x3, properties ParkingUse and ParkingUnits added.',$,'IfcSpace',(#1642,#1643,#1644));
+#1642=IFCSIMPLEPROPERTYTEMPLATE('1JcTlApuX1Eh_TRL$8S89H',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\It is giving according to the requirements of the national building code. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1643=IFCSIMPLEPROPERTYTEMPLATE('0_dbwgKm93nPbXVwUbbll9',$,'ParkingUse','Identifies the type of transporation for which the parking space is designed. Values are not predefined but might include car, compact car, motorcycle, bicycle, truck, bus etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1644=IFCSIMPLEPROPERTYTEMPLATE('3KX6_bz558cghD4n9VHZ9U',$,'ParkingUnits','Indicates the number of transporation units of the type specified by the property ParkingUse that may be accommodated within the space. Generally, this value should default to 1 unit. However, where the parking space is for motorcycles or bicycles, provision may be made for more than one unit in the space.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1645=IFCPROPERTYSETTEMPLATE('11flEP$qrCIwtqSAOVInKF',$,'Pset_SpaceParkingAisle','Definition from IAI: Properties common to the definition of all occurrences of IfcSpace which have an attribute value for ObjectType = ''ParkingAisle''.',$,'IfcSpace',(#1646));
+#1646=IFCSIMPLEPROPERTYTEMPLATE('3Iasaahrz1zhvzKXNC0sU2',$,'IsOneWay','Indicates whether the parking aisle is designed for oneway traffic (TRUE) or twoway traffic (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1647=IFCPROPERTYSETTEMPLATE('19rV9eQb58V8T3WG_eW7fk',$,'Pset_SpaceThermalRequirements','Definition from IAI: Properties related to the comfort requirements for thermal and other thermal related performances of spaces that apply to the occurrences of IfcSpace or IfcZone. This includes the required design temperature, humidity, and air conditioning.',$,'IfcSpace,IfcZone',(#1648,#1649,#1650,#1651,#1652,#1653,#1654,#1655,#1656,#1657,#1658,#1659,#1660,#1661,#1662));
+#1648=IFCSIMPLEPROPERTYTEMPLATE('1sggA$NMD0xObIF2komCtY',$,'SpaceTemperatureMax','Temperature of the space or zone, that is required from user/designer view point. If no summer or winter space temperature requirements are given, it applies all year, otherwise for the intermediate period.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1649=IFCSIMPLEPROPERTYTEMPLATE('2n9VqRJBHDsP_1TfAQD9JA',$,'SpaceTemperatureMin',' Minimal temperature of the space or zone, that is required from user/designer view point. If no summer or winter space temperature requirements are given, it applies all year, otherwise for the intermediate period. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1650=IFCSIMPLEPROPERTYTEMPLATE('2QeZKz8GXAefCAai95dUU7',$,'SpaceTemperatureSummerMax','Maximal temperature of the space or zone for the hot (summer) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1651=IFCSIMPLEPROPERTYTEMPLATE('2OdmP2jaL5nPuutVViV5Yn',$,'SpaceTemperatureSummerMin','Minimal temperature of the space or zone for the hot (summer) period, that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1652=IFCSIMPLEPROPERTYTEMPLATE('33Ui89KTf0qvGePjO5Nryx',$,'SpaceTemperatureWinterMax','Maximal temperature of the space or zone for the cold (winter) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1653=IFCSIMPLEPROPERTYTEMPLATE('2mQnmBIX5CFB4CJ91q5AvP',$,'SpaceTemperatureWinterMin','Minimal temperature of the space or zone for the cold (winter) period, that is required from user/designer view point.',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1654=IFCSIMPLEPROPERTYTEMPLATE('2pBZCK9D1Fq9Q0QlO2$i0l',$,'SpaceHumidity','Humidity of the space or zone that is required from user/designer view point. If no summer or winter space humidity requirements are given, it applies all year, otherwise for the intermediate period.',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1655=IFCSIMPLEPROPERTYTEMPLATE('04EKsJk$L0sRaLMGQL6rwi',$,'SpaceHumiditySummer','Humidity of the space or zone for the hot (summer) period, that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1656=IFCSIMPLEPROPERTYTEMPLATE('3ZGe8Eh$r5Gfn0FHQhnwIO',$,'SpaceHumidityWinter','Humidity of the space or zone for the cold (winter) period that is required from user/designer view point. ',.P_SINGLEVALUE.,'IfcRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1657=IFCSIMPLEPROPERTYTEMPLATE('1JCF4xtcHCaPdwWjdTrFxF',$,'DiscontinuedHeating','Indication whether discontinued heating is required/desirable from user/designer view point. (TRUE) if yes, (FALSE) otherwise.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1658=IFCSIMPLEPROPERTYTEMPLATE('3C4SwIufj8GhqkInySYKlb',$,'NaturalVentilation','Indication whether the space is required to have natural ventilation (TRUE) or mechanical ventilation (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1659=IFCSIMPLEPROPERTYTEMPLATE('2UIb183kj7T9npjFpw33Ej',$,'NaturalVentilationRate','Indication of the requirement of a particular natural air ventilation rate, given in air changes per hour.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1660=IFCSIMPLEPROPERTYTEMPLATE('29_qOef2nAtQ7RT6QXjowH',$,'MechanicalVentilationRate','Indication of the requirement of a particular mechanical air ventilation rate, given in air changes per hour.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1661=IFCSIMPLEPROPERTYTEMPLATE('3Hft3gXKL7VRdlxVSKDEfd',$,'AirConditioning','Indication whether this space requires air conditioning provided (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1662=IFCSIMPLEPROPERTYTEMPLATE('0lfgeCxurF4AX54IVDx9VC',$,'AirConditioningCentral','Indication whether the space requires a central air conditioning provided (TRUE) or not (FALSE).\X2\000A\X0\It should only be given, if the property "AirConditioning" is set to TRUE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1663=IFCPROPERTYSETTEMPLATE('3YAjzXSlf0txi$guW9vCv$',$,'Pset_TransportElementCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcTransportElement.',$,'IfcTransportElement',(#1664,#1665));
+#1664=IFCSIMPLEPROPERTYTEMPLATE('14NJlIb1v3IQ_OsM$zbudb',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1665=IFCSIMPLEPROPERTYTEMPLATE('2Nh50hoVHBy9aMBwU7_z4G',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here whether the transport element (in case of e.g., a lift) is designed to serve as a fire exit, e.g., for fire escape purposes.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1666=IFCPROPERTYSETTEMPLATE('271X8fCTX0v8h3GehHmS6Q',$,'Pset_TransportElementElevator','Definition from IAI: Properties common to the definition of all occurrences of IfcTransportElement with the predefined type ="ELEVATOR"',$,'IfcTransportElement',(#1667,#1668,#1669));
+#1667=IFCSIMPLEPROPERTYTEMPLATE('3zEP1OFCnAje5j5C4DO7L4',$,'ClearWidth','Clear width of the object (elevator). It indicates the distance from the inner surfaces of the elevator car left and right from the elevator door. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1668=IFCSIMPLEPROPERTYTEMPLATE('1KCpNDXcf54vq3ADCSiUXj',$,'ClearDepth','Clear depth of the object (elevator). It indicates the distance from the inner surface of the elevator door to the opposite surface of the elevator car. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1669=IFCSIMPLEPROPERTYTEMPLATE('3zsaq9sof76BEVg0mW2uTh',$,'ClearHeight','Clear height of the object (elevator). \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1670=IFCPROPERTYSETTEMPLATE('1$fsCCQr909Rg1U2WJxH5R',$,'Pset_ZoneCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcZone.',$,'IfcZone',(#1671,#1672,#1673,#1674,#1675,#1676));
+#1671=IFCSIMPLEPROPERTYTEMPLATE('3HH0G2SoL4hALl2aGMq1Ga',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1672=IFCSIMPLEPROPERTYTEMPLATE('3j0lZiG3X4lA$edoJHSUFq',$,'Category','Category of space usage or utilization of the area. It is defined according to the presiding national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1673=IFCSIMPLEPROPERTYTEMPLATE('1iahFsuVr1A90cJmZg7_X$',$,'GrossAreaPlanned','Total planned gross area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1674=IFCSIMPLEPROPERTYTEMPLATE('0EQTduACfCdBKXPmuA4pgk',$,'NetAreaPlanned','Total planned net area for the space. Used for programming the space.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1675=IFCSIMPLEPROPERTYTEMPLATE('2Gn$zZ6Tv1gxT0TjVS8dKq',$,'PubliclyAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as a publicly accessible space, e.g., for a public toilet (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1676=IFCSIMPLEPROPERTYTEMPLATE('09tR3tZ21Emgecar9u2z6M',$,'HandicapAccessible','Indication whether this space (in case of e.g., a toilet) is designed to serve as an accessible space for handicapped people, e.g., for a public toilet (TRUE) or not (FALSE). This information is often used to declare the need for access for the disabled and for special design requirements of this space.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1677=IFCPROPERTYSETTEMPLATE('11e4VX2KDExwIhqH_ZUQZ1',$,'Pset_BeamCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcBeam.',$,'IfcBeam',(#1678,#1679,#1680,#1681,#1682,#1683));
+#1678=IFCSIMPLEPROPERTYTEMPLATE('21vlfcJwv28BbDmPzaSt7B',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1679=IFCSIMPLEPROPERTYTEMPLATE('2YrLcHfFfBOvjvR7aP1w4h',$,'Span','Clear span for this object.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1680=IFCSIMPLEPROPERTYTEMPLATE('3mDowEtjb79R0nv4QMHs28',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1681=IFCSIMPLEPROPERTYTEMPLATE('0cE2E6KF1Fh8uycYYT72eA',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1682=IFCSIMPLEPROPERTYTEMPLATE('1X4nKVkp10GP5gpzFYlMqt',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1683=IFCSIMPLEPROPERTYTEMPLATE('0$FE4h67z7JvEIXqY0wwkz',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1684=IFCPROPERTYSETTEMPLATE('0BZJwHTwL0b9nKcrod9sWi',$,'Pset_ColumnCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcColumn.',$,'IfcColumn',(#1685,#1686,#1687,#1688,#1689));
+#1685=IFCSIMPLEPROPERTYTEMPLATE('13n5nk1pHCQPvdG$qzk7a0',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1686=IFCSIMPLEPROPERTYTEMPLATE('281CSmlfL2Mw8NvoXPdEmq',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1687=IFCSIMPLEPROPERTYTEMPLATE('2d1RiykB94fAKxBClZHuFN',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1688=IFCSIMPLEPROPERTYTEMPLATE('2KdU5RNhL1tPTIijeTEp7d',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1689=IFCSIMPLEPROPERTYTEMPLATE('09hFbWs19309ugYPgHGL8Z',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1690=IFCPROPERTYSETTEMPLATE('1jSPL9guzAF8Xpg8KbDqdH',$,'Pset_CurtainWallCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcCurtainWall.',$,'IfcCurtainWall',(#1691,#1692,#1693,#1694,#1695,#1696,#1697));
+#1691=IFCSIMPLEPROPERTYTEMPLATE('2KMz7HHhj8UuQRMLVIs34Z',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1692=IFCSIMPLEPROPERTYTEMPLATE('337Alc_GjEi8xzSPMiDnv_',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1693=IFCSIMPLEPROPERTYTEMPLATE('2m4spQK6z7xOxP9r0SJMIY',$,'FireRating','Fire rating given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1694=IFCSIMPLEPROPERTYTEMPLATE('3XGEoy8O55N8onXQAQrWUo',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1695=IFCSIMPLEPROPERTYTEMPLATE('2QxVWGrIX3h9sT478p0OJY',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1696=IFCSIMPLEPROPERTYTEMPLATE('2KKvQqY2bAzxDEM13sCgBy',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Here the total thermal transmittance coefficient through the wall (including all materials).',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1697=IFCSIMPLEPROPERTYTEMPLATE('3NbgbQ5ZjAVfX2GdIl5ZKK',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1698=IFCPROPERTYSETTEMPLATE('2C7yD2EBH7lAx0sTrT1YMn',$,'Pset_DoorCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcDoor.',$,'IfcDoor',(#1699,#1700,#1701,#1702,#1703,#1704,#1705,#1706,#1707,#1708,#1709,#1710));
+#1699=IFCSIMPLEPROPERTYTEMPLATE('07aYT0tq1C5v75QdFuZUgp',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1700=IFCSIMPLEPROPERTYTEMPLATE('1kPulh$nnAXBIZr68Il1xn',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1701=IFCSIMPLEPROPERTYTEMPLATE('0AojJjhdvAze0yfh8eG86l',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1702=IFCSIMPLEPROPERTYTEMPLATE('0CpPpYD2X2zu9l5MysuQFw',$,'SecurityRating','Index based rating system indicating security level.\X2\000A\X0\It is giving according to the national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1703=IFCSIMPLEPROPERTYTEMPLATE('14IuIZABzAA8XiJzsu7uZK',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1704=IFCSIMPLEPROPERTYTEMPLATE('2MWPvtKyPA_ATVO3xbcooO',$,'Infiltration','Infiltration flowrate of outside air for the filler object based on the area of the filler object at a pressure level of 50 Pascals. It shall be used, if the length of all joints is unknown. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1705=IFCSIMPLEPROPERTYTEMPLATE('0rd9BRoIT7gwfSp$HNXqWN',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1706=IFCSIMPLEPROPERTYTEMPLATE('16yfpDIMrEguoi$3dUOamm',$,'GlazingAreaFraction','Fraction of the glazing area relative to the total area of the filling element. \X2\000A\X0\It shall be used, if the glazing area is not given separately for all panels within the filling element. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1707=IFCSIMPLEPROPERTYTEMPLATE('1m_Z$zPj585OakzZtYaJ7_',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\It is giving according to the requirements of the national building code. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1708=IFCSIMPLEPROPERTYTEMPLATE('0GYnxUfOH4$BNWxhYApWgH',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit door in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1709=IFCSIMPLEPROPERTYTEMPLATE('3mfb1MJb56PAX5AcAJn3ln',$,'SelfClosing','Indication whether this object is designed to close automatically after use (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1710=IFCSIMPLEPROPERTYTEMPLATE('1ixw7mi6n5uhMLTiOtvoHN',$,'SmokeStop','Indication whether the object is designed to provide a smoke stop (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1711=IFCPROPERTYSETTEMPLATE('1mDT_xI_r6q90giq7GRq$Z',$,'Pset_DoorWindowGlazingType','Definition from IAI: Properties common to the definition of the glazing component of occurrences of IfcDoor and IfcWindow, used for thermal and lighting calculations.',$,'IfcDoor,IfcWindow',(#1712,#1713,#1714,#1715,#1716,#1717,#1718,#1719,#1720,#1721,#1722,#1723,#1724,#1725,#1726,#1727));
+#1712=IFCSIMPLEPROPERTYTEMPLATE('0RE4yo8p1BuuNWBLxgE68t',$,'GlassLayers','Number of glass layers within the frame. E.g. "2" for double glazing. ',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1713=IFCSIMPLEPROPERTYTEMPLATE('1GSCQ5kCz2CfOFq8PK2KqW',$,'GlassThickness1','Thickness of the first (inner) glass layer. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1714=IFCSIMPLEPROPERTYTEMPLATE('1UMSpAK0j3NAGy00PWuX5d',$,'GlassThickness2','Thickness of the second (intermediate or outer) glass layer.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1715=IFCSIMPLEPROPERTYTEMPLATE('1vJNObvY160eQsoPu$L1b7',$,'GlassThickness3','Thickness of the third (outer) glass layer. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1716=IFCSIMPLEPROPERTYTEMPLATE('0pZTJv771AMRN_rqwtX03V',$,'FillGas','Name of the gas by which the gap between two glass layers is filled. It is given for information purposes only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1717=IFCSIMPLEPROPERTYTEMPLATE('2zEswAce5ACgRrjot11J$Z',$,'GlassColor','Color (tint) selection for this glazing. It is given for information purposes only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1718=IFCSIMPLEPROPERTYTEMPLATE('1C3t6U6R9248HBvw95o8Iw',$,'IsTempered','Indication whether the glass is tempered (TRUE) or not (FALSE) .',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1719=IFCSIMPLEPROPERTYTEMPLATE('209UKSNAL8ohIRFB3JsGwN',$,'IsLaminated','Indication whether the glass is layered with other materials (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1720=IFCSIMPLEPROPERTYTEMPLATE('1YHHDlptfBKg4$rR9r9k6L',$,'IsCoated','Indication whether the glass is coated with a material (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1721=IFCSIMPLEPROPERTYTEMPLATE('2CB8SPQwzEzgDBD5TDR7fZ',$,'IsWired','Indication whether the glass includes a contained wire mesh to prevent break-in (TRUE) or not (FALSE) ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1722=IFCSIMPLEPROPERTYTEMPLATE('1pe9hfYb14LRbGnJUsGTum',$,'Translucency','Fraction of the visible light that passes the glazing at normal incidence. It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1723=IFCSIMPLEPROPERTYTEMPLATE('1GMWJ0_qb2G9Bb8Q9AzbZL',$,'Reflectivity','Fraction of the visible light that is reflected by the glazing at normal incidence. It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1724=IFCSIMPLEPROPERTYTEMPLATE('1FuYKQVlvE3f2PzvvtQ_ZU',$,'BeamRadiationTransmittance','Direct solar radiation transmittance that passes the glazing at normal incidence. It is a value without unit, often referred to as (Tsol). ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1725=IFCSIMPLEPROPERTYTEMPLATE('0xbNW_s7z51hs7pZqih$G2',$,'SolarHeatGainTransmittance','Total solar heat transmittance that passes the glazing at normal incidence. It is a value without unit, often referred to as (SHGC):.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1726=IFCSIMPLEPROPERTYTEMPLATE('1vpgAhv3L22hnTlVzfoQUo',$,'ThermalTransmittanceSummer','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Summer thermal transmittance coefficient of the glazing only, often referred to as (U-value) ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1727=IFCSIMPLEPROPERTYTEMPLATE('3caBqcksvDCxfHKvHi4fYy',$,'ThermalTransmittanceWinter','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Winter thermal transmittance coefficient of the glazing only, often referred to as (U-value) ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1728=IFCPROPERTYSETTEMPLATE('2xzsN4Q9T0Mxi5wmmLTwgy',$,'Pset_DoorWindowShadingType','Definition from IAI: Properties common to the definition of the shading component of occurrences of IfcDoor and IfcWindow, used for static (simplified) shading calculations.',$,'IfcDoor,IfcWindow',(#1729,#1730,#1731));
+#1729=IFCSIMPLEPROPERTYTEMPLATE('2uU0lH4Bv6s8dbDKZfxoif',$,'ExternalShadingCoefficient','Radiation transmission coefficient of the outside shading device. It is a value without unit.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1730=IFCSIMPLEPROPERTYTEMPLATE('2KX_AvHMb6gR8erT9JL55l',$,'InternalShadingCoefficient','Radiation transmission coefficient of the inside shading device, symbol "b-value". It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1731=IFCSIMPLEPROPERTYTEMPLATE('2kPuCLCTP8DwOZcp7irnpT',$,'InsetShadingCoefficient','Radiation transmission coefficient of the shading device inside the glazing, symbol "b-value". It is a value without unit. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1732=IFCPROPERTYSETTEMPLATE('3$iuAH2FfB3x1ThH$pwuzP',$,'Pset_MemberCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcMember.',$,'IfcMember',(#1733,#1734,#1735,#1736,#1737,#1738));
+#1733=IFCSIMPLEPROPERTYTEMPLATE('2T5tmeOQP41R9olLlnN5CY',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1734=IFCSIMPLEPROPERTYTEMPLATE('3Rt$4Pcbf5yAtjr9QIiJua',$,'Span','Clear span for this object.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1735=IFCSIMPLEPROPERTYTEMPLATE('2k6nj1RJL7$uh65TWmN$TU',$,'Slope','Slope angle - relative to horizontal (0.0 degrees).\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1736=IFCSIMPLEPROPERTYTEMPLATE('204kLJtEvAGQ8FljfUtXl9',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1737=IFCSIMPLEPROPERTYTEMPLATE('1ti_yd2G99eAqTSwWTjeqt',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1738=IFCSIMPLEPROPERTYTEMPLATE('2tp73JE81CBumG0BUUnu$U',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1739=IFCPROPERTYSETTEMPLATE('1eHjVvkKL7Uw2yd3Ezkjt_',$,'Pset_PlateCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcPlate.',$,'IfcPlate',(#1740,#1741,#1742,#1743,#1744,#1745));
+#1740=IFCSIMPLEPROPERTYTEMPLATE('1oMKch5LfA4ACoS73kPtmm',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1741=IFCSIMPLEPROPERTYTEMPLATE('31GJYiPtvBH8W3VyNaunOx',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1742=IFCSIMPLEPROPERTYTEMPLATE('31mxD4u2vDYvk3xXbTsZOl',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1743=IFCSIMPLEPROPERTYTEMPLATE('1fNUbrRe19wfpnjwIiFvpm',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1744=IFCSIMPLEPROPERTYTEMPLATE('0utpFxYKfB7xZMyHCV7N0k',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1745=IFCSIMPLEPROPERTYTEMPLATE('0Ss9sLM2b52fFiw4JomI6k',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1746=IFCPROPERTYSETTEMPLATE('0qUbf75LrCPhZCWNU_2K0P',$,'Pset_RailingCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRailing.',$,'IfcRailing',(#1747,#1748,#1749,#1750));
+#1747=IFCSIMPLEPROPERTYTEMPLATE('0qRjJJ$DbFdvAbZK8DfIf4',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1748=IFCSIMPLEPROPERTYTEMPLATE('2qVVWJ3LT5fw$rts1QE6i5',$,'Height','Height of the object. It is the upper hight of the railing above the floor or stair.\X2\000A\X0\The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1749=IFCSIMPLEPROPERTYTEMPLATE('1_DCudXg5BjveEQ1wsalg3',$,'Diameter','Diameter of the object. It is the diameter of the handrail of the railing.\X2\000A\X0\The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.\X2\000A\X0\Here the diameter of the hand or guardrail within the railing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1750=IFCSIMPLEPROPERTYTEMPLATE('3eT$Y77OP0fAUUU0e5o$rH',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1751=IFCPROPERTYSETTEMPLATE('26b9kBzwL2VRS0E8GCKNZ8',$,'Pset_RampCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRamp.',$,'IfcRamp',(#1752,#1753,#1754,#1755,#1756,#1757,#1758,#1759));
+#1752=IFCSIMPLEPROPERTYTEMPLATE('3ahpVPSiPAJxo6vaYNzsPx',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1753=IFCSIMPLEPROPERTYTEMPLATE('0yoX$saaLC9ekuGVZWQC2k',$,'RequiredHeadroom','Required headroom clearance for the passageway according to the applicable building code or additional requirements.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1754=IFCSIMPLEPROPERTYTEMPLATE('0nMC0gwNH3nPcmiA_Ei$3P',$,'RequiredSlope','Required sloping angle of the object - relative to horizontal (0.0 degrees).\X2\000A\X0\Required maximum slope for the passageway according to the applicable building code or additional requirements ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1755=IFCSIMPLEPROPERTYTEMPLATE('0vsCNb8VX2rx6N5suf4VNZ',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1756=IFCSIMPLEPROPERTYTEMPLATE('3y4eNB9$P3uQBqCFL1r$VW',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1757=IFCSIMPLEPROPERTYTEMPLATE('34VjwsiWH5iQeE8liK2sQA',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit ramp in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1758=IFCSIMPLEPROPERTYTEMPLATE('18DGdHF7HFtPLJw30GtmCt',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\Set to (TRUE) if this ramp is rated as handicap accessible according the local building codes, otherwise (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1759=IFCSIMPLEPROPERTYTEMPLATE('2YmVhvwdP7_BWAVvTNXWYA',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1760=IFCPROPERTYSETTEMPLATE('2a2B_emyL09we0VwF_BYlM',$,'Pset_RampFlightCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRampFlight.',$,'IfcRampFlight',(#1761,#1762,#1763));
+#1761=IFCSIMPLEPROPERTYTEMPLATE('1EnULnQtTDl8bTekZybOP6',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1762=IFCSIMPLEPROPERTYTEMPLATE('3HQggqDj95n80r45xtoqQD',$,'Headroom','Actual headroom clearance for the passageway according to the current design. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1763=IFCSIMPLEPROPERTYTEMPLATE('3zQSUs2$zCyg0dWGhFlav4',$,'Slope','Sloping angle of the object - relative to horizontal (0.0 degrees). \X2\000A\X0\Actual maximum slope for the passageway according to the current design.\X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1764=IFCPROPERTYSETTEMPLATE('3yxWAaYwLCWwHuQnTKZW0x',$,'Pset_RoofCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcRoof. Note: Properties for ProjectedArea and TotalArea added in IFC 2x3',$,'IfcRoof',(#1765,#1766,#1767,#1768,#1769));
+#1765=IFCSIMPLEPROPERTYTEMPLATE('3ln2Y_CcLEaO27UUMT05V5',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1766=IFCSIMPLEPROPERTYTEMPLATE('0Eiq1PwVv6OQWa81TQN2CG',$,'FireRating','Fire rating for this object. It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1767=IFCSIMPLEPROPERTYTEMPLATE('1sAhVK0QrCrQguj4xeh10U',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1768=IFCSIMPLEPROPERTYTEMPLATE('1fh_EwCZrF8hGog8h6v2Hl',$,'ProjectedArea','Area of the roof projected onto a 2D horizontal plane',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1769=IFCSIMPLEPROPERTYTEMPLATE('3gJkLk3_z3Kv88hu5ZC3OD',$,'TotalArea','Total exposed area of the roof',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#1770=IFCPROPERTYSETTEMPLATE('2ru99VyNvEdx4pNnmYKucK',$,'Pset_SlabCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcSlab. Note: Properties for PitchAngle added in IFC 2x3',$,'IfcSlab',(#1771,#1772,#1773,#1774,#1775,#1776,#1777,#1778,#1779,#1780));
+#1771=IFCSIMPLEPROPERTYTEMPLATE('1HYC6s5bj0ghCkhP734vx8',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1772=IFCSIMPLEPROPERTYTEMPLATE('1FHcQk7f51QPtC0cyVtvEA',$,'AcousticRating','Acoustic rating for this object. It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1773=IFCSIMPLEPROPERTYTEMPLATE('1y2G2zT2f92gvzAhPbn$NB',$,'FireRating',' Fire rating for this object. It is given according to the national fire safety classification. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1774=IFCSIMPLEPROPERTYTEMPLATE('3OISSgW$96XxHUiuA81I52',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1775=IFCSIMPLEPROPERTYTEMPLATE('2jskNhq_T16eHj5YNC90IM',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface, It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1776=IFCSIMPLEPROPERTYTEMPLATE('2jZecpYJ1DDBVeHRo_6jhW',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material. Here the total thermal transmittance coefficient through the slab (including all materials). ',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1777=IFCSIMPLEPROPERTYTEMPLATE('07NUNAEir6xgpw3tje8i5z',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1778=IFCSIMPLEPROPERTYTEMPLATE('1AF0Y0yhvC59z$$21HeAO9',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1779=IFCSIMPLEPROPERTYTEMPLATE('1CeI4$8_LFfAva$U58PGwi',$,'Compartmentation','Indication whether the object is designed to serve as a fire compartmentation (TRUE) or not (FALSE). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1780=IFCSIMPLEPROPERTYTEMPLATE('25xOAttsT5_8$aDVGtFkoP',$,'PitchAngle','Angle of the slab to the horizontal when used as a component for the roof (specified as 0 degrees or not asserted for cases where the slab is not used as a roof component).',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#1781=IFCPROPERTYSETTEMPLATE('00P7WKNffDqf9rAFmHGJBe',$,'Pset_StairCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcStair.',$,'IfcStair',(#1782,#1783,#1784,#1785,#1786,#1787,#1788,#1789,#1790,#1791,#1792));
+#1782=IFCSIMPLEPROPERTYTEMPLATE('2rscjPVffDJgrsLOH5cQRg',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1783=IFCSIMPLEPROPERTYTEMPLATE('02jnGVhH9EbuFO6gBHngWP',$,'NumberOfRiser','Total number of the risers included in the stair',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1784=IFCSIMPLEPROPERTYTEMPLATE('2J7NX9twn8cxV6oreZ47gJ',$,'NumberOfTreads','Total number of treads included in the stair',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1785=IFCSIMPLEPROPERTYTEMPLATE('1OYycwChHAxeL5SOOTuIon',$,'RiserHeight','Vertical distance from tread to tread. \X2\000A\X0\The riser height is supposed to be equal for all steps of a stair or stair flight.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1786=IFCSIMPLEPROPERTYTEMPLATE('1SbtCWUEb4wxcokYgjeonp',$,'TreadLength','Horizontal distance from the front of the thread to the front of the next tread. \X2\000A\X0\The tread length is supposed to be equal for all steps of the stair or stair flight at the walking line.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1787=IFCSIMPLEPROPERTYTEMPLATE('39gmzQwaD0Fh6HCq39ORdQ',$,'RequiredHeadroom','Required headroom clearance for the passageway according to the applicable building code or additional requirements',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1788=IFCSIMPLEPROPERTYTEMPLATE('3AT1al8fD7rQ_4PNdPTYVh',$,'HandicapAccessible','Indication that this object is designed to be accessible by the handicapped. \X2\000A\X0\Set to (TRUE) if this stair is rated as handicap accessible according the local building codes, otherwise (FALSE). Accessibility maybe provided by additional means.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1789=IFCSIMPLEPROPERTYTEMPLATE('2BSBoaQJn9pRaZV9tMBVgc',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1790=IFCSIMPLEPROPERTYTEMPLATE('3r59Zwet1BLgkk4dW3m24f',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1791=IFCSIMPLEPROPERTYTEMPLATE('1j4m2PbmD0lAX5xdxdsWal',$,'FireExit','Indication whether this object is designed to serve as an exit in the case of fire (TRUE) or not (FALSE).\X2\000A\X0\Here it defines an exit stair in accordance to the national building code.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1792=IFCSIMPLEPROPERTYTEMPLATE('0nzj7uY4f4EfT_ItH_JXcw',$,'HasNonSkidSurface','Indication whether the surface finish is designed to prevent slippery (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1793=IFCPROPERTYSETTEMPLATE('1Oc4WJ999DuAVDReSlQeWK',$,'Pset_StairFlightCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcStairFlight.',$,'IfcStairFlight',(#1794,#1795,#1796,#1797,#1798,#1799,#1800,#1801,#1802,#1803,#1804));
+#1794=IFCSIMPLEPROPERTYTEMPLATE('1dxRNpyiD8wwl$Ueu03fqu',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1795=IFCSIMPLEPROPERTYTEMPLATE('1p9g_xXWL2XAYFZ73AvRJS',$,'NumberOfRiser','Total number of the risers included in the stair flight',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1796=IFCSIMPLEPROPERTYTEMPLATE('3AlPzsZ6rAUvZuKAUK8jxL',$,'NumberOfTreads','Total number of treads included in the stair flight',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#1797=IFCSIMPLEPROPERTYTEMPLATE('2CvwcgBZf8DwybDC76_LZo',$,'RiserHeight','Vertical distance from tread to tread. \X2\000A\X0\The riser height is supposed to be equal for all steps of a stair or stair flight.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1798=IFCSIMPLEPROPERTYTEMPLATE('3WlGOjH$L6SONjfp4XbqnD',$,'TreadLength','Horizontal distance from the front of the thread to the front of the next tread. \X2\000A\X0\The tread length is supposed to be equal for all steps of the stair or stair flight at the walking line.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1799=IFCSIMPLEPROPERTYTEMPLATE('2vHlC63EX1nxSQ6X0XHrOJ',$,'NosingLength','Horizontal distance from the front of the tread to the riser underneath. It is the overhang of the tread.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1800=IFCSIMPLEPROPERTYTEMPLATE('0sFGQsL3n5vAoA73CkCQcP',$,'WalkingLineOffset','Offset of the walking line from the inner side of the flight. \X2\000A\X0\Note: the walking line may have a own shape representation (in case of inconsistencies, the value derived from the shape representation shall take precedence).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1801=IFCSIMPLEPROPERTYTEMPLATE('2CS44zVUX77wK8wnm3UEKV',$,'TreadLengthAtOffset','Length of treads at a given offset.\X2\000A\X0\Walking line position is given by the ''WalkingLineOffset''. The resulting value should normally be identical with TreadLength, it may be given in addition, if the walking line offset for building code calculations is different from that used in design.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1802=IFCSIMPLEPROPERTYTEMPLATE('0xR6662CP9zgZtLfvWxMHb',$,'TreadLengthAtInnerSide','Minimum length of treads at the inner side of the winder. \X2\000A\X0\Only relevant in case of winding flights, for straight flights it is identical with IfcStairFlight.TreadLength. It is a pre-calculated value, in case of inconsistencies, the value derived from the shape representation shall take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1803=IFCSIMPLEPROPERTYTEMPLATE('1xoO_7u9PDp8VMXjbeLrUZ',$,'Headroom','Actual headroom clearance for the passageway according to the current design. \X2\000A\X0\The shape information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the shape properties, provided in the attached property, the geometric parameters take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1804=IFCSIMPLEPROPERTYTEMPLATE('0VdvC$4mr6oeaBCx1ouwJ5',$,'WaistThickness','Minimum thickness of the stair flight, measured perpendicular to the slope of the flight to the inner corner of riser and tread. It is a pre-calculated value, in case of inconsistencies, the value derived from the shape representation shall take precedence. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1805=IFCPROPERTYSETTEMPLATE('3_yggJYDn98g9N0SAQY_SE',$,'Pset_WallCommon','Definition from IAI: Properties common to the definition of all occurrences of IfcWall and IfcWallStandardCase.',$,'IfcWall,IfcWallStandardCase',(#1806,#1807,#1808,#1809,#1810,#1811,#1812,#1813,#1814,#1815));
+#1806=IFCSIMPLEPROPERTYTEMPLATE('12YDWZ8Kn1gfAl4vdvpLQT',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1807=IFCSIMPLEPROPERTYTEMPLATE('0ZIebxfD1DtByuxg6C3LLK',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1808=IFCSIMPLEPROPERTYTEMPLATE('36Ns1dCo52m9eDo_i8DLHT',$,'FireRating','Fire rating given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1809=IFCSIMPLEPROPERTYTEMPLATE('2v5jIIE8v1efUm6dCaiomZ',$,'Combustible','Indication whether the object is made from combustible material (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1810=IFCSIMPLEPROPERTYTEMPLATE('3_S086$Tj1TfgtaYWLb_lC',$,'SurfaceSpreadOfFlame','Indication on how the flames spread around the surface,\X2\000A\X0\It is given according to the national building code that governs the fire behaviour for materials.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1811=IFCSIMPLEPROPERTYTEMPLATE('164W1mO3DDMw04gzSxdo9n',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\Here the total thermal transmittance coefficient through the wall (including all materials).',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1812=IFCSIMPLEPROPERTYTEMPLATE('2rXESaOvD4GBJQtAVt517A',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1813=IFCSIMPLEPROPERTYTEMPLATE('22Q2OzqFXDJxSaMMSWiJ$4',$,'ExtendToStructure','Indicates whether the object extend to the structure above (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1814=IFCSIMPLEPROPERTYTEMPLATE('2v7fqKPPP1iRl1LkqjX_78',$,'LoadBearing','Indicates whether the object is intended to carry loads (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1815=IFCSIMPLEPROPERTYTEMPLATE('1JiAoga1P5YRa2MzjKNRpY',$,'Compartmentation','Indication whether the object is designed to serve as a fire compartmentation (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1816=IFCPROPERTYSETTEMPLATE('1X9b17O0j688lsy9WaP31Z',$,'Pset_WindowCommon','Definition from IAI: Properties common to the definition of all occurrences of Window.',$,'IfcWindow',(#1817,#1818,#1819,#1820,#1821,#1822,#1823,#1824,#1825));
+#1817=IFCSIMPLEPROPERTYTEMPLATE('3opoCWoMnBAQV4zeWvAgw4',$,'Reference','Reference ID for this specified type in this project (e.g. type ''A-1'')',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1818=IFCSIMPLEPROPERTYTEMPLATE('05zllBl953SuCMcSUXoZ_i',$,'FireRating','Fire rating for this object.\X2\000A\X0\It is given according to the national fire safety classification.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1819=IFCSIMPLEPROPERTYTEMPLATE('3CfUlCjv5AO8XaCZI3aeCt',$,'AcousticRating','Acoustic rating for this object.\X2\000A\X0\It is giving according to the national building code. It indicates the sound transmission resistance of this object by an index ration (instead of providing full sound absorbtion values).',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1820=IFCSIMPLEPROPERTYTEMPLATE('1qfKvX$Rj07w8CU5rO9cNo',$,'SecurityRating','Index based rating system indicating security level.\X2\000A\X0\It is giving according to the national building code.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1821=IFCSIMPLEPROPERTYTEMPLATE('33nJ$o5Q18Z8Q1$EOVQVF5',$,'IsExternal','Indication whether the element is designed for use in the exterior (TRUE) or not (FALSE). If (TRUE) it is an external element and faces the outside of the building.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1822=IFCSIMPLEPROPERTYTEMPLATE('26dFPvvi9EIPe4ubNbGi4W',$,'Infiltration','Infiltration flowrate of outside air for the filler object based on the area of the filler object at a pressure level of 50 Pascals. It shall be used, if the length of all joints is unknown. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1823=IFCSIMPLEPROPERTYTEMPLATE('1KWx8nwoP0WeuQM61$5ONh',$,'ThermalTransmittance','Thermal transmittance coefficient (U-Value) of a material.\X2\000A\X0\It applies to the total door construction.',.P_SINGLEVALUE.,'IfcThermalTransmittanceMeasure',$,$,$,$,$,.READWRITE.);
+#1824=IFCSIMPLEPROPERTYTEMPLATE('0hpZTTKcTFmgoAzv7ubEpC',$,'GlazingAreaFraction','Fraction of the glazing area relative to the total area of the filling element. \X2\000A\X0\It shall be used, if the glazing area is not given separately for all panels within the filling element. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1825=IFCSIMPLEPROPERTYTEMPLATE('0z1mvcHDf8oAT_Ite1dmWv',$,'SmokeStop','Indication whether the object is designed to provide a smoke stop (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1826=IFCPROPERTYSETTEMPLATE('3GBtheDSD1Rfo7WpBsojlT',$,'Pset_AirSideSystemInformation','Definition from IAI: Attributes that apply to an air side HVAC system. HISTORY: New property set in IFC Release 1.0.',$,'IfcSpatialStructureElement,IfcSystem',(#1827,#1828,#1829,#1831,#1833,#1834,#1835,#1836,#1837,#1838,#1839,#1840,#1841,#1842,#1843,#1844,#1845,#1846));
+#1827=IFCSIMPLEPROPERTYTEMPLATE('1nuMC2Jaj8YR1SBiJJRhpH',$,'Name','The name of the air side system ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1828=IFCSIMPLEPROPERTYTEMPLATE('0Sk2PLQ7LBNuNwwQ6eKjfP',$,'Description','The description of the air side system.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1829=IFCSIMPLEPROPERTYTEMPLATE('1GeEXnYCjEDegrkY$h4ziW',$,'AirSideSystemType','This enumeration specifies the basic types of possible air side systems (e.g., Constant Volume, Variable Volume, etc.) ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1830,$,$,$,.READWRITE.);
+#1830=IFCPROPERTYENUMERATION('PEnum_AirSideSystemType',(IFCLABEL('CONSTANTVOLUME'),IFCLABEL('CONSTANTVOLUMESINGLEZONE'),IFCLABEL('CONSTANTVOLUMEMULTIPLEZONEREHEAT'),IFCLABEL('CONSTANTVOLUMEBYPASS'),IFCLABEL('VARIABLEAIRVOLUME'),IFCLABEL('VARIABLEAIRVOLUMEREHEAT'),IFCLABEL('VARIABLEAIRVOLUMEINDUCTION'),IFCLABEL('VARIABLEAIRVOLUMEFANPOWERED'),IFCLABEL('VARIABLEAIRVOLUMEDUALCONDUIT'),IFCLABEL('VARIABLEAIRVOLUMEVARIABLEDIFFUSERS'),IFCLABEL('VARIABLEAIRVOLUMEVARIABLETEMPERATURE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET\X2\000A\X0\')),$);
+#1831=IFCSIMPLEPROPERTYTEMPLATE('274ojGeW18gvFwNMLZ3xEi',$,'AirSideSystemDistributionType','This enumeration defines the basic types of air side systems (e.g., SingleDuct, DualDuct, Multizone, etc.) ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1832,$,$,$,.READWRITE.);
+#1832=IFCPROPERTYENUMERATION('PEnum_AirSideSystemDistributionType',(IFCLABEL('SINGLEDUCT'),IFCLABEL('DUALDUCT'),IFCLABEL('MULTIZONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1833=IFCSIMPLEPROPERTYTEMPLATE('3EenxJ8CP919jlhrDZ_Nd2',$,'TotalAirflow','The total design supply air flowrate required for the system for either heating or cooling conditions, whichever is greater. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1834=IFCSIMPLEPROPERTYTEMPLATE('2vNsxUkYr10OyJNfnq7ZAw',$,'EnergyGainTotal','The total amount of energy gains for the spaces served by the system during the peak cooling conditions, plus any system-level total energy gains. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1835=IFCSIMPLEPROPERTYTEMPLATE('2FVPlS7w55m9yeev4QA9FL',$,'AirflowSensible','The air flowrate required to satisfy the sensible peak loads. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1836=IFCSIMPLEPROPERTYTEMPLATE('3bRQF7ikT67wXGhK2hyGLa',$,'EnergyGainSensible','The sum of total energy gains for the spaces served by the system during the peak cooling conditions, plus any system-level sensible energy gains. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1837=IFCSIMPLEPROPERTYTEMPLATE('1NSeyOmmDDygouDmGb4r$i',$,'EnergyLoss','The sum of energy losses for the spaces served by the system during the peak heating conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1838=IFCSIMPLEPROPERTYTEMPLATE('0OsK2c9lzB9wITRxMdKUM2',$,'LightingDiversity','Lighting diversity. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1839=IFCSIMPLEPROPERTYTEMPLATE('1WQaYyL3v8K90$aPCUEEI1',$,'InfiltrationDiversitySummer','Diversity factor for Summer infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1840=IFCSIMPLEPROPERTYTEMPLATE('1Rz9DdMEP8agd3qAF64vSg',$,'InfiltrationDiversityWinter','Diversity factor for Winter infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1841=IFCSIMPLEPROPERTYTEMPLATE('0dPprPnKP8DBxoeqWbpuHi',$,'ApplianceDiversity','Diversity of appliance load. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1842=IFCSIMPLEPROPERTYTEMPLATE('0cwvNk55P0SAbV7Pmmfj65',$,'LoadSafetyFactor','Load safety factor. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1843=IFCSIMPLEPROPERTYTEMPLATE('3XoYqePurALABeUzesdSOB',$,'HeatingTemperatureDelta','Heating temperature difference for calculating space air flow rates ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1844=IFCSIMPLEPROPERTYTEMPLATE('0eSgwnoNj2YBT5ip1Z9CKD',$,'CoolingTemperatureDelta','Cooling temperature difference for calculating space air flow rates ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1845=IFCSIMPLEPROPERTYTEMPLATE('3tdRCD3uj1H9is11jXWMxW',$,'Ventilation','Required outside air ventilation. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#1846=IFCSIMPLEPROPERTYTEMPLATE('3XtTUITpHA0BmjSGo$25OS',$,'FanPower','Fan motor loads contributing to the cooling load. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#1847=IFCPROPERTYSETTEMPLATE('3AeO3Ck9T1lBDpQB7z7Net',$,'Pset_DistributionChamberElementTypeFormedDuct','Definition from BS6100 100 3410: Space formed in the ground for the passage of pipes, cables, ducts.',$,'IfcDistributionChamberElementType',(#1848,#1849,#1850,#1851,#1852,#1853,#1854,#1855,#1856));
+#1848=IFCSIMPLEPROPERTYTEMPLATE('1jkaiAKIb5kB589z9knXfl',$,'ClearWidth','The width of the formed space in the duct.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1849=IFCSIMPLEPROPERTYTEMPLATE('2zWh3t9k53a8S$7bfEE5TW',$,'ClearDepth','The depth of the formed space in the duct.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1850=IFCSIMPLEPROPERTYTEMPLATE('2ZKvi$9cfB5RTzOqwUNrq8',$,'WallMaterial','The material from which the wall of the duct is constructed.\X2\000A\X0\NOTE: It is assumed that duct walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1851=IFCSIMPLEPROPERTYTEMPLATE('06ncoGEOX4EuMwsrMnAi7y',$,'WallThickness','The thickness of the duct wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1852=IFCSIMPLEPROPERTYTEMPLATE('0b$E9eqYj1Rvwki_m4Dmqo',$,'BaseMaterial','The material from which the base of the duct is constructed.\X2\000A\X0\NOTE: It is assumed that duct base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1853=IFCSIMPLEPROPERTYTEMPLATE('2TVtESYFX9p8q$rGdAYYG8',$,'BaseThickness','The thickness of the duct base construction\X2\000A\X0\NOTE: It is assumed that duct base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1854=IFCSIMPLEPROPERTYTEMPLATE('3spFJP3CnD_wxr4dmdOAMC',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1855=IFCSIMPLEPROPERTYTEMPLATE('0ThM4oXLX9Wv8evERUIk58',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1856=IFCSIMPLEPROPERTYTEMPLATE('0buxYBytf1tAp7XukNZV2u',$,'FillMaterial','The material that is used to fill the duct (where used).',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1857=IFCPROPERTYSETTEMPLATE('1i8Cby2Xv0AueP_i5WNEWc',$,'Pset_DistributionChamberElementTypeInspectionChamber','Definition from IAI: Chamber constructed on a drain, sewer or pipeline and with a removable cover, that permits visible inspection.',$,'IfcDistributionChamberElementType',(#1858,#1859,#1860,#1861,#1862,#1863,#1864,#1865,#1866,#1867,#1868,#1869,#1870));
+#1858=IFCSIMPLEPROPERTYTEMPLATE('2r0qe3Iz1BxuJU3y5CAdw1',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1859=IFCSIMPLEPROPERTYTEMPLATE('049X0qfQjAdOvQfyWqS1tB',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1860=IFCSIMPLEPROPERTYTEMPLATE('2o77o5aUr2rhsJeojwka5p',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1861=IFCSIMPLEPROPERTYTEMPLATE('0MgNxGfujCFf38ZckQqIMv',$,'SoffitLevel','Level of the highest internal part of the cross section. (BS6100 250 8002)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1862=IFCSIMPLEPROPERTYTEMPLATE('24SueTz1z5ZeaXs85$QAXN',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1863=IFCSIMPLEPROPERTYTEMPLATE('2eViVNOeX849AUXnOq8LLJ',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1864=IFCSIMPLEPROPERTYTEMPLATE('2k3ikdcrDEueVJ9DycFea$',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1865=IFCSIMPLEPROPERTYTEMPLATE('3vPCttaezFrO9Cz_0hV39g',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1866=IFCSIMPLEPROPERTYTEMPLATE('0FAb7tDk194Qwt9kWfmxtb',$,'WithBackdrop','Indicates whether the chamber has a backdrop or tumbling bay (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1867=IFCSIMPLEPROPERTYTEMPLATE('0F8fBYBAr738fFh96pjBg0',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1868=IFCSIMPLEPROPERTYTEMPLATE('1HC1mMPp92_AUrXMSxZFGl',$,'AccessLengthOrRadius','The length of the chamber access cover or, where the plan shape of the cover is circular, the radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1869=IFCSIMPLEPROPERTYTEMPLATE('1CZfITLvPECPa2NgBCTZes',$,'AccessWidth','The width of the chamber access cover where the plan shape of the cover is not circular.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1870=IFCSIMPLEPROPERTYTEMPLATE('15oRePe5vBk9Ffd4RSopQr',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1871=IFCPROPERTYSETTEMPLATE('03IX0wMdDEFArkSOfZv6_q',$,'Pset_DistributionChamberElementTypeInspectionPit','Definition from IAI: Recess or chamber formed to permit access for inspection of substructure and services (definition modified from BS6100 221 4128).',$,'IfcDistributionChamberElementType',(#1872,#1873,#1874));
+#1872=IFCSIMPLEPROPERTYTEMPLATE('0dyrpX_M93wvR56UL_4Xb4',$,'Length','The length of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1873=IFCSIMPLEPROPERTYTEMPLATE('36w3Ly_u5FixoXWVVjQLHw',$,'Width','The width of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1874=IFCSIMPLEPROPERTYTEMPLATE('36XaXMy9T87xaIEcShxxaG',$,'Depth','The depth of the pit.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1875=IFCPROPERTYSETTEMPLATE('2NWHEZcfb808PkBwvDMkZd',$,'Pset_DistributionChamberElementTypeManhole','Definition from IAI: Chamber constructed on a drain, sewer or pipeline and with a removable cover, that permits the entry of a person.',$,'IfcDistributionChamberElementType',(#1876,#1877,#1878,#1879,#1880,#1881,#1882,#1883,#1884,#1885,#1886,#1887,#1888));
+#1876=IFCSIMPLEPROPERTYTEMPLATE('3_cmseT8zClv$AY$70xqDx',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1877=IFCSIMPLEPROPERTYTEMPLATE('2yG$FBEdH3igYSlB3RgkhK',$,'SoffitLevel','Level of the highest internal part of the cross section. (BS6100 250 8002)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1878=IFCSIMPLEPROPERTYTEMPLATE('3DOk_aQfrB0gLqZprDvgb5',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1879=IFCSIMPLEPROPERTYTEMPLATE('1HE9VZq455fgrMlHQ91y7a',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1880=IFCSIMPLEPROPERTYTEMPLATE('0__BekHeTE1hZfgcPNW6RP',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1881=IFCSIMPLEPROPERTYTEMPLATE('1wLmsZPErCNheGEfHQUi5C',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1882=IFCSIMPLEPROPERTYTEMPLATE('2ymfeSZov9lxLr8LpQyI5L',$,'IsShallow','Indicates whether the chamber has been designed as being shallow (TRUE) or deep (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1883=IFCSIMPLEPROPERTYTEMPLATE('04sYLdHDP9XxoCuGZinx4r',$,'HasSteps','Indicates whether the chamber has steps (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1884=IFCSIMPLEPROPERTYTEMPLATE('0ZF2R5fkX8Pv$gTVlkqVLS',$,'WithBackdrop','Indicates whether the chamber has a backdrop or tumbling bay (TRUE) or not (FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1885=IFCSIMPLEPROPERTYTEMPLATE('3XT4CUx4fFugvvlSW2sTdx',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1886=IFCSIMPLEPROPERTYTEMPLATE('1XefYUkzb2MQUggDRxG_MW',$,'AccessLengthOrRadius','The length of the chamber access cover or, where the plan shape of the cover is circular, the radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1887=IFCSIMPLEPROPERTYTEMPLATE('0KU6eQ2ZvAP8eK$NaeRPIU',$,'AccessWidth','The width of the chamber access cover where the plan shape of the cover is not circular.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1888=IFCSIMPLEPROPERTYTEMPLATE('3o_aLUNNvCIegfWzJjM3NV',$,'AccessCoverLoadRating','The load rating of the access cover (which may be a value or an alphanumerically defined class rating)',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#1889=IFCPROPERTYSETTEMPLATE('2R13G0sd59SBvg6lSUxLuw',$,'Pset_DistributionChamberElementTypeMeterChamber','Definition from IAI: Chamber that houses a meter(s) (definition modified from BS6100 250 6224).',$,'IfcDistributionChamberElementType',(#1890,#1891,#1892,#1893,#1894,#1895,#1896));
+#1890=IFCSIMPLEPROPERTYTEMPLATE('2XNlRRXrjDlxmkjI6yZ6IV',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1891=IFCSIMPLEPROPERTYTEMPLATE('2ov5v9lUX4qhcUJIsKUZct',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1892=IFCSIMPLEPROPERTYTEMPLATE('2EtJEr_lb7h97ielcHZGx4',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1893=IFCSIMPLEPROPERTYTEMPLATE('0QbbNsiZfAsu9s4Nm$2YxM',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1894=IFCSIMPLEPROPERTYTEMPLATE('1lbBKPWPX4GvI8fyeybNpU',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1895=IFCSIMPLEPROPERTYTEMPLATE('0yRrEZmk50LhPlShSzYaMV',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1896=IFCSIMPLEPROPERTYTEMPLATE('05v4GqMVr1vQZX0yO0k5tt',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1897=IFCPROPERTYSETTEMPLATE('1t8BGgSiv8duf5UlB8$Irw',$,'Pset_DistributionChamberElementTypeSump','Definition from BS6100 100 3431: Recess or small chamber into which liquid is drained to facilitate its removal.',$,'IfcDistributionChamberElementType',(#1898,#1899,#1900));
+#1898=IFCSIMPLEPROPERTYTEMPLATE('2VUpQGkObD69cjtlc6XQE8',$,'Length','The length of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1899=IFCSIMPLEPROPERTYTEMPLATE('01pH$vBIf7LOE$sPKiNtuj',$,'Width','The width of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1900=IFCSIMPLEPROPERTYTEMPLATE('3m81WaehnBE98nAf0NQbcw',$,'InvertLevel','The lowest point in the cross section of the sump.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1901=IFCPROPERTYSETTEMPLATE('2gET7G8MzDzRiT7$BlN97s',$,'Pset_DistributionChamberElementTypeTrench','Definition from BS6100 221 4118: Excavation, the length of which greatly exceeds the width.',$,'IfcDistributionChamberElementType',(#1902,#1903,#1904));
+#1902=IFCSIMPLEPROPERTYTEMPLATE('3Nsc_ZmoTF7Ryn6d41Va3v',$,'Width','The width of the trench.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1903=IFCSIMPLEPROPERTYTEMPLATE('0gHnhBo6568OxLynpdfvD9',$,'Depth','The depth of the trench.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1904=IFCSIMPLEPROPERTYTEMPLATE('1EIp5tbtPEnO0TuSPKc1K5',$,'InvertLevel','Level of the lowest part of the cross section. (BS6100 250 8001)',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1905=IFCPROPERTYSETTEMPLATE('0xzX72YZzCkvsieAfE8$AC',$,'Pset_DistributionChamberElementTypeValveChamber','Definition from BS6100 250 6224: Chamber that houses a valve(s).',$,'IfcDistributionChamberElementType',(#1906,#1907,#1908,#1909,#1910,#1911,#1912));
+#1906=IFCSIMPLEPROPERTYTEMPLATE('2DmVvKpC9ArO5LlaVo6bHk',$,'ChamberLengthOrRadius','Length or, in the event of the shape being circular in plan, the radius of the chamber.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1907=IFCSIMPLEPROPERTYTEMPLATE('36bKSOhj9Bvh2PKpboDeqz',$,'ChamberWidth','Width, in the event of the shape being non circular in plan.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1908=IFCSIMPLEPROPERTYTEMPLATE('0d42dU6UXEu8iE7uTOr9pz',$,'WallMaterial','The material from which the wall of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1909=IFCSIMPLEPROPERTYTEMPLATE('1eHK9bOAv9zAaVoiSIz1yD',$,'WallThickness','The thickness of the chamber wall construction\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1910=IFCSIMPLEPROPERTYTEMPLATE('1s_sAM0CPC6QIiofXZTQIN',$,'BaseMaterial','The material from which the base of the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1911=IFCSIMPLEPROPERTYTEMPLATE('33vTMB1Dz43u2JX2PIY5y2',$,'BaseThickness','The thickness of the chamber base construction\X2\000A\X0\NOTE: It is assumed that chamber base will be constructed at a single thickness.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1912=IFCSIMPLEPROPERTYTEMPLATE('146l850MPBkA07mWcqc099',$,'AccessCoverMaterial','The material from which the access cover to the chamber is constructed.\X2\000A\X0\NOTE: It is assumed that chamber walls will be constructed of a single material.',.P_REFERENCEVALUE.,'IfcMaterial',$,$,$,$,$,.READWRITE.);
+#1913=IFCPROPERTYSETTEMPLATE('3_U0quLdLBowcWw9H4wEY_',$,'Pset_DistributionFlowElementCommon','Definition from IAI: Common properties of all occurrences of IfcDistributionFlowElement and their subtypes.\X2\000A\X0\',$,'IfcDistributionFlowElement,IfcDistributionChamberElement,IfcEnergyConversionDevice,IfcFlowController,IfcFlowFitting,IfcFlowMovingDevice,IfcFlowSegment,IfcFlowStorageDevice,IfcFlowTerminal,IfcFlowTreatmentDevice',(#1914));
+#1914=IFCSIMPLEPROPERTYTEMPLATE('3mEbPyrp90YhE0gJsb1511',$,'Reference','Reference ID for this specific instance (e.g. ''WWS/VS1/400/001'', which indicates the occurrence belongs to system WWS, subsystems VSI/400, and has the component number 001) ',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#1915=IFCPROPERTYSETTEMPLATE('3JrDjzZ1bFSgF2F6uxfrbh',$,'Pset_DistributionPortDuct','Definition from IAI: Duct port occurrence attributes attached to an instance of IfcDistributionPort.\X2\000A\X0\',$,'IfcDistributionPort',(#1916,#1917));
+#1916=IFCSIMPLEPROPERTYTEMPLATE('0ylNAUSUzE$uxc7X8uuh53',$,'PortNumber','The index of the port as it relates to the related object. Each index must be unique for any given related object.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1917=IFCSIMPLEPROPERTYTEMPLATE('0s0LBH70zEggWTIS2W6GJt',$,'ConnectionType','The end-style treatment of the duct port:\X2\000A\X0\BEADEDSLEEVE: Beaded Sleeve. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\CRIMP: Crimp. \X2\000A\X0\DRAWBAND: Drawband. \X2\000A\X0\DRIVESLIP: Drive slip. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SLIPON: Slipon. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SSLIP: S-Slip. \X2\000A\X0\STANDINGSEAM: Standing seam. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\OTHER: Another type of end-style has been applied.\X2\000A\X0\NONE: No end-style has been applied.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1918,$,$,$,.READWRITE.);
+#1918=IFCPROPERTYENUMERATION('PEnum_DuctConnectionType',(IFCLABEL('BEADEDSLEEVE'),IFCLABEL('COMPRESSION'),IFCLABEL('CRIMP'),IFCLABEL('DRAWBAND'),IFCLABEL('DRIVESLIP'),IFCLABEL('FLANGED'),IFCLABEL('OUTSIDESLEEVE'),IFCLABEL('SLIPON'),IFCLABEL('SOLDERED'),IFCLABEL('SSLIP'),IFCLABEL('STANDINGSEAM'),IFCLABEL('SWEDGE'),IFCLABEL('WELDED'),IFCLABEL('OTHER'),IFCLABEL('NONE'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#1919=IFCPROPERTYSETTEMPLATE('1AsvA8bK1208WgdoSxNxxK',$,'Pset_DistributionPortPipe','Definition from IAI: Pipe port occurrence attributes attached to an instance of IfcDistributionPort.\X2\000A\X0\',$,'IfcDistributionPort',(#1920,#1921));
+#1920=IFCSIMPLEPROPERTYTEMPLATE('1SjF$zFvzCBO4lfQ_S6VRM',$,'PortNumber','The index of the port as it relates to the related object. Each index must be unique for any given related object.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1921=IFCSIMPLEPROPERTYTEMPLATE('3eBBKpHu5FcB1tDHN1KU_m',$,'ConnectionType','The end-style treatment of the pipe port:\X2\000A\X0\BRAZED: Brazed. \X2\000A\X0\COMPRESSION: Compression. \X2\000A\X0\FLANGED: Flanged. \X2\000A\X0\GROOVED: Grooved. \X2\000A\X0\OUTSIDESLEEVE: Outside Sleeve. \X2\000A\X0\SOLDERED: Soldered. \X2\000A\X0\SWEDGE: Swedge. \X2\000A\X0\THREADED: Threaded. \X2\000A\X0\WELDED: Welded. \X2\000A\X0\OTHER: Another type of end-style has been applied.\X2\000A\X0\NONE: No end-style has been applied.\X2\000A\X0\USERDEFINED: User-defined port connection type. \X2\000A\X0\NOTDEFINED: Undefined port connection type. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1922,$,$,$,.READWRITE.);
+#1922=IFCPROPERTYENUMERATION('PEnum_PipeEndStyleTreatment',(IFCLABEL('BRAZED'),IFCLABEL('COMPRESSION'),IFCLABEL('FLANGED'),IFCLABEL('GROOVED'),IFCLABEL('OUTSIDESLEEVE'),IFCLABEL('SOLDERED'),IFCLABEL('SWEDGE'),IFCLABEL('THREADED'),IFCLABEL('WELDED'),IFCLABEL('OTHER'),IFCLABEL('NONE'),IFCLABEL('UNSET')),$);
+#1923=IFCPROPERTYSETTEMPLATE('2e1lh3pqnFPxaF1td16rwt',$,'Pset_EnergyConversionDeviceCoil','Definition from IAI: Coil occurrence attributes attached to an instance of IfcEnergyConversionDevice.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#1924));
+#1924=IFCSIMPLEPROPERTYTEMPLATE('3rOH$PhGrDJR841oJF9cwZ',$,'HasSoundAttentuation','TRUE if the coil has sound attenuation, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1925=IFCPROPERTYSETTEMPLATE('2YKKSBUyD5GQSstH7bJufz',$,'Pset_EnergyConversionDeviceSpaceHeaterPanel','Definition from IAI: Panel space heater type occurrence attributes.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#1926));
+#1926=IFCSIMPLEPROPERTYTEMPLATE('0IDhhSWyTBQQvtp_txCCKM',$,'NumberOfPanels','Number of panels.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1927=IFCPROPERTYSETTEMPLATE('0zhqaGe4D7vfpvolM4z9Im',$,'Pset_EnergyConversionDeviceSpaceHeaterSectional','Definition from IAI: Sectional space heater type occurrence attributes.\X2\000A\X0\',$,'IfcEnergyConversionDevice',(#1928));
+#1928=IFCSIMPLEPROPERTYTEMPLATE('2pxVAs3hn7Z9f0rqCqv0Nq',$,'NumberOfSections','Number of vertical sections, measured in the direction of flow.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#1929=IFCPROPERTYSETTEMPLATE('3mmw54EoHExuJ1ZVgIq$cE',$,'Pset_FireRatingProperties','Definition from IAI: Properties related to the combustion of materials for purposes of assessing fire hazard.',$,'IfcSpatialStructureElement,IfcElement',(#1930,#1931,#1932));
+#1930=IFCSIMPLEPROPERTYTEMPLATE('2EYu580sTAHg11bIhd8erd',$,'FireResistanceRating','Fire rating identifying the entity''s fire resistive value (e.g., 1-hour, 2-hour, etc.) so that its resistance to fire can be compared to that of the surrounding structure.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1931=IFCSIMPLEPROPERTYTEMPLATE('3hJZFtS6LBxOOcVmjmentf',$,'IsCombustible','Combustibility (YES it is combustible or NO it is not combustible).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1932=IFCSIMPLEPROPERTYTEMPLATE('1qt7bpNFf34O87ifXgiUmX',$,'SurfaceSpreadOfFlame','Surface spread of flame characteristics.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1933=IFCPROPERTYSETTEMPLATE('1qY$QkEiXB0O1d6TIJVK$N',$,'Pset_FlowControllerDamper','Definition from IAI: Damper occurrence attributes attached to an instance of IfcFlowController.\X2\000A\X0\',$,'IfcFlowController',(#1934));
+#1934=IFCSIMPLEPROPERTYTEMPLATE('3Lb6_qUnTBTu2RDBsoDqwa',$,'SizingMethod','Identifies whether the damper is sized nominally or with exact measurements:\X2\000A\X0\NOMINAL: Nominal sizing method. \X2\000A\X0\EXACT: Exact sizing method. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1935,$,$,$,.READWRITE.);
+#1935=IFCPROPERTYENUMERATION('PEnum_DamperSizingMethod',(IFCLABEL('NOMINAL'),IFCLABEL('EXACT'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1936=IFCPROPERTYSETTEMPLATE('1uHr9WUc18_vdAJAXhyBIs',$,'Pset_FlowControllerFlowMeter','Definition from IAI: Flow meter occurrence common attributes.\X2\000A\X0\',$,'IfcFlowController',(#1937));
+#1937=IFCSIMPLEPROPERTYTEMPLATE('2w4IEnbbH3ZuITAaBPu$Iz',$,'Purpose','Enumeration defining the purpose of the flow meter occurrence.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1938,$,$,$,.READWRITE.);
+#1938=IFCPROPERTYENUMERATION('PEnum_FlowMeterPurpose',(IFCLABEL('MASTER'),IFCLABEL('SUBMASTER'),IFCLABEL('SUBMETER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1939=IFCPROPERTYSETTEMPLATE('14FBkQX4PEIhvY$n7o$Mou',$,'Pset_FlowFittingDuctFitting','Definition from IAI: Duct fitting occurrence attributes attached to an instance of IfcFlowFitting.\X2\000A\X0\',$,'IfcFlowFitting',(#1940,#1941,#1942));
+#1940=IFCSIMPLEPROPERTYTEMPLATE('0d0kfF4jPCM9W5TMYZ6OAw',$,'AbsoluteRoughnessFactor','The absolute roughness factor of the duct fitting.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1941=IFCSIMPLEPROPERTYTEMPLATE('2T7EtrJzT07OCXjoUXUqGc',$,'HasLiner','TRUE if the fitting has interior duct insulating lining, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1942=IFCSIMPLEPROPERTYTEMPLATE('1u6QFTow9E1g$pRqi$UmCT',$,'Color','The color of the duct fitting.\X2\000A000A\X0\Note: This is typically used for any duct fittings with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1943=IFCPROPERTYSETTEMPLATE('2lV4DQKTz5SgmLXfY9WvOM',$,'Pset_FlowFittingPipeFitting','Definition from IAI: Pipe fitting occurrence attributes attached to an instance of IfcFlowFitting.\X2\000A\X0\',$,'IfcFlowFitting',(#1944,#1945));
+#1944=IFCSIMPLEPROPERTYTEMPLATE('3pXNxaFVD4p9K2eulaaOmp',$,'InteriorRoughnessCoefficient','The interior roughness of the pipe fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1945=IFCSIMPLEPROPERTYTEMPLATE('0mA9pNBKTBGuyW3$ginH_b',$,'Color','The color of the pipe fitting.\X2\000A000A\X0\Note: This is typically used only for plastic pipe fittings. However, it may be used for any pipe fittings with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1946=IFCPROPERTYSETTEMPLATE('38KgSmy_X5hOxmSMIDYGYy',$,'Pset_FlowMovingDeviceCompressor','Definition from IAI: Compressor occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#1947));
+#1947=IFCSIMPLEPROPERTYTEMPLATE('2kTn6c3zP4YxiVV7Ftz_8z',$,'ImpellerDiameter','Diameter of compressor impeller - used to scale performance of geometrically similar compressors.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1948=IFCPROPERTYSETTEMPLATE('0baD84u2H50eTY9kaTTebT',$,'Pset_FlowMovingDeviceFan','Definition from IAI: Fan occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#1949,#1951,#1953,#1955,#1957,#1959,#1960));
+#1949=IFCSIMPLEPROPERTYTEMPLATE('2ghy7oEET4IQSgm_XtX6qH',$,'DischargeType','Defines the type of connection at the fan discharge.\X2\000A\X0\Duct: Discharge into ductwork.\X2\000A\X0\Screen: Discharge into screen outlet.\X2\000A\X0\Louver: Discharge into a louver.\X2\000A\X0\Damper: Discharge into a damper.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1950,$,$,$,.READWRITE.);
+#1950=IFCPROPERTYENUMERATION('PEnum_FanDischargeType',(IFCLABEL('DUCT'),IFCLABEL('SCREEN'),IFCLABEL('LOUVER'),IFCLABEL('DAMPER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1951=IFCSIMPLEPROPERTYTEMPLATE('19GTSfTDr9PPSZ9vdLmaa$',$,'ApplicationOfFan','The functional application of the fan:\X2\000A\X0\SUPPLYAIR: Supply air fan. \X2\000A\X0\RETURNAIR: Return air fan. \X2\000A\X0\EXHAUSTAIR: Exhaust air fan. \X2\000A\X0\OTHER: Other type of application not defined above.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1952,$,$,$,.READWRITE.);
+#1952=IFCPROPERTYENUMERATION('PEnum_FanApplicationType',(IFCLABEL('SUPPLY'),IFCLABEL('RETURN'),IFCLABEL('EXHAUST'),IFCLABEL('COOLINGTOWER'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1953=IFCSIMPLEPROPERTYTEMPLATE('2nRFGEj8H9exFtl8gUl2Ec',$,'CoilPosition','Defines the relationship between a fan and a coil.\X2\000A\X0\DrawThrough: Fan located downstream of the coil.\X2\000A\X0\BlowThrough: Fan located upstream of the coil.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1954,$,$,$,.READWRITE.);
+#1954=IFCPROPERTYENUMERATION('PEnum_FanCoilPosition',(IFCLABEL('DRAWTHROUGH'),IFCLABEL('BLOWTHROUGH'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1955=IFCSIMPLEPROPERTYTEMPLATE('2wvr3kyEf8oPyGyIw_vNOd',$,'MotorPosition','Defines the location of the motor relative to the air stream.\X2\000A\X0\InAirStream: Fan motor is in the air stream.\X2\000A\X0\OutOfAirStream: Fan motor is out of the air stream.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1956,$,$,$,.READWRITE.);
+#1956=IFCPROPERTYENUMERATION('PEnum_FanMotorPosition',(IFCLABEL('INAIRSTREAM'),IFCLABEL('OUTOFAIRSTREAM'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1957=IFCSIMPLEPROPERTYTEMPLATE('11Gxe31fH7Bvy_b5HnVx33',$,'FanMountingType','Defines the method of mounting the fan in the building. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1958,$,$,$,.READWRITE.);
+#1958=IFCPROPERTYENUMERATION('PEnum_FanMountingType',(IFCLABEL('MANUFACTUREDCURB'),IFCLABEL('FIELDERECTEDCURB'),IFCLABEL('CONCRETEPAD'),IFCLABEL('SUSPENDED'),IFCLABEL('WALLMOUNTED'),IFCLABEL('DUCTMOUNTED'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1959=IFCSIMPLEPROPERTYTEMPLATE('1Pa$kHQwP7WQm21SVkypbj',$,'FractionOfMotorHeatToAirStream','Fraction of the motor heat released into the fluid flow.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1960=IFCSIMPLEPROPERTYTEMPLATE('2jqAZAWj14tBr45d_FshrA',$,'ImpellerDiameter','Diameter of fan wheel - used to scale performance of geometrically similar fans.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1961=IFCPROPERTYSETTEMPLATE('32UidnOqTBD9vrYNOCyG4N',$,'Pset_FlowMovingDeviceFanCentrifugal','Definition from IAI: Centrifugal fan occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#1962,#1964,#1966));
+#1962=IFCSIMPLEPROPERTYTEMPLATE('0ZVNqEQlT8nvOQEJKC1SAr',$,'DischargePosition','Centrifugal fan discharge position:\X2\000A\X0\TOPHORIZONTAL: Top horizontal discharge. \X2\000A\X0\TOPANGULARDOWN: Top angular down discharge. \X2\000A\X0\DOWNBLAST: Downblast discharge. \X2\000A\X0\BOTTOMANGULARDOWN: Bottom angular down discharge. \X2\000A\X0\BOTTOMHORIZONTAL: Bottom horizontal discharge. \X2\000A\X0\BOTTOMANGULARUP: Bottom angular up discharge. \X2\000A\X0\UPBLAST: Upblast discharge. \X2\000A\X0\TOPANGULARUP: Top angular up discharge. \X2\000A\X0\OTHER: Other type of fan arrangement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1963,$,$,$,.READWRITE.);
+#1963=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanDischargePosition',(IFCLABEL('TOPHORIZONTAL'),IFCLABEL('TOPANGULARDOWN'),IFCLABEL('TOPANGULARUP'),IFCLABEL('DOWNBLAST'),IFCLABEL('BOTTOMANGULARDOWN'),IFCLABEL('BOTTOMHORIZONTAL'),IFCLABEL('BOTTOMANGULARUP'),IFCLABEL('UPBLAST'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1964=IFCSIMPLEPROPERTYTEMPLATE('3a9gJOikr7xwhXaS41k6eh',$,'DirectionOfRotation','The direction of the centrifugal fan wheel rotation when viewed from the drive side of the fan:\X2\000A\X0\CLOCKWISE: Clockwise. \X2\000A\X0\COUNTERCLOCKWISE: Counter-clockwise. \X2\000A\X0\OTHER: Other type of fan rotation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1965,$,$,$,.READWRITE.);
+#1965=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanRotation',(IFCLABEL('CLOCKWISE'),IFCLABEL('COUNTERCLOCKWISE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1966=IFCSIMPLEPROPERTYTEMPLATE('0Gs9O6WVb5xObCoxP6GcCp',$,'Arrangement','Defines the fan and motor drive arrangement as defined by AMCA:\X2\000A\X0\ARRANGEMENT1: Arrangement 1. \X2\000A\X0\ARRANGEMENT2: Arrangement 2. \X2\000A\X0\ARRANGEMENT3: Arrangement 3. \X2\000A\X0\ARRANGEMENT4: Arrangement 4. \X2\000A\X0\ARRANGEMENT7: Arrangement 7. \X2\000A\X0\ARRANGEMENT8: Arrangement 8. \X2\000A\X0\ARRANGEMENT9: Arrangement 9. \X2\000A\X0\ARRANGEMENT10: Arrangement 10. \X2\000A\X0\OTHER: Other type of fan drive arrangement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1967,$,$,$,.READWRITE.);
+#1967=IFCPROPERTYENUMERATION('PEnum_CentrifugalFanArrangement',(IFCLABEL('ARRANGEMENT1'),IFCLABEL('ARRANGEMENT2'),IFCLABEL('ARRANGEMENT3'),IFCLABEL('ARRANGEMENT4'),IFCLABEL('ARRANGEMENT7'),IFCLABEL('ARRANGEMENT8'),IFCLABEL('ARRANGEMENT9'),IFCLABEL('ARRANGEMENT10'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1968=IFCPROPERTYSETTEMPLATE('0ZZlkGAHjAnui97HQgNENm',$,'Pset_FlowMovingDevicePump','Definition from IAI: Pump occurrence attributes attached to an instance of IfcFlowMovingDevice.\X2\000A\X0\',$,'IfcFlowMovingDevice',(#1969,#1970,#1972));
+#1969=IFCSIMPLEPROPERTYTEMPLATE('1HkOMPlC1708HC6cVr9kiX',$,'ImpellerDiameter','Diameter of pump impeller - used to scale performance of geometrically similar pumps.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1970=IFCSIMPLEPROPERTYTEMPLATE('3F6LliK$536el6T7LtM72h',$,'BaseType','Defines general types of pump bases:\X2\000A\X0\FRAME: Frame. \X2\000A\X0\BASE: Base. \X2\000A\X0\NONE: There is no pump base, such as an inline pump. \X2\000A\X0\OTHER: Other type of pump base. ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1971,$,$,$,.READWRITE.);
+#1971=IFCPROPERTYENUMERATION('PEnum_PumpBaseType',(IFCLABEL('FRAME'),IFCLABEL('BASE'),IFCLABEL('NONE'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1972=IFCSIMPLEPROPERTYTEMPLATE('0foTg4Ctn4teU9c0xKLSF2',$,'DriveConnectionType','The way the pump drive mechanism is connected to the pump:\X2\000A\X0\DIRECTDRIVE: Direct drive. \X2\000A\X0\BELTDRIVE: Belt drive. \X2\000A\X0\COUPLING: Coupling. \X2\000A\X0\OTHER: Other type of drive connection. \X2\000A\X0\',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1973,$,$,$,.READWRITE.);
+#1973=IFCPROPERTYENUMERATION('PEnum_PumpDriveConnectionType',(IFCLABEL('DIRECTDRIVE'),IFCLABEL('BELTDRIVE'),IFCLABEL('COUPLING'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1974=IFCPROPERTYSETTEMPLATE('2JKBWSyqj9JeBYkk7Nmr8w',$,'Pset_FlowSegmentDuctSegment','Definition from IAI: Duct segment occurrence attributes attached to an instance of IfcFlowSegment.\X2\000A\X0\',$,'IfcFlowSegment',(#1975,#1976,#1977,#1978,#1979));
+#1975=IFCSIMPLEPROPERTYTEMPLATE('0LrnOUBaP0MPrGpu4dZmbD',$,'MaterialThickness','The thickness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1976=IFCSIMPLEPROPERTYTEMPLATE('0$ih_wBhP9KwkQfIEYGyg3',$,'InteriorRoughnessCoefficient','The interior roughness of the duct fitting material.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1977=IFCSIMPLEPROPERTYTEMPLATE('04WGIYojX3PBNm_3XkFtFx',$,'HasLiner','TRUE if the fitting has interior duct insulating lining, FALSE if it does not.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1978=IFCSIMPLEPROPERTYTEMPLATE('33njBxg0v49f$ZmFQJhPH9',$,'Length','Length of the duct segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1979=IFCSIMPLEPROPERTYTEMPLATE('2yUmO2hjj1i8R5G__MWBn0',$,'Color','The color of the duct segment.\X2\000A000A\X0\Note: This is typically used for any duct segments with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1980=IFCPROPERTYSETTEMPLATE('0d3n2iAcbCoh3PToMsgY7G',$,'Pset_FlowSegmentPipeSegment','Definition from IAI: Pipe segment occurrence attributes attached to an instance of IfcFlowSegment.\X2\000A\X0\',$,'IfcFlowSegment',(#1981,#1982,#1983,#1984,#1985));
+#1981=IFCSIMPLEPROPERTYTEMPLATE('3jef5qqkv5cAnF0kBYq6xZ',$,'InteriorRoughnessCoefficient','The interior roughness coefficient of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1982=IFCSIMPLEPROPERTYTEMPLATE('3YOVxxtmH6EOcPi9UaEZlu',$,'Length','Length of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1983=IFCSIMPLEPROPERTYTEMPLATE('1kjUThWkr7efdxIHPDhwsK',$,'Color','The color of the pipe segment.\X2\000A000A\X0\Note: This is typically used only for plastic pipe segments. However, it may be used for any pipe segments with a painted surface which is not otherwise specified as a covering.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#1984=IFCSIMPLEPROPERTYTEMPLATE('2A2DNcrdb32BwuTqINISiu',$,'Gradient','The gradient of the pipe segment.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#1985=IFCSIMPLEPROPERTYTEMPLATE('2Y$m6tlurBw8vK2voDVEyV',$,'InvertElevation','The invert elevation relative to the datum established for the project.',.P_SINGLEVALUE.,'IfcLengthMeasure',$,$,$,$,$,.READWRITE.);
+#1986=IFCPROPERTYSETTEMPLATE('06AoYHS8v9zAK986qPg2GM',$,'Pset_FlowStorageDeviceTank','Definition from IAI: Properties that relate to an instance of a flow storage device that is typed as a tank. Note that a partial tank may be considered as a compartment within a compartmentalized tank.',$,'IfcFlowStorageDevice',(#1987,#1989,#1990));
+#1987=IFCSIMPLEPROPERTYTEMPLATE('0jMi0$LhXE5f75x4qBTVC3',$,'TankComposition','Defines the level of element composition where:\X2\000A000A\X0\COMPLEX = A set of elementary units aggregated together to fulfill the overall required purpose.\X2\000A\X0\ELEMENT = A single elementary unit that may exist of itself or as an aggregation of partial units..\X2\000A\X0\PARTIAL ',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1988,$,$,$,.READWRITE.);
+#1988=IFCPROPERTYENUMERATION('PEnum_TankComposition',(IFCLABEL('COMPLEX'),IFCLABEL('ELEMENT'),IFCLABEL('PARTIAL'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1989=IFCSIMPLEPROPERTYTEMPLATE('3DLleIYPT0MQqOZLv7yyXR',$,'HasLadder','Indication of whether the tank is provided with a ladder (set TRUE) for access to the top. If no ladder is provided then value is set FALSE.\X2\000A000A\X0\Note: No indication is given of the type of ladder (gooseneck etc.)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1990=IFCSIMPLEPROPERTYTEMPLATE('1NmHi3MH97cBhcbCiE5VRj',$,'HasVisualIndicator','Indication of whether the tank is provided with a visual indicator (set TRUE) that shows the water level in the tank. If no visual indicator is provided then value is set FALSE.',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#1991=IFCPROPERTYSETTEMPLATE('0Wv7EI9zL7PRsGmSQAxzAN',$,'Pset_FlowTerminalAirTerminal','Definition from IAI: Air terminal occurrence attributes attached to an instance of IfcFlowTerminal.\X2\000A\X0\',$,'IfcFlowTerminal',(#1992,#1994));
+#1992=IFCSIMPLEPROPERTYTEMPLATE('0OvVTGji96HQD2JBty5mb4',$,'AirflowType','Enumeration defining the functional type of air flow through the terminal.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1993,$,$,$,.READWRITE.);
+#1993=IFCPROPERTYENUMERATION('PEnum_AirTerminalAirflowType',(IFCLABEL('SUPPLYAIR'),IFCLABEL('RETURNAIR'),IFCLABEL('EXHAUSTAIR'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1994=IFCSIMPLEPROPERTYTEMPLATE('3RNK4Rpy12RQusLEUr8KJi',$,'Location','Location (a single type of diffuser can be used for multiple locations); high means close to ceiling.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#1995,$,$,$,.READWRITE.);
+#1995=IFCPROPERTYENUMERATION('PEnum_AirTerminalLocation',(IFCLABEL('SIDEWALLHIGH'),IFCLABEL('SIDEWALLLOW'),IFCLABEL('CEILINGPERIMETER'),IFCLABEL('CEILINGINTERIOR'),IFCLABEL('FLOOR'),IFCLABEL('SILL'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#1996=IFCPROPERTYSETTEMPLATE('1ks_9ZJtPDqu_pxhqG0bhu',$,'Pset_OutsideDesignCriteria','Definition from IAI: Outside air conditions used as the basis for calculating thermal loads at peak conditions, as well as the weather data location from which these conditions were obtained. HISTORY: New property set in IFC Release 1.0.',$,'IfcBuilding',(#1997,#1998,#1999,#2000,#2001,#2002,#2003,#2004,#2005,#2007,#2008));
+#1997=IFCSIMPLEPROPERTYTEMPLATE('2I7ZS$q3bEiBlgIg6sfSH6',$,'HeatingDryBulb','Outside dry bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1998=IFCSIMPLEPROPERTYTEMPLATE('0TQYxsydz5nOR9hmygFtv3',$,'HeatingWetBulb','Outside wet bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#1999=IFCSIMPLEPROPERTYTEMPLATE('1jtjwJzJzCIAgEsGMusllA',$,'HeatingDesignDay','The month, day and time that has been selected for the heating design calculations.',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
+#2000=IFCSIMPLEPROPERTYTEMPLATE('2Peb9sxlf49hCFe2GoUWls',$,'CoolingDryBulb','Outside dry bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#2001=IFCSIMPLEPROPERTYTEMPLATE('1kWXyNt9v6fPQWgxC8i4rT',$,'CoolingWetBulb','Outside wet bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#2002=IFCSIMPLEPROPERTYTEMPLATE('3I1Q9vXuTCDPC1q7bvef8p',$,'CoolingDesignDay','The month, day and time that has been selected for the cooling design calculations.',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
+#2003=IFCSIMPLEPROPERTYTEMPLATE('3zmjnK13jDBhivaKHIVjqJ',$,'WeatherDataStation','The site weather data station description or reference to the data source from which weather data was obtained for use in calculations. ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2004=IFCSIMPLEPROPERTYTEMPLATE('37BYqDjUj9$xlbe684q0us',$,'WeatherDataDate','The date for which the weather data was gathered. ',.P_REFERENCEVALUE.,'IfcCalendarDate ',$,$,$,$,$,.READWRITE.);
+#2005=IFCSIMPLEPROPERTYTEMPLATE('0vsLJtr5r7t9mGkSRwXIl$',$,'BuildingThermalExposure','The thermal exposure expected by the building based on surrounding site conditions.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2006,$,$,$,.READWRITE.);
+#2006=IFCPROPERTYENUMERATION('PEnum_BuildingThermalExposure',(IFCLABEL('LIGHT'),IFCLABEL('MEDIUM'),IFCLABEL('HEAVY'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
+#2007=IFCSIMPLEPROPERTYTEMPLATE('1$YwY03fX69uE1qrYw79Gu',$,'PrevailingWindDirection','The prevailing wind angle direction measured from True North (0 degrees) in a clockwise direction.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2008=IFCSIMPLEPROPERTYTEMPLATE('3by_m5S4XF4wSA3CuPbOQR',$,'PrevailingWindVelocity','The design wind velocity coming from the direction specified by the PrevailingWindDirection attribute.',.P_SINGLEVALUE.,'IfcLinearVelocityMeasure',$,$,$,$,$,.READWRITE.);
+#2009=IFCPROPERTYSETTEMPLATE('09LxBOR6r5qA0cTVmpWNAL',$,'Pset_SpaceThermalDesign','Definition from IAI: Space or zone HVAC design requirements. HISTORY: New property set in IFC Release 1.0 (Pset_SpaceHvacInformation); renamed to Pset_SpaceThermalDesign and revised in IFC2x2.',$,'IfcSpace',(#2010,#2011,#2012,#2013,#2014,#2015,#2016,#2017,#2018,#2019,#2020,#2021,#2022));
+#2010=IFCSIMPLEPROPERTYTEMPLATE('1vZ7YuLKfCYQh5$DiaRn4x',$,'CoolingDesignAirflow','The air flowrate required during the peak cooling conditions. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#2011=IFCSIMPLEPROPERTYTEMPLATE('2NeARTpO54BQG9kXkFk_6G',$,'HeatingDesignAirflow','The air flowrate required during the peak heating conditions, but could also be determined by minimum ventilation requirement or minimum air change requirements. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#2012=IFCSIMPLEPROPERTYTEMPLATE('0AGvngsCf5NvuRWny7VEtZ',$,'TotalSensibleHeatGain','The total sensible heat or energy gained by the space during the peak cooling conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#2013=IFCSIMPLEPROPERTYTEMPLATE('0yOERe0VDBxwT_TJeGqiw7',$,'TotalHeatGain','The total amount of heat or energy gained by the space at the time of the space''s peak cooling conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#2014=IFCSIMPLEPROPERTYTEMPLATE('1T0iwpkODCAuH2YxxemVNi',$,'TotalHeatLoss','The total amount of heat or energy lost by the space at the time of the space''s peak heating conditions. ',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#2015=IFCSIMPLEPROPERTYTEMPLATE('0Tt4wnfhL6pe0GRLImGL2Y',$,'CoolingDryBulb','Inside dry bulb temperature for cooling design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#2016=IFCSIMPLEPROPERTYTEMPLATE('10UU3sxN9AuAE3UQfp6Cmc',$,'CoolingRelativeHumidity','Inside relative humidity for cooling design. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2017=IFCSIMPLEPROPERTYTEMPLATE('0a3FztXGjBOPIakGLmi$kF',$,'HeatingDryBulb','Inside dry bulb temperature for heating design ',.P_SINGLEVALUE.,'IfcThermodynamicTemperatureMeasure',$,$,$,$,$,.READWRITE.);
+#2018=IFCSIMPLEPROPERTYTEMPLATE('1yMgQLp3f95PiAKJ581nXH',$,'HeatingRelativeHumidity','Inside relative humidity for heating design. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2019=IFCSIMPLEPROPERTYTEMPLATE('3X_vd5XEL7Ie98dZnyaBp6',$,'VentilationAirFlowrate','Ventilation outside air requirement for the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#2020=IFCSIMPLEPROPERTYTEMPLATE('0Ue7emsmP5s9CLS0tLBYcg',$,'ExhaustAirFlowrate','Design exhaust air flow rate for the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#2021=IFCSIMPLEPROPERTYTEMPLATE('0O4DxFDc1ErfqGb59qtSZ9',$,'CeilingRAPlenum','Ceiling plenum used for return air or not. TRUE = Yes, FALSE = No. ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2022=IFCSIMPLEPROPERTYTEMPLATE('2Wfz8hhnr3OuQB52Yc3SOj',$,'BoundaryAreaHeatLoss','Heat loss per unit area for the boundary object. This is a design input value for use in the absence of calculated load data. ',.P_SINGLEVALUE.,'IfcHeatFluxDensityMeasure',$,$,$,$,$,.READWRITE.);
+#2023=IFCPROPERTYSETTEMPLATE('3ZSg9wSuzEI8wJEN29iKt0',$,'Pset_ThermalLoadAggregate','Definition from IAI: The aggregated thermal loads experienced by one or many spaces, zones, or buildings. This aggregate thermal load information is typically addressed by a system or plant. HISTORY: New property set in IFC Release 1.0 (Pset_AggregateLoadInformation); renamed Pset_ThermalLoadAggregate in IFC2x2.',$,'IfcZone,IfcSpatialStructureElement,IfcSystem',(#2024,#2025,#2026,#2027,#2028,#2029,#2030));
+#2024=IFCSIMPLEPROPERTYTEMPLATE('2W48JlEDXDJB3ampZwis9s',$,'TotalCoolingLoad','The peak total cooling load for the building, zone or space.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#2025=IFCSIMPLEPROPERTYTEMPLATE('2tKqkNEXD0uh0tAPH13Ov3',$,'TotalHeatingLoad','The peak total heating load for the building, zone or space.',.P_SINGLEVALUE.,'IfcPowerMeasure',$,$,$,$,$,.READWRITE.);
+#2026=IFCSIMPLEPROPERTYTEMPLATE('0WVmHA6Wb2cxqpA5k6EbSk',$,'LightingDiversity','Lighting diversity. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2027=IFCSIMPLEPROPERTYTEMPLATE('2tji0j9z1BQgHXmcox2L_W',$,'InfiltrationDiversitySummer','Diversity factor for Summer infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2028=IFCSIMPLEPROPERTYTEMPLATE('26KznqRUb0$u9IsjoRzPpE',$,'InfiltrationDiversityWinter','Diversity factor for Winter infiltration. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2029=IFCSIMPLEPROPERTYTEMPLATE('1W$9arbfT3vv3hGVuIexxU',$,'ApplianceDiversity','Diversity of appliance load. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2030=IFCSIMPLEPROPERTYTEMPLATE('2icqwUO6n1x9$p12jg623j',$,'LoadSafetyFactor','Load safety factor. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2031=IFCPROPERTYSETTEMPLATE('0V9L$LtZb8wf230oKiUBpX',$,'Pset_ThermalLoadDesignCriteria','Definition from IAI: Building thermal load design data that are used for calculating thermal loads in a space or building. HISTORY: New property set in IFC Release 1.0 (Pset_LoadDesignCriteria); renamed Pset_ThermalLoadDesignCriteria in IFC2x2.',$,'IfcSpatialStructureElement,IfcSystem,IfcBuilding,IfcZone',(#2032,#2033,#2034,#2035,#2036,#2037));
+#2032=IFCSIMPLEPROPERTYTEMPLATE('3aWRAjtWzBhALtZqFOxgXQ',$,'OccupancyDiversity','Diversity factor that may be applied to the number of people in the space. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2033=IFCSIMPLEPROPERTYTEMPLATE('3wZsNp6C1B6PzGEg3UOOBH',$,'OutsideAirPerPerson','Design quantity of outside air to be provided per person in the space. ',.P_SINGLEVALUE.,'IfcVolumetricFlowRateMeasure',$,$,$,$,$,.READWRITE.);
+#2034=IFCSIMPLEPROPERTYTEMPLATE('20vGTdB95BBO_cS5fx4JUd',$,'ReceptacleLoadIntensity','Average power use intensity of appliances and other non-HVAC equipment.in the space per unit area.(PowerMeasure/IfcAreaMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#2035=IFCSIMPLEPROPERTYTEMPLATE('2oI_dEzCf4ZhJZho5axNKk',$,'AppliancePercentLoadToRadiant','Percent of sensible load to radiant heat. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2036=IFCSIMPLEPROPERTYTEMPLATE('3pV7ClAvn7exzyZWT6$xtH',$,'LightingLoadIntensity','Average lighting load intensity in the space per unit area (PowerMeasure/IfcAreaMeasure) ',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
+#2037=IFCSIMPLEPROPERTYTEMPLATE('3DW8quxe5DRfgVWxgEC2FM',$,'LightingPercentLoadToReturnAir','Percent of lighting load to the return air plenum. ',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2038=IFCPROPERTYSETTEMPLATE('0dcBdiGlH2_O1RjnSctlXo',$,'Pset_UtilityConsumption','Definition from IAI: Consumption of utility resources, typically applied to the IfcBuilding instance, used to identify how much was consumed on I.e., a monthly basis.',$,'IfcBuilding',(#2039,#2040,#2041,#2042,#2043));
+#2039=IFCSIMPLEPROPERTYTEMPLATE('2KnBzf$vb2t8d0kwYNdlfN',$,'Heat','The amount of heat energy consumed during the period specified in the time series.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCENERGYMEASURE',$,$,$,$,.READWRITE.);
+#2040=IFCSIMPLEPROPERTYTEMPLATE('0LRzumNw58xxtD8xi7XbRN',$,'Electricity','The amount of electricity consumed during the period specified in the time series.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCENERGYMEASURE',$,$,$,$,.READWRITE.);
+#2041=IFCSIMPLEPROPERTYTEMPLATE('1cpP39HFv2eRGSobuYAlw3',$,'Water','The amount of water consumed during the period specified in the time series.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMEMEASURE',$,$,$,$,.READWRITE.);
+#2042=IFCSIMPLEPROPERTYTEMPLATE('0$buezmPvAww9kCkid79Ej',$,'Fuel','The amount of fuel consumed during the period specified in the time series.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCVOLUMEMEASURE',$,$,$,$,.READWRITE.);
+#2043=IFCSIMPLEPROPERTYTEMPLATE('2gj6BClN96tB8MapeKsEAU',$,'Steam','The amount of steam consumed during the period specified in the time series.',.P_REFERENCEVALUE.,'IfcTimeSeries','IFCMASSMEASURE',$,$,$,$,.READWRITE.);
+#2044=IFCPROPERTYSETTEMPLATE('0c2h_6VA93zA_LJnQgP5SD',$,'Pset_DiscreteAccessoryAnchorBolt','Definition from IAI: Properties common to different types of anchor bolts.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2045,#2046,#2047,#2048));
+#2045=IFCSIMPLEPROPERTYTEMPLATE('10qWOatsnBvvOrtIrbimuN',$,'AnchorBoltLength','The length of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2046=IFCSIMPLEPROPERTYTEMPLATE('2xMXujarT4dxCjbgKh6xPL',$,'AnchorBoltDiameter','The nominal diameter of the anchor bolt bar(s).',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2047=IFCSIMPLEPROPERTYTEMPLATE('3sw093K6r9$elzaba3sbto',$,'AnchorBoltThreadLength','The length of the threaded part of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2048=IFCSIMPLEPROPERTYTEMPLATE('1WlVyK1XPDigfsAqMpEVxv',$,'AnchorBoltProtrusionLength','The length of the protruding part of the anchor bolt.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2049=IFCPROPERTYSETTEMPLATE('0noaFegLL82QTMelMrkp0P',$,'Pset_DiscreteAccessoryColumnShoe','Definition from IAI: Shape properties common to column shoes.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2050,#2051,#2052,#2053,#2054,#2055));
+#2050=IFCSIMPLEPROPERTYTEMPLATE('3hd4udRWrANgGi9GHiEEpe',$,'ColumnShoeBasePlateThickness','The thickness of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2051=IFCSIMPLEPROPERTYTEMPLATE('0vNa4m0O98KA8zhI0DmL_L',$,'ColumnShoeBasePlateWidth','The width of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2052=IFCSIMPLEPROPERTYTEMPLATE('37ddinr89Cwh2n1wdKbPS5',$,'ColumnShoeBasePlateDepth','The depth of the column shoe base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2053=IFCSIMPLEPROPERTYTEMPLATE('0JOO7wWlD21feC61nV58UO',$,'ColumnShoeCasingHeight','The height of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2054=IFCSIMPLEPROPERTYTEMPLATE('1VNBZHVjzFYg9sH4i71KSi',$,'ColumnShoeCasingWidth','The width of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2055=IFCSIMPLEPROPERTYTEMPLATE('0C3nu3ZmPBVP9kesU9cboD',$,'ColumnShoeCasingDepth','The depth of the column shoe casing.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2056=IFCPROPERTYSETTEMPLATE('3ogOXlhCLDB8XttAqdIWfd',$,'Pset_DiscreteAccessoryCornerFixingPlate','Definition from IAI: Properties specific to corner fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2057,#2058,#2059,#2060));
+#2057=IFCSIMPLEPROPERTYTEMPLATE('0kgG_8UsD3guHLTX2PNsBU',$,'CornerFixingPlateLength','The length of the L-shaped corner plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2058=IFCSIMPLEPROPERTYTEMPLATE('1Q0Rusg1b5HviqwfzHDWZ7',$,'CornerFixingPlateThickness','The thickness of the L-shaped corner plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2059=IFCSIMPLEPROPERTYTEMPLATE('2OFVs$rC16FOpDdU3OlGUe',$,'CornerFixingPlateFlangeWidthInPlaneZ','The flange width of the L-shaped corner plate in plane Z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2060=IFCSIMPLEPROPERTYTEMPLATE('3IAcUOEJ15svaWC6Zt3L9x',$,'CornerFixingPlateFlangeWidthInPlaneX','The flange width of the L-shaped corner plate in plane X.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2061=IFCPROPERTYSETTEMPLATE('2OQMrQ6J96YfVD0Ll9fcRQ',$,'Pset_DiscreteAccessoryDiagonalTrussConnector','Definition from IAI: Shape properties specific to connecting accessories in truss form with diagonal cross-bars.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2062,#2063,#2064,#2065,#2066,#2067));
+#2062=IFCSIMPLEPROPERTYTEMPLATE('1H_vpAKxHEQvUK09CsieRV',$,'DiagonalTrussHeight','The overall height of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2063=IFCSIMPLEPROPERTYTEMPLATE('1jjL4n_G93fOkPyK6CRyWM',$,'DiagonalTrussLength','The overall length of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2064=IFCSIMPLEPROPERTYTEMPLATE('06t7z6Mk17w9_uRbfMUM0h',$,'DiagonalTrussCrossBarSpacing','The spacing between diagonal cross-bar sections.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2065=IFCSIMPLEPROPERTYTEMPLATE('1_vh6DOZn2nfbJTcYlexYU',$,'DiagonalTrussBaseBarDiameter','The nominal diameter of the base bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2066=IFCSIMPLEPROPERTYTEMPLATE('07c_VjtMP1Wxekhrv3qalv',$,'DiagonalTrussSecondaryBarDiameter','The nominal diameter of the secondary bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2067=IFCSIMPLEPROPERTYTEMPLATE('32$gVWC1X7TwUatxrWaz6H',$,'DiagonalTrussCrossBarDiameter','The nominal diameter of the diagonal cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2068=IFCPROPERTYSETTEMPLATE('1B1Sdsg2n3ivYHBddMHFac',$,'Pset_DiscreteAccessoryEdgeFixingPlate','Definition from IAI: Properties specific to edge fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2069,#2070,#2071,#2072));
+#2069=IFCSIMPLEPROPERTYTEMPLATE('1I84h0XzfDR83iEm5Pzt0M',$,'EdgeFixingPlateLength','The length of the L-shaped edge plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2070=IFCSIMPLEPROPERTYTEMPLATE('2pzFhDjUj5vBio5y08E6se',$,'EdgeFixingPlateThickness','The thickness of the L-shaped edge plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2071=IFCSIMPLEPROPERTYTEMPLATE('2nFW0ZwZ51wvNOJD2xKz4x',$,'EdgeFixingPlateFlangeWidthInPlaneZ','The flange width of the L-shaped edge plate in plane Z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2072=IFCSIMPLEPROPERTYTEMPLATE('1TnuYzlAjAyvXFwDmDTNW_',$,'EdgeFixingPlateFlangeWidthInPlaneX','The flange width of the L-shaped edge plate in plane X.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2073=IFCPROPERTYSETTEMPLATE('3_YuylJh5ESwtV0_fKefWz',$,'Pset_DiscreteAccessoryFixingSocket','Definition from IAI: Properties common to fixing sockets.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2074,#2075,#2076,#2077));
+#2074=IFCSIMPLEPROPERTYTEMPLATE('1tJtNjYYjAlQqbKVf8g8LM',$,'FixingSocketTypeReference','Type reference for the fixing socket according to local standards. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2075=IFCSIMPLEPROPERTYTEMPLATE('17NkuJ1QH9CuHxrNpVTaRo',$,'FixingSocketHeight','The overall height of the fixing socket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2076=IFCSIMPLEPROPERTYTEMPLATE('3UrCzCbCzB3BYJ7yRERWMh',$,'FixingSocketThreadDiameter','The nominal diameter of the thread.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2077=IFCSIMPLEPROPERTYTEMPLATE('3AlzNe6PXBEQrAyTRcNwbg',$,'FixingSocketThreadLength','The length of the threaded part of the fixing socket.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2078=IFCPROPERTYSETTEMPLATE('3nBXRQu3bEKxPHOloofbla',$,'Pset_DiscreteAccessoryLadderTrussConnector','Definition from IAI: Shape properties specific to connecting accessories in truss form with straight cross-bars in ladder shape.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2079,#2080,#2081,#2082,#2083,#2084));
+#2079=IFCSIMPLEPROPERTYTEMPLATE('1whN_0Bpv8qw35dLgsCeCB',$,'LadderTrussHeight','The overall height of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2080=IFCSIMPLEPROPERTYTEMPLATE('2ByXbUzmj3F8RUhntpJDnM',$,'LadderTrussLength','The overall length of the truss connector.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2081=IFCSIMPLEPROPERTYTEMPLATE('2$5MAY0cjBax_Nm6AixWHI',$,'LadderTrussCrossBarSpacing','The spacing between the straight cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2082=IFCSIMPLEPROPERTYTEMPLATE('2UnwqT_L90a8nrLEyMpwfK',$,'LadderTrussBaseBarDiameter','The nominal diameter of the base bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2083=IFCSIMPLEPROPERTYTEMPLATE('29pgFeQCb77fd9ck38BhL3',$,'LadderTrussSecondaryBarDiameter','The nominal diameter of the secondary bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2084=IFCSIMPLEPROPERTYTEMPLATE('1jSi9ujTbBHOY4FbaLEwkO',$,'LadderTrussCrossBarDiameter','The nominal diameter of the straight cross-bars.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2085=IFCPROPERTYSETTEMPLATE('1xJfM$FcXEw912aY0Lx9nL',$,'Pset_DiscreteAccessoryStandardFixingPlate','Definition from IAI: Properties specific to standard fixing plates.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2086,#2087,#2088));
+#2086=IFCSIMPLEPROPERTYTEMPLATE('0HqxKb_$H7xuRj7Qec8Kya',$,'StandardFixingPlateWidth','The width of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2087=IFCSIMPLEPROPERTYTEMPLATE('2U4Wtvb995OPjXPSKWLsZu',$,'StandardFixingPlateDepth','The depth of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2088=IFCSIMPLEPROPERTYTEMPLATE('2atUqWSsD4nOFqHDYj2yto',$,'StandardFixingPlateThickness','The thickness of the standard fixing plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2089=IFCPROPERTYSETTEMPLATE('2bgvBFI3T0avGd50guKVmU',$,'Pset_DiscreteAccessoryWireLoop','Definition from IAI: Shape properties common to wire loop joint connectors.',$,'IfcDiscreteAccessory,IfcDiscreteAccessoryType',(#2090,#2091,#2092,#2093,#2094,#2095));
+#2090=IFCSIMPLEPROPERTYTEMPLATE('3qN9DqGGfCEvj5LKeQask$',$,'WireLoopBasePlateThickness','The thickness of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2091=IFCSIMPLEPROPERTYTEMPLATE('1wFKMcc0nCxRQZGnZ4gPlD',$,'WireLoopBasePlateWidth','The width of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2092=IFCSIMPLEPROPERTYTEMPLATE('3fM5oN5ub5mAllMBEIPcMo',$,'WireLoopBasePlateLength','The length of the base plate.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2093=IFCSIMPLEPROPERTYTEMPLATE('3$CmhCawT5beUqCqN_2xkD',$,'WireDiameter','The nominal diameter of the wire.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2094=IFCSIMPLEPROPERTYTEMPLATE('0bvvCKpr53RwKn2fuugNcz',$,'WireEmbeddingLength','The length of the part of wire which is embedded in the precast concrete element.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2095=IFCSIMPLEPROPERTYTEMPLATE('0eDQdZWQD2Dg8fO_qZIDSi',$,'WireLoopLength','The length of the fastening loop part of the wire.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2096=IFCPROPERTYSETTEMPLATE('2pEzbJ7R55VRALRuoJCPVf',$,'Pset_Asset','Definition from IAI: An asset is a uniquely identifiable element which has a financial value and against which maintenance actions are recorded. \X2\000A\X0\',$,'IfcAsset',(#2097,#2099,#2101));
+#2097=IFCSIMPLEPROPERTYTEMPLATE('0Acd4FBJX7GusPTnPO9ELX',$,'AssetAccountingType','Identifies the predefined types of risk from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2098,$,$,$,.READWRITE.);
+#2098=IFCPROPERTYENUMERATION('PEnum_AssetAccountingType',(IFCLABEL('Fixed'),IFCLABEL('NonFixed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2099=IFCSIMPLEPROPERTYTEMPLATE('0zSXd4CoLAeAfeRG0XYKf$',$,'AssetTaxType','Identifies the predefined types of taxation group from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2100,$,$,$,.READWRITE.);
+#2100=IFCPROPERTYENUMERATION('PEnum_AssetTaxType',(IFCLABEL('Capitalised'),IFCLABEL('Expensed'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2101=IFCSIMPLEPROPERTYTEMPLATE('1gKRZCpoHBDQKQAfiPXidf',$,'AssetInsuranceType','Identifies the predefined types of insurance rating from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2102,$,$,$,.READWRITE.);
+#2102=IFCPROPERTYENUMERATION('PEnum_AssetInsuranceType',(IFCLABEL('Personal'),IFCLABEL('Real'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2103=IFCPROPERTYSETTEMPLATE('1deyaKZc16vhKBdsMJEG1a',$,'Pset_FurnitureTypeChair','Definition from IAI: A set of specific properties for furniture type chair. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Chair\X2\000A\X0\',$,'IfcFurnitureType',(#2104,#2105,#2106));
+#2104=IFCSIMPLEPROPERTYTEMPLATE('0TQd5OWC97Awy0py8UofTz',$,'SeatingHeight','The value of seating height if the chair height is not adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2105=IFCSIMPLEPROPERTYTEMPLATE('2aNTTA68v6t9A3qxlTgMCA',$,'HighestSeatingHeight','The value of seating height of high level if the chair height is adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2106=IFCSIMPLEPROPERTYTEMPLATE('19Er2ncG9F1fXw5AyukinG',$,'LowestSeatingHeight','The value of seating height of low level if the chair height is adjustable.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2107=IFCPROPERTYSETTEMPLATE('2lM3geJVTFcu_wY8s0RqF2',$,'Pset_FurnitureTypeCommon','Definition from IAI: Common properties for all types of furniture such as chair, desk, table, and file cabinet. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FurnitureCommon',$,'IfcFurnitureType',(#2108,#2109,#2110,#2111,#2112,#2113));
+#2108=IFCSIMPLEPROPERTYTEMPLATE('1rRUfnx1LF3wuMf9NlTu4v',$,'Description','Specific description of this type of furniture.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2109=IFCSIMPLEPROPERTYTEMPLATE('2FCahIek52xvpeExwNPsY5',$,'Style','Description of the furniture style',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2110=IFCSIMPLEPROPERTYTEMPLATE('2QwZdntyD46BdS5vzHcUqd',$,'NominalHeight','The nominal height of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2111=IFCSIMPLEPROPERTYTEMPLATE('3cx9s9p$zAquyn$Fz3FHQV',$,'NominalLength','The nominal length of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2112=IFCSIMPLEPROPERTYTEMPLATE('1Fs6KMl_f09gAa8jqkiKNN',$,'NominalDepth','The nominal depth of the furniture of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2113=IFCSIMPLEPROPERTYTEMPLATE('1t3Z1gi_n8aB_TMXvqC3oj',$,'MainColor','The main color of the furniture of this type',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2114=IFCPROPERTYSETTEMPLATE('33q67xmiXClO4_FfwSA7i_',$,'Pset_FurnitureTypeDesk','Definition from IAI: A set of specific properties for furniture type desk. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Desk\X2\000A\X0\',$,'IfcFurnitureType',(#2115));
+#2115=IFCSIMPLEPROPERTYTEMPLATE('2Syt4bk5D6WPuiSPDLjttZ',$,'WorksurfaceArea','The value of the work surface area of the desk.',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#2116=IFCPROPERTYSETTEMPLATE('16eeldrXT0JOYOXbQpWDqH',$,'Pset_FurnitureTypeFileCabinet','Definition from IAI: A set of specific properties for furniture type file cabinet HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FileCabinet\X2\000A\X0\',$,'IfcFurnitureType',(#2117));
+#2117=IFCSIMPLEPROPERTYTEMPLATE('1G3mxHK011hvrLO3uBzCzN',$,'WithLock','Indicates whether the file cabinet is lockable (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2118=IFCPROPERTYSETTEMPLATE('1R5LrPTv500gfzqrSAZSUV',$,'Pset_FurnitureTypeTable','A set of specific properties for furniture type table. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Table\X2\000A\X0\',$,'IfcFurnitureType',(#2119,#2120));
+#2119=IFCSIMPLEPROPERTYTEMPLATE('1AKzjrXTHD1ebEhVYwC5vS',$,'WorksurfaceArea','The value of the work surface area of the desk..',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#2120=IFCSIMPLEPROPERTYTEMPLATE('1X8S0NyZD2FPoGVeoFg5BC',$,'NumberOfChairs','Maximum number of chairs that can fit with the table for normal use.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2121=IFCPROPERTYSETTEMPLATE('0adTdhptj15Qy5tiqpt5P6',$,'Pset_ManufacturerOccurrence','Definition from IAI: Defines properties of individual instances of manufactured products that may be given by the manufacturer.',$,'IfcElement',(#2122,#2123,#2124,#2125));
+#2122=IFCSIMPLEPROPERTYTEMPLATE('3Oay6JvYr3tB02BTp9OgLT',$,'AcquisitionDate','The date that the manufactured item was purchased.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2123=IFCSIMPLEPROPERTYTEMPLATE('0P4YyDwyv959i$GK4OsIWu',$,'BarCode','The identity of the bar code given to an occurrence of the product',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2124=IFCSIMPLEPROPERTYTEMPLATE('2XOIvbzTTBuweIsOLdAZyX',$,'SerialNumber','The serial number assigned to an occurrence of a product',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2125=IFCSIMPLEPROPERTYTEMPLATE('0ltkJHPJr77QvExGFteGaE',$,'BatchReference','The identity of the batch reference from which an occurrence of a product is taken.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2126=IFCPROPERTYSETTEMPLATE('2FTxVItr97G9vIrFiAqy$F',$,'Pset_ManufacturerTypeInformation','Definition from IAI: Defines characteristics of manufactured products that may be given by the manufacturer. Note that the term ''manufactured'' may also be used to refer to products that are supplied and identified by the supplier or that are assembled off site by a third party provider. \X2\000A\X0\This property set replaces the entity IfcManufacturerInformation from previous IFC releases.',$,'IfcElement',(#2127,#2128,#2129,#2130,#2131));
+#2127=IFCSIMPLEPROPERTYTEMPLATE('0hYtH2QjzBC8Epe4MZoNao',$,'ArticleNumber','Article number or reference that may be applied to a product according to a standard scheme for article number definition (e.g. UN, EAN)',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2128=IFCSIMPLEPROPERTYTEMPLATE('0ZZfj1Cvr17ORLzefgvXoj',$,'ModelReference','The name of the manufactured item as used by the manufacturer.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2129=IFCSIMPLEPROPERTYTEMPLATE('0ML$Y9azr5$OdvwDDJdjik',$,'ModelLabel','The model number and/or unit designator assigned by the manufacturer of the manufactured item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2130=IFCSIMPLEPROPERTYTEMPLATE('3G6ssddvnAIQjb54ZJqDhj',$,'Manufacturer','The organization that manufactured and/or assembled the item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2131=IFCSIMPLEPROPERTYTEMPLATE('2fQqdoJhn1gA5KOf69EaXp',$,'ProductionYear','The year of production of the manufactured item.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2132=IFCPROPERTYSETTEMPLATE('2b1eQcRbL4XejHoN8xfj3D',$,'Pset_PropertyAgreement','Definition from IAI: A property agreement is an agreement that enables the occupation of a property for a period of time.\X2\000A000A\X0\The objective is to capture the information within an agreement that is relevant to a facilities manager. Design and construction information associated with the property is not considered. A property agreement may be applied to an instance of IfcSpatialStructureElement including to compositions defined through the IfcSpatialStructureElement.Element.CompositionEnum.\X2\000A000A\X0\Note that the associated actors are captured by the IfcOccupant class.\X2\000A\X0\',$,'IfcSpatialStructureElement',(#2133,#2135,#2136,#2137,#2138,#2139,#2140,#2141,#2142,#2143,#2144,#2145));
+#2133=IFCSIMPLEPROPERTYTEMPLATE('2MSMGDzRf2VQoozRLY7bwQ',$,'AgreementType','Identifies the predefined types of property agreement from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2134,$,$,$,.READWRITE.);
+#2134=IFCPROPERTYENUMERATION('PEnum_PropertyAgreementType',(IFCLABEL('Assignment'),IFCLABEL('Lease'),IFCLABEL('Tenant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2135=IFCSIMPLEPROPERTYTEMPLATE('2B6tkBhb52IOb_rINAkXoQ',$,'Identifier','The identifier assigned to the agreement for the purposes of tracking.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2136=IFCSIMPLEPROPERTYTEMPLATE('2$ppnDfov54R30wrSVfMT3',$,'Version','The version number of the agreement that is identified',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2137=IFCSIMPLEPROPERTYTEMPLATE('0H60AYx7LElxPYw18SL2Te',$,'VersionDate','The date on which the version of the agreement became applicable',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2138=IFCSIMPLEPROPERTYTEMPLATE('3Adn8MmOzBbA8B3gwV7O5r',$,'PropertyName','Addressing details of the property as stated within the agreement',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2139=IFCSIMPLEPROPERTYTEMPLATE('1HCaRBx053guOElZcMSn8S',$,'CommencementDate','Date on which the agreement commences',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2140=IFCSIMPLEPROPERTYTEMPLATE('1wNZ$IOOXEcu_0$RJgMyOF',$,'TerminationDate','Date on which the agreement terminates',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2141=IFCSIMPLEPROPERTYTEMPLATE('0KsgaHAUr0GuswYzINkLqZ',$,'Duration','The period of time for the lease. Note that values should be given in year/day/month and not in hour/minute/second.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#2142=IFCSIMPLEPROPERTYTEMPLATE('0oXwetPKL25QIV5gPJLJd7',$,'Options','A statement of the options available in the agreement',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2143=IFCSIMPLEPROPERTYTEMPLATE('3QNzaht99CXAEgnA4R90_h',$,'ConditionCommencement','Condition of property provided on commencement of the agreement e.g. cold shell, warm lit shell, broom clean, turn-key',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2144=IFCSIMPLEPROPERTYTEMPLATE('2qaDoNJpb5$fvj2yCTRUuu',$,'Restrictions','Restrictions that may be placed by a competent authority',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2145=IFCSIMPLEPROPERTYTEMPLATE('2wftJxbGHCYO_DEAJ9_bkm',$,'ConditionTermination','Condition of property required on termination of the agreement e.g. cold shell, warm lit shell, broom clean, turn-key',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2146=IFCPROPERTYSETTEMPLATE('0ikB1Li1X5VOmr97IsEhpk',$,'Pset_Reliability','Definition from IAI: Indication of the expected reliability of a product\X2\000A\X0\',$,'IfcProduct',(#2147));
+#2147=IFCSIMPLEPROPERTYTEMPLATE('1u3jf3x9f3zgD0cnrY03AC',$,'MeanTimeBetweenFailure','The average time duration between instances of failure of a product.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#2148=IFCPROPERTYSETTEMPLATE('1G7uu84J1DMhGgelv4XKq3',$,'Pset_Risk','Definition from IAI: An indication of exposure to mischance, peril, menace, hazard or loss. \X2\000A000A\X0\HISTORY: Extended in IFC2x3\X2\000A000A\X0\There are various types of risk that may be encountered and there may be several instances of Pset_Risk associated in an instance of an IfcObject (either a physical object, a grouping of physical objects such as an asset or a process).\X2\000A\X0\Specification of this property set incorporates the values of the Incom risk analysis matrix (satisfying AS/NZS 4360) together with additional identified requirements.\X2\000A\X0\',$,'IfcObject',(#2149,#2151,#2152,#2153,#2154,#2155,#2157,#2159,#2161,#2163,#2164));
+#2149=IFCSIMPLEPROPERTYTEMPLATE('1VPQE5GAX9BgG9gFNoNEEC',$,'RiskType','Identifies the predefined types of risk from which the type required may be set.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2150,$,$,$,.READWRITE.);
+#2150=IFCPROPERTYENUMERATION('PEnum_RiskType',(IFCLABEL('Business'),IFCLABEL('Hazard'),IFCLABEL('HealthAndSafety'),IFCLABEL('Insurance'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2151=IFCSIMPLEPROPERTYTEMPLATE('0dTgzthhLArvmkA4Exicsi',$,'NatureOfRisk','An indication of the generic nature of the risk that might be encountered. \X2\000A000A\X0\NOTE: It is anticipated that there will be a local agreement that constrains the values that might be assigned to this property. An example might be ''Fall'' or ''Fall of grille unit'' causing injury and damage to person and property',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2152=IFCSIMPLEPROPERTYTEMPLATE('3yuJTX1Gb9DgX5afDfqbB3',$,'SubNatureOfRisk1','A first subsidiary value that might be assigned to designate a more specific type of risk.\X2\000A000A\X0\NOTE: Nature of risk may be identified in various ways depending upon the place where risk assessment takes place and according to local agreement. This property set allows for a generic nature of risk and up to two subsidiary natures. An example might be ''causing injury and damage''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2153=IFCSIMPLEPROPERTYTEMPLATE('3e4GrWx35CEgrISVVZK95s',$,'SubNatureOfRisk2','A second subsidiary value that might be assigned to designate a more specific type of risk. An example might be ''o person and property''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2154=IFCSIMPLEPROPERTYTEMPLATE('1cCP36Uhb0kuti$fP4RYyA',$,'RiskCause','A value that may be assigned to capture the cause or trigger for the risk. An example might be ''poor fixing''',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2155=IFCSIMPLEPROPERTYTEMPLATE('0FZ3YOFaT9$wE1Cl0ytPQn',$,'AssessmentOfRisk','Likelihood of risk event occurring.\X2\000A000A\X0\Note that assessment of risk may frequently be associated with the physical location of the object for which the risk is assessed.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2156,$,$,$,.READWRITE.);
+#2156=IFCPROPERTYENUMERATION('PEnum_RiskAssessment',(IFCLABEL('AlmostCertain'),IFCLABEL('VeryLikely'),IFCLABEL('Likely'),IFCLABEL('VeryPossible'),IFCLABEL('Possible'),IFCLABEL('SomewhatPossible'),IFCLABEL('Unlikely'),IFCLABEL('VeryUnlikely'),IFCLABEL('Rare'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset\X2\000A\X0\')),$);
+#2157=IFCSIMPLEPROPERTYTEMPLATE('1BiQiO5PTBieL1UoMhNwA7',$,'RiskConsequence','Indicates the level of severity of the consequences that the risk would have in case it happens',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2158,$,$,$,.READWRITE.);
+#2158=IFCPROPERTYENUMERATION('PEnum_RiskConsequence',(IFCLABEL('Catastrophic'),IFCLABEL('Severe'),IFCLABEL('Major'),IFCLABEL('Considerable'),IFCLABEL('Moderate'),IFCLABEL('Some'),IFCLABEL('Minor'),IFCLABEL('VeryLow'),IFCLABEL('Insignificant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2159=IFCSIMPLEPROPERTYTEMPLATE('275RCAbVXB7f12zJwS3xdZ',$,'RiskRating','A general rating of the risk that may be determined from a combination of the risk assessment and risk consequence',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2160,$,$,$,.READWRITE.);
+#2160=IFCPROPERTYENUMERATION('PEnum_RiskRating',(IFCLABEL('Critical'),IFCLABEL('VeryHigh'),IFCLABEL('High'),IFCLABEL('Considerable'),IFCLABEL('Moderate'),IFCLABEL('Some'),IFCLABEL('Low'),IFCLABEL('VeryLow'),IFCLABEL('Insignificant'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2161=IFCSIMPLEPROPERTYTEMPLATE('3W50ioh5H3Sxvi2ul7tk27',$,'RiskOwner','A determination of who is the owner of the risk by reference to principal roles of organizations within a project. Determination of the specific organization should be by reference to instances of IfcActorRole assigned to instances of IfcOrganization (if assigned).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2162,$,$,$,.READWRITE.);
+#2162=IFCPROPERTYENUMERATION('PEnum_RiskOwner',(IFCLABEL('Designer'),IFCLABEL('Specifier'),IFCLABEL('Constructor'),IFCLABEL('Installer'),IFCLABEL('Maintainer'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2163=IFCSIMPLEPROPERTYTEMPLATE('0ZQOj8sp5EBwBabVNPes7q',$,'AffectsSurroundings','Indicates wether the risk affects only to the person assigned to that task (FALSE) or if it can also affect to the people in the surroundings (TRUE).\X2\000A000A\X0\For example, the process of painting would affect all the people in the vicinity of the process ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2164=IFCSIMPLEPROPERTYTEMPLATE('3LiHy7Gob0huyuciD3gyZV',$,'PreventiveMeassures','Identifies preventive measures to be taken to mitigate risk',.P_LISTVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2165=IFCPROPERTYSETTEMPLATE('3CY40ULqz1Sefq$E00VjKU',$,'Pset_SystemFurnitureElementTypeCommon','Definition from IAI: Common properties for all systems furniture (I.e. modular furniture) element types (e.g. vertical panels, work surfaces, and storage). HISTORY: First issued in IFC Release R1.5. Renamed from Pset_FurnitureElementCommon',$,'IfcSystemFurnitureElementType',(#2166,#2167,#2168,#2169,#2170));
+#2166=IFCSIMPLEPROPERTYTEMPLATE('2EI_kKs1L9zwBvYOGiYyot',$,'IsUsed','Indicates whether the element is being used in a workstation (= TRUE) or not.(= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2167=IFCSIMPLEPROPERTYTEMPLATE('2pGoNqxVLEV9nRoKvQUoAc',$,'GroupCode','e.g. panels, worksurfaces, storage, etc.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2168=IFCSIMPLEPROPERTYTEMPLATE('2XdoVYfFX0Wv8HRIiMSb_W',$,'NominalWidth','The nominal width of the system furniture elements of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2169=IFCSIMPLEPROPERTYTEMPLATE('1fPqMNG_95luPC82Lh5Ney',$,'NominalHeight','The nominal height of the system furniture elements of this type. The size information is provided in addition to the shape representation and the geometric parameters used within. In cases of inconsistency between the geometric parameters and the size properties, provided in the attached property set, the geometric parameters take precedence.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2170=IFCSIMPLEPROPERTYTEMPLATE('3sPyyUBy14M89x3HFmZJwN',$,'Finishing','The finishing applied to system furniture elements of this type e.g. walnut, fabric.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2171=IFCPROPERTYSETTEMPLATE('07CO3UkC53axSh1QaDCFXi',$,'Pset_SystemFurnitureElementTypePanel','Definition from IAI: A set of specific properties for vertical panels that assembly workstations.. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Panel',$,'IfcSystemFurnitureElementType',(#2172,#2173,#2175));
+#2172=IFCSIMPLEPROPERTYTEMPLATE('0wpzAQpBnBe98W9OOZBJpM',$,'HasOpening','indicates whether the panel has an opening (= TRUE) or not (= FALSE).',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2173=IFCSIMPLEPROPERTYTEMPLATE('2TBa417K98HgStJZ7J8Ug8',$,'FurniturePanelType','Available panel types from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2174,$,$,$,.READWRITE.);
+#2174=IFCPROPERTYENUMERATION('PEnum_FurniturePanelType',(IFCLABEL('Acoustical'),IFCLABEL('Glazed'),IFCLABEL('Horz_Seg'),IFCLABEL('Monolithic'),IFCLABEL('Open'),IFCLABEL('Ends'),IFCLABEL('Door'),IFCLABEL('Screen'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2175=IFCSIMPLEPROPERTYTEMPLATE('2$c1UJAl17KQigFpsIqA2p',$,'NominalThickness','The nominal thickness of the panel',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2176=IFCPROPERTYSETTEMPLATE('3qPTr51Tn2Eejxpv7X994b',$,'Pset_SystemFurnitureElementTypeWorkSurface','Definition from IAI: A set of specific properties for work surfaces used in workstations. HISTORY: First issued in IFC Release R1.5. Renamed from Pset_Worksurface',$,'IfcSystemFurnitureElementType',(#2177,#2178,#2180,#2181,#2182));
+#2177=IFCSIMPLEPROPERTYTEMPLATE('0Zi3OxjwX9rRJ3YOjR2KT1',$,'UsePurpose','The principal purpose for which the work surface is intended to be used e.g. writing/reading, computer, meeting, printer, reference files, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2178=IFCSIMPLEPROPERTYTEMPLATE('1wPdMSzPPEnR81mfoIpmac',$,'SupportType','Available support types from which that required may be selected.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2179,$,$,$,.READWRITE.);
+#2179=IFCPROPERTYENUMERATION('PEnum_FurniturePanelType',(IFCLABEL('Freestanding'),IFCLABEL('Supported'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2180=IFCSIMPLEPROPERTYTEMPLATE('1HZ54nfGX0u8pJeH0s68Em',$,'HangingHeight','The hanging height of the worksurface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2181=IFCSIMPLEPROPERTYTEMPLATE('1RyBIUFH9DYRVzU0mak9CT',$,'NominalThickness','The nominal thickness of the work surface.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2182=IFCSIMPLEPROPERTYTEMPLATE('1jDLXiIK9ElRMUnBBTRtr3',$,'ShapeDescription','A description of the shape of the work surface e.g. corner square, rectangle, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2183=IFCPROPERTYSETTEMPLATE('18t1dE$rrCS81kno$fW$Dn',$,'Pset_Warranty','Definition from IAI: An assurance given by the seller or provider of an artefact that the artefact is without defects and will operate as described for a defined period of time without failure and that if a defect does arise during that time, that it will be corrected by the seller or provider.\X2\000A\X0\',$,'IFCKERNEL/IfcProduct,IFCPRODUCTEXTENSION/IfcSystem',(#2184,#2185,#2186,#2187,#2188,#2189,#2190,#2191));
+#2184=IFCSIMPLEPROPERTYTEMPLATE('3ypobcbXzDRw5sljrqVEox',$,'WarrantyIdentifier','The identifier assigned to a warranty.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2185=IFCSIMPLEPROPERTYTEMPLATE('2GO11QbSzEPudJwEP5Ed_O',$,'WarrantyStartDate','The date on which the warranty commences',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2186=IFCSIMPLEPROPERTYTEMPLATE('0_JIsw4pH8WgNov740szf4',$,'WarrantyEndDate','The date on which the warranty expires.',.P_REFERENCEVALUE.,'IfcCalendarDate',$,$,$,$,$,.READWRITE.);
+#2187=IFCSIMPLEPROPERTYTEMPLATE('2Gni_0tln61PkLoMlrptPZ',$,'IsExtendedWarranty','Indication of whether this is an extended warranty whose duration is greater than that normally assigned to an artefact (=TRUE) or not (= FALSE)',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2188=IFCSIMPLEPROPERTYTEMPLATE('0ploiuvBb44um8cE3Q$RP9',$,'WarrantyPeriod','The time duration during which a manufacturer or supplier guarantees or warrants the performance of an artefact.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#2189=IFCSIMPLEPROPERTYTEMPLATE('29DMmbsAPFrAjNE$hxY6yz',$,'PointOfContact','The organization that should be contacted for action under the terms of the warranty. Note that the role of the organization (manufacturer, supplier, installer etc.) is determined by the IfcActorRole attribute of IfcOrganization.',.P_REFERENCEVALUE.,'IfcOrganization',$,$,$,$,$,.READWRITE.);
+#2190=IFCSIMPLEPROPERTYTEMPLATE('0S2gPMuF979gM8urJo6h09',$,'WarrantyContent','The content of the warranty',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2191=IFCSIMPLEPROPERTYTEMPLATE('0b7$CWSm9Cxg7bOiYAcq$r',$,'Exclusions','Items, conditions or actions that may be excluded from the warranty or that may cause the warranty to become void.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2192=IFCPROPERTYSETTEMPLATE('2PZZtRXYXEofjDVh1oyvkr',$,'Pset_ProjectOrderChangeOrder','Definition from IAI: A change order is an instruction to make a change to a product or work being undertake. Note that the change order status is defined in the same way as a work order status since a change order implies a work requirement.\X2\000A\X0\',$,'IfcProjectOrder',(#2193,#2194,#2195));
+#2193=IFCSIMPLEPROPERTYTEMPLATE('2LG5q$iiX929VLUtBnP4D2',$,'ChangeDescription','A general description of the change.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2194=IFCSIMPLEPROPERTYTEMPLATE('1EH9RG9Cj5M91rdSYgVl4m',$,'ReasonForChange','A description of the problem for why a change is needed.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2195=IFCSIMPLEPROPERTYTEMPLATE('2Nn9SO35fDKfLvobcCG5Hg',$,'BudgetSource','The budget source requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2196=IFCPROPERTYSETTEMPLATE('3FZb3z1Nr7rRLDqFLvmQIS',$,'Pset_ProjectOrderMaintenanceWorkOrder','Definition from IAI: A MaintenanceWorkOrder is a detailed description of maintenance work that is to be performed. Note that the Scheduled Frequency property of the maintenance work order is used when the order is required as an instance of a scheduled work order.',$,'IfcProjectOrder',(#2197,#2198,#2199,#2200,#2201,#2202,#2203,#2205,#2207,#2209));
+#2197=IFCSIMPLEPROPERTYTEMPLATE('1BWHJcVw18yv9rJbX_bxUY',$,'ProductDescription','A textual description of the products that require the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2198=IFCSIMPLEPROPERTYTEMPLATE('0HW0nK7tHAUg2PF7MHZj2h',$,'ShortJobDescription','Short description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2199=IFCSIMPLEPROPERTYTEMPLATE('3p82TyvPnDZPV36fE2X5So',$,'LongJobDescription','Description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2200=IFCSIMPLEPROPERTYTEMPLATE('2HXZmvvL93fA7FsNKg7bxq',$,'WorkTypeRequested','Work type requested in circumstances where there are categorizations of types of work task. It could be used to identify a remedial task, minor work task, electrical task etc.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2201=IFCSIMPLEPROPERTYTEMPLATE('2fB2aWCBj8bRJkLRdLAjyI',$,'ContractualType','The contractual type of the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2202=IFCSIMPLEPROPERTYTEMPLATE('3tMP9GPUv7YObD8MtYXo$B',$,'IfNotAccomplished','Comments if the job is not accomplished.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2203=IFCSIMPLEPROPERTYTEMPLATE('1jelIrdh54LQvSmWAaTUvA',$,'MaintenaceType','Identifies the predefined types of maintenance that can be done from which the type that generates the maintenance work order may be set where:\X2\000A000A\X0\ConditionBased = generated as a result of the condition of an asset or artefact being less than a determined value.\X2\000A\X0\Corrective = generated as a result of an immediate and urgent need for maintenance action.\X2\000A\X0\PlannedCorrective = generated as a result of immediate corrective action being needed but with sufficient time available for the work order to be included in maintenance planning.\X2\000A\X0\Scheduled = generated as a result of a fixed, periodic maintenance requirement.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2204,$,$,$,.READWRITE.);
+#2204=IFCPROPERTYENUMERATION('PEnum_MaintenanceType',(IFCLABEL('ConditionBased'),IFCLABEL('Corrective'),IFCLABEL('PlannedCorrective'),IFCLABEL('Scheduled'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2205=IFCSIMPLEPROPERTYTEMPLATE('0t$YdfvS10X8Gqly$Efwtu',$,'FaultPriorityType','Identifies the predefined types of priority that can be assigned from which the type may be set where:\X2\000A000A\X0\High = action is required urgently.\X2\000A\X0\Medium = action can occur within a reasonable period of time.\X2\000A\X0\Low = action can occur when convenient.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2206,$,$,$,.READWRITE.);
+#2206=IFCPROPERTYENUMERATION('PEnum_PriorityType',(IFCLABEL('High'),IFCLABEL('Medium'),IFCLABEL('Low'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2207=IFCSIMPLEPROPERTYTEMPLATE('1IvljmOfz5bPhcZsfiF6fJ',$,'LocationPriorityType','Identifies the predefined types of priority that can be assigned from which the type may be set where:\X2\000A000A\X0\High = action is required urgently.\X2\000A\X0\Medium = action can occur within a reasonable period of time.\X2\000A\X0\Low = action can occur when convenient.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2208,$,$,$,.READWRITE.);
+#2208=IFCPROPERTYENUMERATION('PEnum_PriorityType',(IFCLABEL('High'),IFCLABEL('Medium'),IFCLABEL('Low'),IFCLABEL('Other'),IFCLABEL('NotKnown'),IFCLABEL('Unset')),$);
+#2209=IFCSIMPLEPROPERTYTEMPLATE('0D7$3Mbin4muToVnt7A5xV',$,'ScheduledFrequency','The period of time between expected instantiations of a work order that may have been predefined.',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#2210=IFCPROPERTYSETTEMPLATE('3AAeqAOAL7igyZmy4MZav4',$,'Pset_ProjectOrderMoveOrder','Definition from IAI: Defines the requirements for move orders. Note that the move order status is defined in the same way as a work order status since a move order implies a work requirement.\X2\000A\X0\',$,'IfcProjectOrder',(#2211,#2212));
+#2211=IFCSIMPLEPROPERTYTEMPLATE('2QFasar0v1PA5eBLonClD7',$,'MoveDescription','A textual description of the move required.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2212=IFCSIMPLEPROPERTYTEMPLATE('15W1BcIeXBqvb63EJeHKfe',$,'SpecialInstructions','Special instructions that affect the move.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2213=IFCPROPERTYSETTEMPLATE('3D6rO$Aa98cRYkhw201Ytr',$,'Pset_ProjectOrderPurchaseOrder','Definition from IAI: Defines the requirements for purchase orders in a project.\X2\000A\X0\',$,'IfcProjectOrder',(#2214,#2215));
+#2214=IFCSIMPLEPROPERTYTEMPLATE('0QaQ_NxHH72PpAsm6DSvlg',$,'IsFOB','Indication of whether contents of the purchase order are delivered ''Free on Board'' (= True) or not (= False). ',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
+#2215=IFCSIMPLEPROPERTYTEMPLATE('0tQhAhVsn8DR5k8ed6QPrh',$,'ShipMethod','Method of shipping that will be used for goods or services. ',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2216=IFCPROPERTYSETTEMPLATE('3BS7x4UZ92rhMC7s4h60ah',$,'Pset_ProjectOrderWorkOrder','Definition from IAI: Defines the requirements for purchase orders in a project.\X2\000A\X0\',$,'IfcProjectOrder',(#2217,#2218,#2219,#2220,#2221,#2222));
+#2217=IFCSIMPLEPROPERTYTEMPLATE('2Wk_L2YNbEZQzNbQIVA$6Y',$,'ProductDescription','A textual description of the products that require the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2218=IFCSIMPLEPROPERTYTEMPLATE('19Q7Zohqv8U8liP5hvyY74',$,'ShortJobDescription','Short description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2219=IFCSIMPLEPROPERTYTEMPLATE('1gogMWsrH0nhHQbH0p6Y2H',$,'LongJobDescription','Description of the job requested.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2220=IFCSIMPLEPROPERTYTEMPLATE('3iPnsyFjb5kxqVjz$6RA_x',$,'WorkTypeRequested','Work type requested in circumstances where there are categorizations of types of work task. It could be used to identify a remedial task, minor work task, electrical task etc.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2221=IFCSIMPLEPROPERTYTEMPLATE('3Cv9KI5P15HRMeLs7YJ6hN',$,'ContractualType','The contractual type of the work.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2222=IFCSIMPLEPROPERTYTEMPLATE('3Fc0rs6yTBoOFuJQ7ch_3f',$,'IfNotAccomplished','Comments if the job is not accomplished.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2223=IFCPROPERTYSETTEMPLATE('2X3vBUebD2XOzbO5kEf3G7',$,'Pset_ConcreteElementGeneral','Definition from IAI: General properties common to different types of concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2224,#2225,#2226,#2227,#2228,#2229,#2230,#2231,#2232,#2233));
+#2224=IFCSIMPLEPROPERTYTEMPLATE('1Lso1DMgv9WfakraDP7RFk',$,'StructuralClass','The structural class defined for the concrete structure (e.g. ''1'').',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2225=IFCSIMPLEPROPERTYTEMPLATE('13lkg01s14fOksc4AkNR1c',$,'EnvironmentalClass','The environmental class for the concrete structure (e.g. ''Y1'')',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2226=IFCSIMPLEPROPERTYTEMPLATE('3JCl4SH3z2sAQnc3chAN$Y',$,'FireRating','Fire rating given according to the national fire safety classification',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2227=IFCSIMPLEPROPERTYTEMPLATE('2lfIqy8W94EhEsntoG4DmP',$,'ServiceLife','Expected service life (usually measured in years)',.P_SINGLEVALUE.,'IfcTimeMeasure',$,$,$,$,$,.READWRITE.);
+#2228=IFCSIMPLEPROPERTYTEMPLATE('2qe5DUdwH2lRQKX240pdAh',$,'LifeCycleEnvironmentalLoad','Description of the life-cycle environmental load',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2229=IFCSIMPLEPROPERTYTEMPLATE('2aEoVVbU1DG92A0X7qoqfy',$,'DimensionalAccuracyClass','Classification designation of the dimensional accuracy requirement according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2230=IFCSIMPLEPROPERTYTEMPLATE('1KnLnWPOH9qPqxIzFt7YLk',$,'ConstructionToleranceClass','Classification designation of the on-site construction tolerances according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2231=IFCSIMPLEPROPERTYTEMPLATE('174rjgYQP9_BZPFoKrhv9Q',$,'ConstructionType','Designator for whether the concrete element is constructed on site or prefabricated. Allowed values are: ''Insitu'' vs ''Precast''',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2232=IFCSIMPLEPROPERTYTEMPLATE('3xnZZmmnP0ehm2exVvimkT',$,'ConcreteCoverAtMainBars','The protective concrete cover at the main reinforcing bars according to local building regulations.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2233=IFCSIMPLEPROPERTYTEMPLATE('0lQB$ikHP89OiHkdQ0M8Nc',$,'ConcreteCoverAtLinks','The protective concrete cover at the reinforcement links according to local building regulations.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2234=IFCPROPERTYSETTEMPLATE('3JmZPXJDX4$gPsniMC$oIw',$,'Pset_ConcreteElementQuantityGeneral','Definition from IAI: Bill-of-Quantity properties common to different types of precast concrete elements. The Pset is used to express the total bulk quantities per element. The quantities may include the concrete, reinforcement, and different kinds of accessories. The Pset can be used by a number of subtypes of IfcBuildingElement. Note: Bulk quantities for parts used for surface finish, tiles, bricks, etc. are included as area quantities in Pset_ConcreteElementSurfaceFinishQuantityGeneral.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2235,#2236,#2241));
+#2235=IFCSIMPLEPROPERTYTEMPLATE('2Aai$r251E6wgNxSArz9zb',$,'TotalConcreteQuantity','The total bulk quantity of concrete used for the precast concrete element expressed as the volume of concrete in cubic meter (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#2236=IFCCOMPLEXPROPERTYTEMPLATE('0s4wbkOUj7yRXgZi6puNeY',$,'TotalRebarQuantity','The total bulk quantity of rebar per size used for the precast concrete element expressed as the mass measure of rebar in kg. Note: several complex properties of this type, one for each rebar size, may be attached to the Pset.','CP_RebarQuantity',.P_COMPLEX.,(#2237,#2238,#2239,#2240));
+#2237=IFCSIMPLEPROPERTYTEMPLATE('3YuyBNuZT8Lh0ZP2R47iSw',$,'RebarSteelGrade','The rebar steel grade (e.g. ''A500HW'') for which the total quantity is specified. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2238=IFCSIMPLEPROPERTYTEMPLATE('2Vwt58mIrCifOtyRZ6lO$W',$,'RebarSteelGradeSpecificationReference','Reference to steel grade standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2239=IFCSIMPLEPROPERTYTEMPLATE('3Ljz8Lm2X0zukqvfh$$PZ2',$,'RebarDiameter','The rebar size (nominal diameter) for which the total quantity is specified. ',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2240=IFCSIMPLEPROPERTYTEMPLATE('3zu$qqZrn1nfQxdTB$I7sr',$,'RebarQuantity','The total quantity of rebar for the specified bar size expressed as the mass measure of rebar in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#2241=IFCCOMPLEXPROPERTYTEMPLATE('2wYmKACZXBMAjKyct4D5vD',$,'TotalAccessoryQuantity','The total bulk quantity of accessories per type of accessory for the precast concrete element. The quantity may be expressed as number of items or mass measure in kg or both. Note: several complex properties of this type, one for each accessory type, may be attached to the Pset.','CP_AccessoryQuantity',.P_COMPLEX.,(#2242,#2243,#2244,#2245,#2246,#2247,#2248,#2249,#2250));
+#2242=IFCSIMPLEPROPERTYTEMPLATE('27yGWmFO9Bt9GE_BQS$6jY',$,'AccessoryType','Type designation of the accessory according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2243=IFCSIMPLEPROPERTYTEMPLATE('3W53NsRsvCihiIAEGveZ6w',$,'AccessoryGroupCode',' Classification code of the accessory type group according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2244=IFCSIMPLEPROPERTYTEMPLATE('0HtbIbdgLCGRcyZAtUxG8e',$,'AccessoryTypeSpecificationReference',' Reference to the accessory standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2245=IFCSIMPLEPROPERTYTEMPLATE('1H2IlV1eH8JPwmwd_nWJDo',$,'AccessoryDescription',' Short textual description of the accessory. ',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2246=IFCSIMPLEPROPERTYTEMPLATE('2XlpDhOLX61RRCYfw04gjh',$,'AccessoryMaterial',' Material designation according to local classification standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2247=IFCSIMPLEPROPERTYTEMPLATE('0SBTwgQIrFgg5Usso8cRT$',$,'AccessoryMaterialSpecificationReference',' Reference to the accessory material standard specification. ',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2248=IFCSIMPLEPROPERTYTEMPLATE('0m4J73a8rAzfT$T5Ul47OO',$,'AccessorySize',' Size designation according to local classification standards or manufacturer practices.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2249=IFCSIMPLEPROPERTYTEMPLATE('1PSAQ6r1b3NvkCa4PXPA3s',$,'AccessoryQuantityByNumberOfItems',' The total quantity of accessories of the specified accessory type expressed as number of items.',.P_SINGLEVALUE.,'IfcCountMeasure',$,$,$,$,$,.READWRITE.);
+#2250=IFCSIMPLEPROPERTYTEMPLATE('2khzWYPCn6OAEj5bOPMYHp',$,'AccessoryQuantityByWeight',' The total quantity of accessories of the specified accessory type expressed as mass measure in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#2251=IFCPROPERTYSETTEMPLATE('3_EeqBo8z5lPknE$5qDxNJ',$,'Pset_ConcreteElementSurfaceFinishQuantityGeneral','Definition from IAI: Surface finish related properties common to different types of concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement, like IfcBeam, IfcColumn, IfcWall, etc. If a precast concrete element is a sandwich wall panel each structural layer or shell represented by an IfcBuildingElementPart may be attached to a separate Pset.The surface finishes are expressed as area quantities only for each surface finish type. The exact details (location, area shape, overlaps, tile joints, patterns, etc.) of the surface finishes are expressed in external documents using the IfcDocumentReference mechanism. Each of the defined properties are instantiated as needed, and multiple instantiations of the same property for each different surface classification are possible.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2252,#2256,#2260));
+#2252=IFCCOMPLEXPROPERTYTEMPLATE('0RQ4UAMiDD7gp8m7Vorw6s',$,'FormSurface','Formwork surface area quantity. Several complex properties of this type may be attached to this Pset, one for each formwork subsurface with different properties.','CP_FormSurface',.P_COMPLEX.,(#2253,#2254,#2255));
+#2253=IFCSIMPLEPROPERTYTEMPLATE('0N716_fsn8_As_GjPS7LSK',$,'FormSurfaceClass','Classification designation for the formwork surface according to local standards, e.g. E, 1, 2, or 3.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2254=IFCSIMPLEPROPERTYTEMPLATE('2hXzUa3HH6q8wCWFn3Mouf',$,'FormSurfaceTextureDescription','Textual description of the form surface texture pattern. Used only if the form work includes sub-areas with textures.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2255=IFCSIMPLEPROPERTYTEMPLATE('0ZRrYgTwzEhQMyYOkc5OWa',$,'FormSurfaceArea','The form surface area quantity for which the particular form surface finish and possibly texture type is defined. Usually expressed in square meter (m2).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#2256=IFCCOMPLEXPROPERTYTEMPLATE('0jDTfxbWXAXRd5uBF9dPfB',$,'ExternalSurface','External surface area quantity.Several complex properties of this type may be attached to this Pset, one for each external subsurface with different properties','CP_ExternalSurface',.P_COMPLEX.,(#2257,#2258,#2259));
+#2257=IFCSIMPLEPROPERTYTEMPLATE('1k$TJrLiv6695lVLCrpdwr',$,'ExternalSurfaceType','Type designation for the surface. Typical surface treatments include: hewing, acid treatment, brushing, sand blasting, grinding, sanding, painting, cleansing, parging, roller application, and different kinds of tile cladding, e.g. bricks, brick tiles, clinker and mosaic tiles, etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2258=IFCSIMPLEPROPERTYTEMPLATE('0EX8gfNkX3vP5IHT4YrZGO',$,'ExternalSurfaceClass','Class designation for the surface. This usually depends on what kind of surface type is used and how the classification is expressed in local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2259=IFCSIMPLEPROPERTYTEMPLATE('1dRvp5axn9Cwa6faWsnSf2',$,'ExternalSurfaceArea','The external surface area quantity for which the particular surface finish is defined. Usually expressed in square meter (m2).',.P_SINGLEVALUE.,'IfcAreaMeasure',$,$,$,$,$,.READWRITE.);
+#2260=IFCSIMPLEPROPERTYTEMPLATE('1jjRgsJhzAzgIhR1WEgaIL',$,'SurfaceDescriptionDocReference','Reference to an external document describing the details of the surface of the concrete element, i.e. a drawing or textual document file.',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2261=IFCPROPERTYSETTEMPLATE('3BRJkc_652W9yXqyB1pOyD',$,'Pset_PrecastConcreteElementGeneral','Definition from IAI: Production and manufacturing related properties common to different types of precast concrete elements. The Pset can be used by a number of subtypes of IfcBuildingElement. If the precast concrete element is a sandwich wall panel each structural layer or shell represented by an IfcBuildingElementPart may be attached to a separate Pset of this type, if needed. Some of the properties apply only for specific types of precast concrete elements.',$,'IFCSHAREDBLDGELEMENTS/IfcBeam,IFCSTRUCTURALELEMENTSDOMAIN/IfcBuildingElementPart,IFCPRODUCTEXTENSION/IfcBuildingElementProxy,IFCSHAREDBLDGELEMENTS/IfcColumn,IFCPRODUCTEXTENSION/IfcCovering,IFCSHAREDBLDGELEMENTS/IfcCurtainWall,IFCSHAREDBLDGELEMENTS/IfcDoor,IFCSTRUCTURALELEMENTSDOMAIN/IfcFooting,IFCSHAREDBLDGELEMENTS/IfcMember,IFCSTRUCTURALELEMENTSDOMAIN/IfcPile,IFCSHAREDBLDGELEMENTS/IfcRailing,IFCSHAREDBLDGELEMENTS/IfcRamp,IFCSHAREDBLDGELEMENTS/IfcRampFlight,IFCSHAREDBLDGELEMENTS/IfcRoof,IFCSHAREDBLDGELEMENTS/IfcSlab,IFCSHAREDBLDGELEMENTS/IfcStair,IFCSHAREDBLDGELEMENTS/IfcStairFlight,IFCSHAREDBLDGELEMENTS/IfcWall,IFCSHAREDBLDGELEMENTS/IfcWallStandardCase\X2\000A\X0\',(#2262,#2263,#2264,#2265,#2266,#2267,#2268,#2269,#2270,#2271,#2272,#2273,#2274,#2275,#2276,#2277,#2278,#2279));
+#2262=IFCSIMPLEPROPERTYTEMPLATE('1YxdfLlYXBRRILNMAjGsY3',$,'TypeDesignator','Type designator for the precast concrete element. The content depends on local standards. For instance in Finland it usually a one-letter acronym, e.g. P=Column, K=reinforced concrete beam,etc.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2263=IFCSIMPLEPROPERTYTEMPLATE('1EMyeZW0f6du1iWu8dX8co',$,'ProductionLotId','The manufacturer''s production lot identifier.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2264=IFCSIMPLEPROPERTYTEMPLATE('2PR8XVZM13tB_Y3_Xs_LMT',$,'SerialNumber','The manufacturer''s serial number for the precast concrete element.',.P_SINGLEVALUE.,'IfcIdentifier',$,$,$,$,$,.READWRITE.);
+#2265=IFCSIMPLEPROPERTYTEMPLATE('1oXQNoirjFWxyprhH3Rohn',$,'ElementWeight','The weight of the concrete element. Usually expressed in kg.',.P_SINGLEVALUE.,'IfcMassMeasure',$,$,$,$,$,.READWRITE.);
+#2266=IFCSIMPLEPROPERTYTEMPLATE('1P0WQXUyv4yRvqZZ_wIzSi',$,'ElementGrossVolume','The gross volume of concrete element. Usually expressed in cubic metre (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#2267=IFCSIMPLEPROPERTYTEMPLATE('1FhDJ7vc97LB$anTXp7B3x',$,'ElementNetVolume','The net volume of concrete element. Openings, voids, chamfers, etc. are subtracted from the gross volume. Usually expressed in cubic metre (m3).',.P_SINGLEVALUE.,'IfcVolumeMeasure',$,$,$,$,$,.READWRITE.);
+#2268=IFCSIMPLEPROPERTYTEMPLATE('3enIRONjz6JO7RNu9wO0EF',$,'CornerChamfer','The chamfer in the corners of the precast element. The chamfer is presumed to be equal in both directions.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2269=IFCSIMPLEPROPERTYTEMPLATE('2gHvveW4PFHw3lCijUbQK8',$,'ManufacturingToleranceClass','Classification designation of the manufacturing tolerances according to local standards.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2270=IFCSIMPLEPROPERTYTEMPLATE('0Yst6mZSX7t9qZXK4gxxMj',$,'FormStrippingStrength','The minimum required compressive strength of the concrete at form stripping time.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#2271=IFCSIMPLEPROPERTYTEMPLATE('0RusfBylnBkhKy0SXIJ7AU',$,'LiftingStrength','The minimum required compressive strength of the concrete when the concrete element is lifted.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#2272=IFCSIMPLEPROPERTYTEMPLATE('2bxEUWjGj6PO2DUwlbtP6Y',$,'ReleaseStrength','The minimum required compressive strength of the concrete when the tendon stress is released. This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#2273=IFCSIMPLEPROPERTYTEMPLATE('0KN0VLK4T4tvjVgUt673_P',$,'MinimumAllowableSupportLength','The minimum allowable support length.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2274=IFCSIMPLEPROPERTYTEMPLATE('0kjOAD4sbDtfujfHsB$rB9',$,'InitialTension','The initial stress of the tendon. This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#2275=IFCSIMPLEPROPERTYTEMPLATE('1fDowx9Af4QfGtbv8nMut7',$,'TendonRelaxation','The maximum allowable relaxation of the tendon (usually expressed as %/1000 h).This property applies to prestressed concrete elements only.',.P_SINGLEVALUE.,'IfcPositiveRatioMeasure',$,$,$,$,$,.READWRITE.);
+#2276=IFCSIMPLEPROPERTYTEMPLATE('2QQFK8XgnDmQltz_5sv$CQ',$,'TransportationStrength','The minimum required compressive strength of the concrete required for transportation.',.P_SINGLEVALUE.,'IfcPressureMeasure',$,$,$,$,$,.READWRITE.);
+#2277=IFCSIMPLEPROPERTYTEMPLATE('2_iiNg$dD2xf4WOwQ3IpbY',$,'SupportDuringTransportDescription','Textual description of how the concrete element is supported during transportation',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2278=IFCSIMPLEPROPERTYTEMPLATE('07lNDn$NjApR8Z4KmBY3QN',$,'SupportDuringTransportDocReference','Reference to an external document defining how the concrete element is supported during transportation',.P_REFERENCEVALUE.,'IfcExternalReference',$,$,$,$,$,.READWRITE.);
+#2279=IFCSIMPLEPROPERTYTEMPLATE('2uIYJLyP1F9gUXPErhQztG',$,'HollowCorePlugging','A descriptive label for how the hollow core ends are treated: they may be left open, closed with a plug, or sealed with cast concrete. Values would be, for example: ''Unplugged'', ''Plugged'', ''SealedWithConcrete''. This property applies to hollow core slabs only.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2280=IFCPROPERTYSETTEMPLATE('3dp32yRir9hB0hm3iWYGjB',$,'Pset_ReinforcementBarCountOfIndependentFooting','Definition from IAI: Reinforcement Concrete parameter [ST-2]: The amount number information of reinforcement bar with the independent footing. The X and Y direction are based on the local coordinate system of building storey. The X and Y direction of the reinforcement bar are parallel to the X and Y axis of the IfcBuildingStorey''s local coordinate system, respectively.',$,'IfcFooting',(#2281,#2282,#2283,#2284,#2285,#2286));
+#2281=IFCSIMPLEPROPERTYTEMPLATE('39g9M8ADf1exahsCE4eZ5W',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2282=IFCSIMPLEPROPERTYTEMPLATE('2LyKaPsFvCPw5fbcGOA9_Q',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2283=IFCSIMPLEPROPERTYTEMPLATE('11UjldvZnCrvSKRyvsksd7',$,'XDirectionLowerBarCount','The number of bars with X direction lower bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2284=IFCSIMPLEPROPERTYTEMPLATE('1psGY0w25BqAh1FOZ5Tyt2',$,'YDirectionLowerBarCount','The number of bars with Y direction lower bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2285=IFCSIMPLEPROPERTYTEMPLATE('3oTQ7qG0PC9xyx2S5OEW_z',$,'XDirectionUpperBarCount','The number of bars with X direction upper bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2286=IFCSIMPLEPROPERTYTEMPLATE('0Br1FAuOvANxWnZrkkWtco',$,'YDirectionUpperBarCount','The number of bars with Y direction upper bar.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2287=IFCPROPERTYSETTEMPLATE('26PL_Y1J1C28VVZbistSi$',$,'Pset_ReinforcementBarPitchOfBeam','Definition from IAI: The ptich length information of reinforcement bar with the beam.',$,'IfcBeam',(#2288,#2289,#2290,#2291));
+#2288=IFCSIMPLEPROPERTYTEMPLATE('2RBd0bulrEfx8jGP69xKdm',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2289=IFCSIMPLEPROPERTYTEMPLATE('3HFRk6tdL6aBA5qQBxSN3a',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2290=IFCSIMPLEPROPERTYTEMPLATE('2uiFF$HJXFZA3BTaAIjAe8',$,'StirrupBarPitch','The pitch length of the stirrup bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2291=IFCSIMPLEPROPERTYTEMPLATE('1eW3J0zb1FvAtbkEFzm4X3',$,'SpacingBarPitch','The pitch length of the spacing bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2292=IFCPROPERTYSETTEMPLATE('0BMYxb3mD7eOI_MPy6baUA',$,'Pset_ReinforcementBarPitchOfColumn','Definition from IAI: The pitch length information of reinforcement bar with the column. The X and Y direction are based on the local coordinate system of building storey. The X and Y direction of the reinforcement bar are parallel to the X and Y axis of the IfcBuildingStorey''s local coordinate system, respectively.',$,'IfcColumn',(#2293,#2294,#2295,#2297,#2298,#2299,#2300,#2301));
+#2293=IFCSIMPLEPROPERTYTEMPLATE('2yzST_tKHBawflZHuA2A4u',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2294=IFCSIMPLEPROPERTYTEMPLATE('2msVSvBvn6tuVn8h2TBjES',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2295=IFCSIMPLEPROPERTYTEMPLATE('1Y_V_uI6X1Lwo6gz__K4US',$,'ReinforcementBarType','Defines the type of the reinforcement bar.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2296,$,$,$,.READWRITE.);
+#2296=IFCPROPERTYENUMERATION('PEnum_ReinforcementBarType',(IFCLABEL('RING'),IFCLABEL('SPIRAL'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#2297=IFCSIMPLEPROPERTYTEMPLATE('0WoM_UiED86v4KiC3UYSLy',$,'HoopBarPitch','The pitch length of the hoop bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2298=IFCSIMPLEPROPERTYTEMPLATE('1hDUplAjrE0R9mH8$au3fJ',$,'XDirectionTieHoopBarPitch','The X direction pitch length of the tie hoop.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2299=IFCSIMPLEPROPERTYTEMPLATE('0hAoL2B8zE_QpWDab6MDD6',$,'XDirectionTieHoopCount','The number of bars with X direction tie hoop bars.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2300=IFCSIMPLEPROPERTYTEMPLATE('3F1MJj22P8_8HojRjmfBj0',$,'YDirectionTieHoopBarPitch','The Y direction pitch length of the tie hoop.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2301=IFCSIMPLEPROPERTYTEMPLATE('2oUTmMENbByg4BsUj5PKUe',$,'YDirectionTieHoopCount','The number of bars with Y direction tie hoop bars.',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
+#2302=IFCPROPERTYSETTEMPLATE('2igQk2TXT38eEUJunayZwE',$,'Pset_ReinforcementBarPitchOfContinuousFooting','Definition from IAI: Reinforcement Concrete parameter [ST-2]: The pitch length information of reinforcement bar with the continuous footing.',$,'IfcFooting',(#2303,#2304,#2305,#2306));
+#2303=IFCSIMPLEPROPERTYTEMPLATE('2thNWf$nP1Xw36NI0sgTRl',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2304=IFCSIMPLEPROPERTYTEMPLATE('1aOOcuZpv1wee$GuM4Axmg',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2305=IFCSIMPLEPROPERTYTEMPLATE('0U$SY_odL4MBoJDPTvMWf4',$,'CrossingUpperBarPitch','The pitch length of the crossing upper bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2306=IFCSIMPLEPROPERTYTEMPLATE('19dLYLK0DFhO91tD$geJzJ',$,'CrossingLowerBarPitch','The pitch length of the crossing lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2307=IFCPROPERTYSETTEMPLATE('2Z3TMgawb8uAcnk4XPrphP',$,'Pset_ReinforcementBarPitchOfSlab','Definition from IAI: The pitch length information of reinforcement bar with the slab.',$,'IfcSlab',(#2308,#2309,#2310,#2311,#2312,#2313,#2314,#2315,#2316,#2317,#2318,#2319,#2320,#2321));
+#2308=IFCSIMPLEPROPERTYTEMPLATE('1O2TtFmaLCvvmf2jP2qtvw',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2309=IFCSIMPLEPROPERTYTEMPLATE('3SnvCE5NTFdO18XfG36G45',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2310=IFCSIMPLEPROPERTYTEMPLATE('0PYzflCyf1CvNjGbZhel6g',$,'LongOutsideTopBarPitch','The pitch length of the long outside top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2311=IFCSIMPLEPROPERTYTEMPLATE('2sihxQNvnAoe8PDXNo4X1O',$,'LongInsideCenterTopBarPitch','The pitch length of the long inside center top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2312=IFCSIMPLEPROPERTYTEMPLATE('1Bd2s0NYf9aRoMXQNbXOBh',$,'LongInsideEndTopBarPitch','The pitch length of the long inside end top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2313=IFCSIMPLEPROPERTYTEMPLATE('3luVfCRuT2ghtCwYEGcPmp',$,'ShortOutsideTopBarPitch','The pitch length of the short outside top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2314=IFCSIMPLEPROPERTYTEMPLATE('0Mhpb8_TDBcfK7XSYUhXCx',$,'ShortInsideCenterTopBarPitch','The pitch length of the short inside center top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2315=IFCSIMPLEPROPERTYTEMPLATE('03DgseUILDQPmdlFBYfbxm',$,'ShortInsideEndTopBarPitch','The pitch length of the short inside end top bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2316=IFCSIMPLEPROPERTYTEMPLATE('3eEfLPDAjDlAfc$4CK5OXJ',$,'LongOutsideLowerBarPitch','The pitch length of the long outside lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2317=IFCSIMPLEPROPERTYTEMPLATE('2KZbUur_96GfFNEXno4Bqh',$,'LongInsideCenterLowerBarPitch','The pitch length of the long inside center lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2318=IFCSIMPLEPROPERTYTEMPLATE('2XhzoOhtPDhx5Zd6OTTeA8',$,'LongInsideEndLowerBarPitch','The pitch length of the long inside end lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2319=IFCSIMPLEPROPERTYTEMPLATE('0oK3jZZL5BvhL8WL_piLVh',$,'ShortOutsideLowerBarPitch','The pitch length of the short outside lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2320=IFCSIMPLEPROPERTYTEMPLATE('33AgOsr6TFZuItFq8hBwtr',$,'ShortInsideCenterLowerBarPitch','The pitch length of the short inside center lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2321=IFCSIMPLEPROPERTYTEMPLATE('1XHu$PCGPF2eQD1sHtntFt',$,'ShortInsideEndLowerBarPitch','The pitch length of the short inside end lower bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2322=IFCPROPERTYSETTEMPLATE('2ku6Tbwa5AdQaqwq5dwKzS',$,'Pset_ReinforcementBarPitchOfWall','Definition from IAI: The pitch length information of reinforcement bar with the wall.',$,'IfcWall',(#2323,#2324,#2325,#2327,#2328,#2329));
+#2323=IFCSIMPLEPROPERTYTEMPLATE('3c1Eotwi927PP_MAEQUXjS',$,'Description','Description of the reinforcement.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
+#2324=IFCSIMPLEPROPERTYTEMPLATE('11EihJq1bAz8pH9bppqw01',$,'Reference','A descriptive label for the general reinforcement type.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2325=IFCSIMPLEPROPERTYTEMPLATE('1lj_vnAAXAhBxv8vxHiXt_',$,'BarAllocationType','Defines the type of the reinforcement bar allocation.',.P_ENUMERATEDVALUE.,'IfcLabel',$,#2326,$,$,$,.READWRITE.);
+#2326=IFCPROPERTYENUMERATION('PEnum_ReinforcementBarAllocationType',(IFCLABEL('SINGLE'),IFCLABEL('DOUBLE'),IFCLABEL('ALTERNATE'),IFCLABEL('OTHER'),IFCLABEL('USERDEFINED'),IFCLABEL('NOTDEFINED')),$);
+#2327=IFCSIMPLEPROPERTYTEMPLATE('1BymBc4Q9FrRBTSJtHkKwS',$,'VerticalBarPitch','The pitch length of the vertical bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2328=IFCSIMPLEPROPERTYTEMPLATE('06KxkSxVTFPO$hEqBfTe4S',$,'HorizontalBarPitch','The pitch length of the horizontal bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2329=IFCSIMPLEPROPERTYTEMPLATE('0yhobw41rERwvY7ViStz9q',$,'SpacingBarPitch','The pitch length of the spacing bar.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2330=IFCPROPERTYSETTEMPLATE('2LD2kY$GD71flgnSUpX$ba',$,'Pset_ReinforcingBarBendingsBECCommon','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are defined according to the local Finnish BEC standard with minor adjustements (only bar bending information is included). The bending shape property definitions apply to both reinforcing bars (IfcReinforcingBar) and reinforcing meshes (IfcReinforcingMesh). It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism.',$,'IfcReinforcingBar,IfcReinforcingMesh',(#2331,#2332,#2333,#2334,#2335,#2336,#2337,#2338,#2339,#2340,#2341,#2342,#2343,#2344,#2345,#2346,#2347,#2348,#2349,#2350,#2351));
+#2331=IFCSIMPLEPROPERTYTEMPLATE('23Cl89PHHD3RirGHiuDS$1',$,'BECBarShapeCode','The bending type code for the specific bending shape as defined in the BEC standard. Note: depending on the standardized shape different combinations of following parameters a...e (f...l), TD, u, v, u1, v1, aid_x, and aid_y are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2332=IFCSIMPLEPROPERTYTEMPLATE('2oH548fDz60gdXv5SB_h0$',$,'BECCuttingLength','Usually calculated from the sum of the partial length parameters with corrections for the bendings.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2333=IFCSIMPLEPROPERTYTEMPLATE('1Oaa$9NdHAff_G$8lcx6VQ',$,'BECShapeParameter_a','Bar shape parameter a.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2334=IFCSIMPLEPROPERTYTEMPLATE('0ynl5s6f98DRMIHoVmgytl',$,'BECShapeParameter_b','Bar shape parameter b.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2335=IFCSIMPLEPROPERTYTEMPLATE('0AOgnM0P56tflwqN9C17N1',$,'BECShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2336=IFCSIMPLEPROPERTYTEMPLATE('3e9jsjdcj1gwUuEfMB$Daq',$,'BECShapeParameter_d','Bar shape parameter d.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2337=IFCSIMPLEPROPERTYTEMPLATE('3HemuMsQPBCBvawQHUgrSe',$,'BECShapeParameter_e','Bar shape parameter e.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2338=IFCSIMPLEPROPERTYTEMPLATE('3qKpR6VQL40w20savl5ewI',$,'BECShapeParameter_f','Bar shape parameter f.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2339=IFCSIMPLEPROPERTYTEMPLATE('2VzHAYbXrCGQmgXYj3YM2a',$,'BECShapeParameter_g','Bar shape parameter g.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2340=IFCSIMPLEPROPERTYTEMPLATE('2GtjDgC9zArP$iBA$0sM2v',$,'BECShapeParameter_h','Bar shape parameter h.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2341=IFCSIMPLEPROPERTYTEMPLATE('0alm4KJTP8lxAxNCwYsFc4',$,'BECShapeParameter_i','Bar shape parameter i.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2342=IFCSIMPLEPROPERTYTEMPLATE('19BrmEXab1kuvD3TnOUjDv',$,'BECShapeParameter_j','Bar shape parameter j.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2343=IFCSIMPLEPROPERTYTEMPLATE('2I2Hjq8An4CegwGLeO052l',$,'BECShapeParameter_k','Bar shape parameter k.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2344=IFCSIMPLEPROPERTYTEMPLATE('2gxsJ4bYz7Juy3XyYXicgk',$,'BECShapeParameter_l','Bar shape parameter l.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2345=IFCSIMPLEPROPERTYTEMPLATE('3Ff54uCTj658E2CCppYx6U',$,'BECBendingParameter_u','Bar bending angle parameter u.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2346=IFCSIMPLEPROPERTYTEMPLATE('0KKzudzP9BaPPxbEHDiBRX',$,'BECBendingParameter_v','Bar bending angle parameter v.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2347=IFCSIMPLEPROPERTYTEMPLATE('1tawJCJ2HEQOaaEhUjz9gA',$,'BECBendingParameter_u1','Bar bending angle parameter u1.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2348=IFCSIMPLEPROPERTYTEMPLATE('1j07h27GrBAxuRGZKoieWL',$,'BECBendingParameter_v1','Bar bending angle parameter v1.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2349=IFCSIMPLEPROPERTYTEMPLATE('0$cG7sYCTFFOQMFEJAkpRt',$,'BECShapeAid_x','Bar shape measure aid x.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2350=IFCSIMPLEPROPERTYTEMPLATE('2yccPqM2XCmf2K7g0IQew9',$,'BECShapeAid_y','Bar shape measure aid y.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2351=IFCSIMPLEPROPERTYTEMPLATE('3osRyTTfrCr9qbZwaq8ggo',$,'BECRollerDiameter','Diameter of bending roller.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2352=IFCPROPERTYSETTEMPLATE('3jsIqNYi13X9X9KYwqTW$t',$,'Pset_ReinforcingBarBendingsBS8666Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to BS8666. It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism.',$,'IfcReinforcingBar',(#2353,#2354,#2355,#2356,#2357,#2358,#2359));
+#2353=IFCSIMPLEPROPERTYTEMPLATE('2c8YHTuNDDVeD5kqEwBZcJ',$,'BS8666ShapeCode','The bending type code for the specific bending shape as defined in the BS8666 standard. Note: depending on the standardized shape different combinations of following parameters A...E and r are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2354=IFCSIMPLEPROPERTYTEMPLATE('1IBWlzQE59SRlBUl1FvciP',$,'BS8666ShapeParameter_A','Bar shape parameter A.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2355=IFCSIMPLEPROPERTYTEMPLATE('0KZUMVK4r7zgyUvkKPKCdS',$,'BS8666ShapeParameter_B','Bar shape parameter B.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2356=IFCSIMPLEPROPERTYTEMPLATE('1pN3eSYF9DHAbckyJuxyIL',$,'BS8666ShapeParameter_C','Bar shape parameter C.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2357=IFCSIMPLEPROPERTYTEMPLATE('1I$sYzHTzD1Oy$WX2pTZR6',$,'BS8666ShapeParameter_D','Bar shape parameter D.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2358=IFCSIMPLEPROPERTYTEMPLATE('3g9qxg7Gj2nfLqpcqA6rSq',$,'BS8666ShapeParameter_E','Bar shape parameter E.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2359=IFCSIMPLEPROPERTYTEMPLATE('1doqyJP6f37xW9dXzpZEZH',$,'BS8666ShapeParameter_r','Bar shape parameter r. Used for bending radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2360=IFCPROPERTYSETTEMPLATE('36pta5QTrCdOpYI9jlNyO0',$,'Pset_ReinforcingBarBendingsDIN135610Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to DIN 1356 Teil 10 with some minor omissions: the shape type X2 is not considered since it is better represented by the explicit shape geometry. It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism. Note: This bending standard is presumably to be replaced by the upcoming ISO 3766 standard. ',$,'IfcReinforcingBar',(#2361,#2362,#2363,#2364,#2365,#2366,#2367));
+#2361=IFCSIMPLEPROPERTYTEMPLATE('2_Toz9k7X0GQFzBGEzoEqJ',$,'DIN135610ShapeCode','The bending type code for the specific bending shape as defined in the DIN 1356 Teil 10 standard. Note: depending on the standardized shape different combinations of following parameters a...z are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2362=IFCSIMPLEPROPERTYTEMPLATE('02iUzdbPT4h9aIGv6_Av4c',$,'DIN135610ShapeParameter_a','Bar shape parameter a. Note: this parameter is also used for parameter a0 (shape code B3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2363=IFCSIMPLEPROPERTYTEMPLATE('0urD900A186Orf9XXJZG7k',$,'DIN135610ShapeParameter_b','Bar shape parameter b. Note: this parameter is also used for parameter b0 (shape codes C2 and C3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2364=IFCSIMPLEPROPERTYTEMPLATE('2Spx0vv6j7Ifa4QbAbMym2',$,'DIN135610ShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2365=IFCSIMPLEPROPERTYTEMPLATE('2cfDaOI2f6VfKkaixQS29j',$,'DIN135610ShapeParameter_d','Bar shape parameter d. Note: this parameter is also used for parameter d0 (shape code B3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2366=IFCSIMPLEPROPERTYTEMPLATE('2YJgCySwb0Xe3oOMJY3w$s',$,'DIN135610ShapeParameter_e','Bar shape parameter e. Note: this parameter is also used for parameter e0 (shape codes A4 and C3)',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2367=IFCSIMPLEPROPERTYTEMPLATE('2gcbqJKlT4Jwp5yETVXad7',$,'DIN135610ShapeParameter_z','Bar shape parameter z.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2368=IFCPROPERTYSETTEMPLATE('2WndF8ehbBDAOeZlzV5_MF',$,'Pset_ReinforcingBarBendingsISOCD3766Common','Definition from IAI: Properties expressing the bending information of non-prestressed reinforcing bars. The properties in this Pset are largely defined according to ISO/CD 3766 with some minor changes in how the hooks are defined (explicit angle measures instead of coded parameters). It is presumed that a single standard for defining the bar bending is used throughout the project and that this standard is referenced from the IfcProject object through the IfcDocumentReference mechanism. Note: This standard is still under development and the Pset will be changed accordingly if so required.',$,'IfcReinforcingBar',(#2369,#2370,#2371,#2372,#2373,#2374,#2375,#2376,#2377));
+#2369=IFCSIMPLEPROPERTYTEMPLATE('0yHKDTIBP0rRuY6eirpQ02',$,'ISOCD3766ShapeCode','The bending type code for the specific bending shape as defined in the ISO/CD 3766 standard. Note: depending on the standardized shape different combinations of following parameters a...e and R are used.',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
+#2370=IFCSIMPLEPROPERTYTEMPLATE('0SdwiJBmL55Qwi00iW0rec',$,'ISOCD3766ShapeParameter_a','Bar shape parameter a.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2371=IFCSIMPLEPROPERTYTEMPLATE('1UOYRO36HDlvJ64L$RhmTi',$,'ISOCD3766ShapeParameter_b','Bar shape parameter b.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2372=IFCSIMPLEPROPERTYTEMPLATE('32hjVPh2jFGemXDjxJD8JO',$,'ISOCD3766ShapeParameter_c','Bar shape parameter c.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2373=IFCSIMPLEPROPERTYTEMPLATE('1$nIoiCsf32AbN4Xh3jReC',$,'ISOCD3766ShapeParameter_d','Bar shape parameter d.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2374=IFCSIMPLEPROPERTYTEMPLATE('3MbVQrNhL4mQWATUeNTPcZ',$,'ISOCD3766ShapeParameter_e','Bar shape parameter e.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2375=IFCSIMPLEPROPERTYTEMPLATE('3KAq$1vgvAyfDJRPPhuFdP',$,'ISOCD3766ShapeParameter_R','Bar shape parameter R. Used for bending radius.',.P_SINGLEVALUE.,'IfcPositiveLengthMeasure',$,$,$,$,$,.READWRITE.);
+#2376=IFCSIMPLEPROPERTYTEMPLATE('2A67p$cv5CNBhS7RxF2XnW',$,'ISOCD3766BendingStartHook','The angle of the hook at start of the bar. If the property is not included the bar has no start hook. Note: this differs from how ISO/CD 3766 handles end hooks.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
+#2377=IFCSIMPLEPROPERTYTEMPLATE('2OhMwxBlvEZ8uzKJnLbMmY',$,'ISOCD3766BendingEndHook','The angle of the hook at end of the bar. If the property is not included the bar has no end hook. Note: this differs from how ISO/CD 3766 handles end hooks.',.P_SINGLEVALUE.,'IfcPlaneAngleMeasure',$,$,$,$,$,.READWRITE.);
ENDSEC;
END-ISO-10303-21;
diff --git a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json
index 878fef47dd..73594a3221 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json
+++ b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json
@@ -33,6 +33,26 @@
"name": "Furnace"
}
],
+ "IfcElectricDistributionBoard": [
+ {
+ "name": "Circuit Breaker Panel",
+ "predefined_type": "DISTRIBUTIONBOARD"
+ },
+ {
+ "name": "Electrical Panel",
+ "predefined_type": "DISTRIBUTIONBOARD"
+ }
+ ],
+ "IfcElectricDistributionBoardType": [
+ {
+ "name": "Circuit Breaker Panel",
+ "predefined_type": "DISTRIBUTIONBOARD"
+ },
+ {
+ "name": "Electrical Panel",
+ "predefined_type": "DISTRIBUTIONBOARD"
+ }
+ ],
"IfcFurniture": [
{
"name": "Casework"
@@ -57,7 +77,7 @@
],
"IfcGeographicElement": [
{
- "name": "Tree"
+ "name": "Trees"
},
{
"name": "Plants"
@@ -68,7 +88,7 @@
],
"IfcGeographicElementType": [
{
- "name": "Tree"
+ "name": "Trees"
},
{
"name": "Plants"
diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py
index 9053838679..922afaa259 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/shape.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/shape.py
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
+import shapely
import numpy as np
import ifcopenshell.util.element
import ifcopenshell.util.placement
@@ -25,12 +26,33 @@ tol = 1e-6
def is_x(value, x, tolerance=None):
+ """Checks whether a value is equivalent to X given a tolerance
+
+ :param value: Input value
+ :type value: float
+ :param x: The value to compare to
+ :type x: float
+ :param tolerance: The tolerance to use. Defaults to 1e-6.
+ :type tolerance: float
+ :return: True or false
+ :rtype: bool
+ """
if tolerance is None:
tolerance = tol
return abs(x - value) < tolerance
def get_volume(geometry):
+ """Calculates the total internal volume of a geometry
+
+ Volumes of non-manifold geometry will be unpredictable.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The volume in m3
+ :rtype: float
+ """
+
# https://stackoverflow.com/questions/1406029/how-to-calculate-the-volume-of-a-3d-mesh-object-the-surface-of-which-is-made-up
def signed_triangle_volume(p1, p2, p3):
v321 = p3[0] * p2[1] * p1[2]
@@ -52,26 +74,63 @@ def get_volume(geometry):
def get_x(geometry):
+ """Calculates the X length of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The X dimension
+ :rtype: float
+ """
x_values = [geometry.verts[i] for i in range(0, len(geometry.verts), 3)]
return max(x_values) - min(x_values)
def get_y(geometry):
+ """Calculates the Y length of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Y dimension
+ :rtype: float
+ """
y_values = [geometry.verts[i + 1] for i in range(0, len(geometry.verts), 3)]
return max(y_values) - min(y_values)
def get_z(geometry):
+ """Calculates the Z length of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z dimension
+ :rtype: float
+ """
z_values = [geometry.verts[i + 2] for i in range(0, len(geometry.verts), 3)]
return max(z_values) - min(z_values)
def get_shape_matrix(shape):
+ """Formats the transformation matrix of a shape as a 4x4 numpy array
+
+ :param shape: Shape output calculated by IfcOpenShell
+ :type shape: shape
+ :return: A 4x4 numpy array representing the transformation matrix
+ :rtype: np.array
+ """
m = shape.transformation.matrix.data
return np.array(([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]))
def get_bbox_centroid(geometry):
+ """Calculates the bounding box centroid of the geometry
+
+ The centroid is in local coordinates relative to the object's placement.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A tuple representing the XYZ centroid
+ :rtype: tuple[float]
+ """
x_values = [geometry.verts[i] for i in range(0, len(geometry.verts), 3)]
y_values = [geometry.verts[i + 1] for i in range(0, len(geometry.verts), 3)]
z_values = [geometry.verts[i + 2] for i in range(0, len(geometry.verts), 3)]
@@ -85,6 +144,18 @@ def get_bbox_centroid(geometry):
def get_element_bbox_centroid(element, geometry):
+ """Calculates the element's bounding box centroid
+
+ The centroid is in global coordinates. Note that if you have the shape, it
+ is more efficient to use ``get_shape_bbox_centroid``.
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A tuple representing the XYZ centroid
+ :rtype: tuple[float]
+ """
centroid = get_bbox_centroid(geometry)
if not element.ObjectPlacement or not element.ObjectPlacement.is_a("IfcLocalPlacement"):
return centroid
@@ -93,32 +164,107 @@ def get_element_bbox_centroid(element, geometry):
def get_shape_bbox_centroid(shape, geometry):
+ """Calculates the shape's bounding box centroid
+
+ The centroid is in global coordinates. Note that if you do not have the
+ shape, you can use ``get_element_bbox_centroid``.
+
+ :param shape: Shape output calculated by IfcOpenShell
+ :type shape: shape
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A tuple representing the XYZ centroid
+ :rtype: tuple[float]
+ """
centroid = get_bbox_centroid(geometry)
return (get_shape_matrix(shape) @ np.array([*centroid, 1.0]))[0:3]
def get_vertices(geometry):
+ """Get all the vertices as a numpy array
+
+ Vertices are in local coordinates.
+
+ Results are a nested numpy array e.g. [[v1x, v1y, v1z], [v2x, v2y, v2z], ...]
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A numpy array listing all the vertices. Each vertex is a numpy array with XYZ coordinates.
+ :rtype: np.array[np.array[float]]
+ """
verts = geometry.verts
return np.array([np.array([verts[i], verts[i + 1], verts[i + 2]]) for i in range(0, len(verts), 3)])
def get_edges(geometry):
+ """Get all the edges as a numpy array
+
+ Results are a nested numpy array e.g. [[e1v1, e1v2], [e2v1, e2v2], ...]
+
+ Note that although geometry always holds triangulated faces, edges will
+ represent the original tessellation or BRep's faces, which may be quads or
+ ngons.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A numpy array listing all the edges. Each edge is a numpy array with two vertex indices.
+ :rtype: np.array[np.array[int]]
+ """
edges = geometry.edges
return [[edges[i], edges[i + 1]] for i in range(0, len(edges), 2)]
def get_faces(geometry):
+ """Get all the faces as a numpy array
+
+ Faces are always triangulated.
+
+ Results are a nested numpy array e.g. [[f1v1, f1v2, f1v3], [f2v1, f2v2, f2v3], ...]
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A numpy array listing all the faces. Each face is a numpy array with three vertex indices.
+ :rtype: np.array[np.array[int]]
+ """
faces = geometry.faces
return [[faces[i], faces[i + 1], faces[i + 2]] for i in range(0, len(faces), 3)]
def get_shape_vertices(shape, geometry):
+ """Get the shape's vertices as a numpy array
+
+ Vertices are in global coordinates. If you do not have the shape, you can
+ use ``get_element_vertices``.
+
+ Results are a nested numpy array e.g. [[v1x, v1y, v1z], [v2x, v2y, v2z], ...]
+
+ :param shape: Shape output calculated by IfcOpenShell
+ :type shape: shape
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A numpy array listing all the vertices. Each vertex is a numpy array with XYZ coordinates.
+ :rtype: np.array[np.array[float]]
+ """
verts = get_vertices(geometry)
mat = get_shape_matrix(shape)
return np.array([mat @ np.array([verts[i], verts[i + 1], verts[i + 2]]) for i in range(0, len(verts), 3)])
def get_element_vertices(element, geometry):
+ """Get the element's vertices as a numpy array
+
+ Vertices are in global coordinates. Note that if you have the shape, it is
+ more efficient to use ``get_shape_vertices``.
+
+ Results are a nested numpy array e.g. [[v1x, v1y, v1z], [v2x, v2y, v2z], ...]
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: A numpy array listing all the vertices. Each vertex is a numpy array with XYZ coordinates.
+ :rtype: np.array[np.array[float]]
+ """
verts = get_vertices(geometry)
if not element.ObjectPlacement or not element.ObjectPlacement.is_a("IfcLocalPlacement"):
return verts
@@ -127,32 +273,104 @@ def get_element_vertices(element, geometry):
def get_bottom_elevation(geometry):
+ """Gets the lowest local Z ordinate of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
z_values = [geometry.verts[i + 2] for i in range(0, len(geometry.verts), 3)]
return min(z_values)
def get_top_elevation(geometry):
+ """Gets the highest local Z ordinate of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
z_values = [geometry.verts[i + 2] for i in range(0, len(geometry.verts), 3)]
return max(z_values)
def get_shape_bottom_elevation(shape, geometry):
+ """Gets the lowest global Z ordinate of the shape
+
+ If you do not have the shape, you can use ``get_element_bottom_elevation``
+ instead.
+
+ :param shape: Shape output calculated by IfcOpenShell
+ :type shape: shape
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
return min([v[2] for v in get_shape_vertices(shape, geometry)])
def get_shape_top_elevation(shape, geometry):
+ """Gets the highest global Z ordinate of the shape
+
+ If you do not have the shape, you can use ``get_element_top_elevation``
+ instead.
+
+ :param shape: Shape output calculated by IfcOpenShell
+ :type shape: shape
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
return max([v[2] for v in get_shape_vertices(shape, geometry)])
def get_element_bottom_elevation(element, geometry):
+ """Gets the lowest global Z ordinate of the element
+
+ Note that if you have the shape, it is more efficient to use
+ ``get_shape_bottom_elevation``.
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
return min([v[2] for v in get_element_vertices(element, geometry)])
def get_element_top_elevation(element, geometry):
+ """Gets the highest global Z ordinate of the element
+
+ Note that if you have the shape, it is more efficient to use
+ ``get_shape_top_elevation``.
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The Z value
+ :rtype: float
+ """
return max([v[2] for v in get_element_vertices(element, geometry)])
def get_bbox(vertices):
+ """Gets the bounding box of vertices
+
+ :param vertices: An iterable of vertices
+ :type: iterable
+ :return: The bounding box value represented as a tuple of two numpy arrays.
+ The first holds the bottom left corner and the second holds the top
+ right. E.g. (np.array([minx, miny, minz]), np.array([maxx, maxy,
+ maxz]))
+ :rtype: tuple[np.array[float]]
+ """
x_values = [v[0] for v in vertices]
y_values = [v[1] for v in vertices]
z_values = [v[2] for v in vertices]
@@ -166,6 +384,15 @@ def get_bbox(vertices):
def get_area_vf(vertices, faces):
+ """Calculates the surface area given a list of vertices and triangulated faces
+
+ :param vertices: A list of 3D vertices, such as returned from get_vertices.
+ :type: np.array[iterable[float]]
+ :param faces: A list of faces, such as returned from get_faces.
+ :type: np.array[iterable[int]]
+ :return: The surface area.
+ :rtype: float
+ """
# Calculate the triangle normal vectors
v1 = vertices[faces[:, 1]] - vertices[faces[:, 0]]
v2 = vertices[faces[:, 2]] - vertices[faces[:, 0]]
@@ -181,6 +408,13 @@ def get_area_vf(vertices, faces):
def get_area(geometry):
+ """Calculates the surface area of the geometry
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The surface area.
+ :rtype: float
+ """
verts = geometry.verts
faces = geometry.faces
vertices = np.array([[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)])
@@ -188,7 +422,31 @@ def get_area(geometry):
return get_area_vf(vertices, faces)
-def get_side_area(geometry, axis="Y"):
+def get_side_area(geometry, axis="Y", direction=None):
+ """Calculates the total surface area of surfaces that are visible from the specified axis
+
+ This is typically useful for calculating elevational areas. For example,
+ you might want to calculate the side area of a wall (i.e. only one side,
+ not both).
+
+ Surfaces do not need to be exactly perpendicular in the direction of the
+ specified axis. A surface is counted so long as it is visible from that
+ axis.
+
+ Note that this calculates the actual area, not the projected 2D area. If
+ you want the projected area, use ``get_footprint_area``.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :param axis: Either X, Y, or Z. Defaults to Y, which is used for standard
+ walls.
+ :type axis: str
+ :return: The surface area.
+ :rtype: float
+ """
+ if direction is None:
+ direction = {"X": (1.0, 0.0, 0.0), "Y": (0.0, 1.0, 0.0), "Z": (0.0, 0.0, 1.0)}[axis]
+
verts = geometry.verts
faces = geometry.faces
vertices = np.array([[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)])
@@ -201,15 +459,44 @@ def get_side_area(geometry, axis="Y"):
# Normalize the normal vectors
triangle_normals = triangle_normals / np.linalg.norm(triangle_normals, axis=1)[:, np.newaxis]
+ direction = np.array(direction) / np.linalg.norm(direction)
# Find the faces with a normal vector pointing in the desired +Y normal direction
- axis = {"X": 0, "Y": 1, "Z": 2}[axis]
- filtered_face_indices = np.where(triangle_normals[:, axis] > tol)[0]
+ # normal_tol < 0 is pointing away, = 0 is perpendicular, and > 0 is pointing towards.
+ normal_tol = 0.01 # Close to perpendicular, but with a fuzz for numerical tolerance
+ dot_products = np.dot(triangle_normals, direction)
+ filtered_face_indices = np.where(dot_products > normal_tol)[0]
filtered_faces = faces[filtered_face_indices]
return get_area_vf(vertices, filtered_faces)
-def get_footprint_area(geometry):
+def get_footprint_area(geometry, axis="Z", direction=None):
+ """Calculates the total footprint (i.e. projected) surface area visible from along an axis
+
+ This is typically useful for calculating footprint areas. For example, you
+ might want to calculate the top-down footprint area of a slab, ignoring
+ slopes in the slab.
+
+ Surfaces do not need to be exactly perpendicular in the direction of the
+ specified axis. A surface is counted so long as it is visible from that
+ axis.
+
+ Note that this calculates the 2D projected area, not the actual surface
+ area. If you want the actual area, use ``get_side_area``.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :param axis: Either X, Y, or Z. Defaults to Z.
+ :type axis: str,optional
+ :param direction: An XYZ iterable (e.g. (0., 0., 1.)). If a direction
+ vector is specified, this overrides the axis argument.
+ :type axis: iterable[float],optional
+ :return: The surface area.
+ :rtype: float
+ """
+ if direction is None:
+ direction = {"X": (1.0, 0.0, 0.0), "Y": (0.0, 1.0, 0.0), "Z": (0.0, 0.0, 1.0)}[axis]
+
verts = geometry.verts
faces = geometry.faces
vertices = np.array([[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)])
@@ -222,14 +509,58 @@ def get_footprint_area(geometry):
# Normalize the normal vectors
triangle_normals = triangle_normals / np.linalg.norm(triangle_normals, axis=1)[:, np.newaxis]
+ direction = np.array(direction) / np.linalg.norm(direction)
- # Find the faces with a normal vector pointing in the desired +Z normal direction
- filtered_face_indices = np.where(triangle_normals[:, 2] > tol)[0]
+ # Find the faces with a normal vector pointing in the desired direction using dot product
+ # normal_tol < 0 is pointing away, = 0 is perpendicular, and > 0 is pointing towards.
+ normal_tol = 0.01 # Close to perpendicular, but with a fuzz for numerical tolerance
+ dot_products = np.dot(triangle_normals, direction)
+ filtered_face_indices = np.where(dot_products > normal_tol)[0]
filtered_faces = faces[filtered_face_indices]
- return get_area_vf(vertices, filtered_faces)
+
+ # Flatten vertices along the direction
+ for idx in range(len(vertices)):
+ vertices[idx] = vertices[idx] - np.dot(vertices[idx], direction) * direction
+
+ # Now flatten 3D vertices into 2D polygons which can be unioned to find a footprint.
+
+ # Create an orthonormal basis using the direction
+ d = np.array(direction) / np.linalg.norm(direction)
+
+ # Find a vector not parallel to d
+ a = np.array(d)
+ if not np.isclose(a[2], 1.0, atol=0.01): # If d is not along the Z-axis
+ a[2] += 0.01 # Small perturbation to make it not parallel
+ else:
+ a = np.array([1, 0, 0])
+
+ # First basis vector
+ b = np.cross(d, a)
+ b /= np.linalg.norm(b)
+
+ # Second basis vector
+ c = np.cross(d, b)
+
+ # Project the flattened vertices onto the basis to get 2D coordinates
+ vertices_2d = np.array([[np.dot(v, b), np.dot(v, c)] for v in vertices])
+
+ polygons = [shapely.Polygon(vertices_2d[face]) for face in filtered_faces]
+ unioned_polygon = shapely.ops.unary_union(polygons)
+
+ return unioned_polygon.area
def get_outer_surface_area(geometry):
+ """Calculates the outer surface area (i.e. all sides except for top and bottom)
+
+ This is typically useful for calculating painted areas of beams which
+ exclude the end faces (at the minimum and maximum local Z).
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The surface area.
+ :rtype: float
+ """
verts = geometry.verts
faces = geometry.faces
vertices = np.array([[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)])
@@ -250,6 +581,16 @@ def get_outer_surface_area(geometry):
def get_footprint_perimeter(geometry):
+ """Calculates the footprint perimeter of the geometry
+
+ All faces with a negative Z normal are considered and the distance of all
+ perimeter edges are totaled.
+
+ :param geometry: Geometry output calculated by IfcOpenShell
+ :type geometry: geometry
+ :return: The perimeter length
+ :rtype: float
+ """
verts = geometry.verts
faces = geometry.faces
vertices = np.array([[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)])
@@ -289,6 +630,16 @@ def get_footprint_perimeter(geometry):
def get_profiles(element):
+ """Gets all 2D profiles used in the definition of a parametric shape
+
+ Profiles may be retrieved either from material profile sets or from swept
+ solid extrusions. This is useful for later doing 2D take-off from profiles.
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :return: A list of profiles
+ :rtype: list[ifcopenshell.entity_instance.entity_instance]
+ """
material = ifcopenshell.util.element.get_material(element, should_skip_usage=True)
if material and material.is_a("IfcMaterialProfileSet"):
return [mp.Profile for mp in material.MaterialProfiles]
@@ -296,6 +647,13 @@ def get_profiles(element):
def get_extrusions(element):
+ """Gets all extruded area solids used to define an element's model body geometry
+
+ :param element: The element occurrence
+ :type: ifcopenshell.entity_instance.entity_instance
+ :return: A list of extrusion representation items
+ :rtype: list[ifcopenshell.entity_instance.entity_instance]
+ """
representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
if not representation:
return
diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py
index 6941e37b2f..3467b90401 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py
@@ -1172,10 +1172,9 @@ class ShapeBuilder:
"""
print = lambda *args, **kwargs: __builtins__["print"](*args, **kwargs) if verbose else None
- # offsets tend to have bunch of float point garbage
+ # vectors tend to have bunch of float point garbage
# that can result in errors when we're calculating value for square root below
- si_conversion = ifcopenshell.util.unit.calculate_unit_scale(self.file)
- offset = round_vector_to_precision(profile_offset, si_conversion)
+ offset = round_vector_to_precision(profile_offset, 1)
diff = start_half_dim.xy - end_half_dim.xy
diff = Vector([abs(i) for i in diff])
@@ -1320,7 +1319,7 @@ class ShapeBuilder:
end_length: float,
angle: float,
radius: float,
- profile_offset: Vector,
+ bend_vector: Vector,
flip_z_axis: bool,
):
"""
@@ -1332,8 +1331,9 @@ class ShapeBuilder:
:param type: float
:param radius: bend radius
:param type: float
- :param profile_offset: offset between start and end segments in local space of start segment
- used mainly to determine the seconn bend axis and it's direction.
+ :param bend_vector: offset between start and end segments in local space of start segment
+ used mainly to determine the second bend axis and it's direction (positive or negative),
+ the actual magnitude of the vector is not important (though near zero values will be ignored).
:param type: Vector
:param flip_z_axis: since we cannot determine z axis direction from the profile offset,
there is an option to flip it if bend is going by start segment Z- axis.
@@ -1359,10 +1359,10 @@ class ShapeBuilder:
is_circular_profile = profile.is_a("IfcCircleProfileDef")
profile_dim = get_dim(profile, start_length)
- rounded_offset = round_vector_to_precision(profile_offset, si_conversion)
- lateral_axis = next(i for i in range(2) if not is_x(rounded_offset[i], 0))
+ rounded_bend_vector = round_vector_to_precision(bend_vector, si_conversion)
+ lateral_axis = next(i for i in range(2) if not is_x(rounded_bend_vector[i], 0))
non_lateral_axis = 1 if lateral_axis == 0 else 0
- lateral_sign = sign(profile_offset[lateral_axis])
+ lateral_sign = sign(bend_vector[lateral_axis])
z_sign = -1 if flip_z_axis else 1
rep_items = []
diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py
index a96c424835..28bc705f00 100644
--- a/src/ifcopenshell-python/ifcopenshell/util/unit.py
+++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py
@@ -464,6 +464,8 @@ def get_unit_symbol(unit):
if unit.is_a("IfcSIUnit"):
symbol += prefix_symbols.get(unit.Prefix, "")
symbol += unit_symbols.get(unit.Name.replace("METER", "METRE"), "?")
+ if unit.is_a("IfcContextDependentUnit") and unit.UnitType == "USERDEFINED":
+ symbol = unit.Name
return symbol
@@ -504,8 +506,8 @@ def convert(value, from_prefix, from_unit, to_prefix, to_unit):
:return: The converted value.
:rtype: float
"""
- if from_unit in si_conversions:
- value *= si_conversions[from_unit]
+ if from_unit.lower() in si_conversions:
+ value *= si_conversions[from_unit.lower()]
elif from_prefix:
value *= get_prefix_multiplier(from_prefix)
if "SQUARE" in from_unit:
@@ -513,8 +515,8 @@ def convert(value, from_prefix, from_unit, to_prefix, to_unit):
elif "CUBIC" in from_unit:
value *= get_prefix_multiplier(from_prefix)
value *= get_prefix_multiplier(from_prefix)
- if to_unit in si_conversions:
- return value * (1 / si_conversions[to_unit])
+ if to_unit.lower() in si_conversions:
+ return value * (1 / si_conversions[to_unit.lower()])
elif to_prefix:
value *= 1 / get_prefix_multiplier(to_prefix)
if "SQUARE" in from_unit:
diff --git a/src/ifcopenshell-python/ifcopenshell/validate.py b/src/ifcopenshell-python/ifcopenshell/validate.py
index bd1b8cfd66..debe8e9d09 100644
--- a/src/ifcopenshell-python/ifcopenshell/validate.py
+++ b/src/ifcopenshell-python/ifcopenshell/validate.py
@@ -328,7 +328,7 @@ def validate(f, logger, express_rules=False):
log_internal_cpp_errors(filename, logger)
- schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(f.schema)
+ schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(f.schema_identifier)
for inst in f:
if hasattr(logger, "set_state"):
logger.set_state('instance', inst)
diff --git a/src/ifcopenshell-python/pyproject.toml b/src/ifcopenshell-python/pyproject.toml
index cf65b9de30..b80eefb3ac 100644
--- a/src/ifcopenshell-python/pyproject.toml
+++ b/src/ifcopenshell-python/pyproject.toml
@@ -9,6 +9,7 @@ authors = [
]
description = "Python bindings, utility functions, and high-level API for IfcOpenShell"
readme = "README.md"
+requires-python = ">=3.6,<3.12"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)",
diff --git a/src/ifcopenshell-python/test/api/control/test_assign_control.py b/src/ifcopenshell-python/test/api/control/test_assign_control.py
new file mode 100644
index 0000000000..18670c86e4
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/control/test_assign_control.py
@@ -0,0 +1,50 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2022 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import test.bootstrap
+import ifcopenshell.api
+
+
+class TestAssignControl(test.bootstrap.IFC4):
+ def test_run(self):
+ wall = self.file.createIfcWall()
+ control = ifcopenshell.api.run("cost.add_cost_schedule", self.file)
+
+ # simple assignment
+ relation = ifcopenshell.api.run(
+ "control.assign_control", self.file, relating_control=control, related_object=wall
+ )
+ assert len(self.file.by_type("IfcRelAssignsToControl")) == 1
+ assert relation.RelatingControl == control
+ assert relation.RelatedObjects == (wall,)
+
+ # trying to establish existing relationship
+ relation = ifcopenshell.api.run(
+ "control.assign_control", self.file, relating_control=control, related_object=wall
+ )
+ assert relation is None
+
+ # assigning same control to another object
+ wall1 = self.file.createIfcWall()
+ relation = ifcopenshell.api.run(
+ "control.assign_control", self.file, relating_control=control, related_object=wall1
+ )
+ assert relation is not None
+ assert len(self.file.by_type("IfcRelAssignsToControl")) == 1
+ assert relation.RelatingControl == control
+ assert set(relation.RelatedObjects) == set((wall, wall1))
diff --git a/src/ifcopenshell-python/test/api/control/test_unassign_control.py b/src/ifcopenshell-python/test/api/control/test_unassign_control.py
new file mode 100644
index 0000000000..c31014f008
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/control/test_unassign_control.py
@@ -0,0 +1,43 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2022 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import test.bootstrap
+import ifcopenshell.api
+
+
+class TestUnassignControl(test.bootstrap.IFC4):
+ def test_run(self):
+ wall = self.file.createIfcWall()
+ control = ifcopenshell.api.run("cost.add_cost_schedule", self.file)
+
+ # assign and unassign
+ relation = ifcopenshell.api.run(
+ "control.assign_control", self.file, relating_control=control, related_object=wall
+ )
+ ifcopenshell.api.run("control.unassign_control", self.file, relating_control=control, related_object=wall)
+ assert len(self.file.by_type("IfcRelAssignsToControl")) == 0
+
+ # 1 control 2 related objects
+ wall1 = self.file.createIfcWall()
+ relation = ifcopenshell.api.run(
+ "control.assign_control", self.file, relating_control=control, related_object=wall
+ )
+ ifcopenshell.api.run("control.assign_control", self.file, relating_control=control, related_object=wall1)
+ ifcopenshell.api.run("control.unassign_control", self.file, relating_control=control, related_object=wall1)
+ assert len(self.file.by_type("IfcRelAssignsToControl")) == 1
+ assert relation.RelatedObjects == (wall,)
diff --git a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py
new file mode 100644
index 0000000000..10e938b5b4
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py
@@ -0,0 +1,55 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2023 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import test.bootstrap
+import ifcopenshell.api
+import numpy as np
+
+
+class TestAddBoolean(test.bootstrap.IFC4):
+ def test_returning_ifc_boolean_clipping_result(self):
+ ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
+ model = ifcopenshell.api.run("context.add_context", self.file, context_type="Model")
+ body = ifcopenshell.api.run(
+ "context.add_context",
+ self.file,
+ context_type="Model",
+ context_identifier="Body",
+ target_view="MODEL_VIEW",
+ parent=model,
+ )
+ wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
+
+ profile = self.file.create_entity(
+ "IfcIShapeProfileDef",
+ ProfileName="HEA100",
+ ProfileType="AREA",
+ OverallWidth=100,
+ OverallDepth=96,
+ WebThickness=5,
+ FlangeThickness=8,
+ FilletRadius=12,
+ )
+ rep = ifcopenshell.api.run(
+ "geometry.add_profile_representation", self.file, context=body, profile=profile, depth=5
+ )
+ ifcopenshell.api.run("geometry.assign_representation", self.file, product=wall, representation=rep)
+
+ ifcopenshell.api.run("geometry.add_boolean", self.file, representation=rep, matrix=np.eye(4))
+ assert rep.Items[0].is_a() == "IfcBooleanClippingResult"
+ assert rep.RepresentationType == "Clipping"
diff --git a/src/ifcopenshell-python/test/api/pset/test_edit_pset.py b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py
index 54e1d61633..d7c8fdf025 100644
--- a/src/ifcopenshell-python/test/api/pset/test_edit_pset.py
+++ b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py
@@ -168,7 +168,9 @@ class TestEditPset(test.bootstrap.IFC4):
assert pset.HasProperties[0].NominalValue.wrappedValue == 34
def test_editing_list_valued_properties(self):
- cable = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcDistributionPort", predefined_type="CABLE")
+ cable = ifcopenshell.api.run(
+ "root.create_entity", self.file, ifc_class="IfcDistributionPort", predefined_type="CABLE"
+ )
pset = ifcopenshell.api.run("pset.add_pset", self.file, product=cable, name="Pset_DistributionPortTypeCable")
ifcopenshell.api.run(
"pset.edit_pset",
@@ -178,10 +180,10 @@ class TestEditPset(test.bootstrap.IFC4):
"Protocols": ["One", "Two", "Three"],
},
)
- assert pset.HasProperties[0].is_a('IfcPropertyListValue')
+ assert pset.HasProperties[0].is_a("IfcPropertyListValue")
assert len(pset.HasProperties[0].ListValues) == 3
- assert set(map(ifcopenshell.entity_instance.is_a, pset.HasProperties[0].ListValues)) == {'IfcIdentifier'}
- assert list(map(operator.itemgetter(0), pset.HasProperties[0].ListValues)) == ['One', 'Two', 'Three']
+ assert set(map(ifcopenshell.entity_instance.is_a, pset.HasProperties[0].ListValues)) == {"IfcIdentifier"}
+ assert list(map(operator.itemgetter(0), pset.HasProperties[0].ListValues)) == ["One", "Two", "Three"]
def test_editing_properties_with_an_explicit_type(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
@@ -262,10 +264,10 @@ class TestEditPset(test.bootstrap.IFC4):
"Name": "foo",
"TemplateType": "P_SINGLEVALUE",
"PrimaryMeasureType": "IfcContextDependentMeasure",
- }
+ },
)
],
- }
+ },
)
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, name="Foo_Bar")
@@ -282,3 +284,19 @@ class TestEditPset(test.bootstrap.IFC4):
assert pset.HasProperties[0].Name == "foo"
assert pset.HasProperties[0].NominalValue.is_a("IfcContextDependentMeasure")
assert pset.HasProperties[0].NominalValue.wrappedValue == 12
+
+ def test_editing_a_shared_property(self):
+ element1 = self.file.createIfcMaterial()
+ element2 = self.file.createIfcMaterial()
+ pset1 = ifcopenshell.api.run("pset.add_pset", self.file, product=element1, name="Foo_Bar")
+ pset2 = ifcopenshell.api.run("pset.add_pset", self.file, product=element2, name="Foo_Bar")
+ ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset1, properties={"foo": "bar"})
+ ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset2, properties={"foo2": "bar2"})
+ element1.HasProperties[0].Properties = list(element1.HasProperties[0].Properties) + list(
+ element2.HasProperties[0].Properties
+ )
+ assert ifcopenshell.util.element.get_pset(element1, "Foo_Bar", "foo2") == "bar2"
+ assert ifcopenshell.util.element.get_pset(element2, "Foo_Bar", "foo2") == "bar2"
+ ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset1, properties={"foo2": "bar3"})
+ assert ifcopenshell.util.element.get_pset(element1, "Foo_Bar", "foo2") == "bar3"
+ assert ifcopenshell.util.element.get_pset(element2, "Foo_Bar", "foo2") == "bar2"
diff --git a/src/ifcopenshell-python/test/api/root/test_copy_class.py b/src/ifcopenshell-python/test/api/root/test_copy_class.py
index 520a074cde..36965258d4 100644
--- a/src/ifcopenshell-python/test/api/root/test_copy_class.py
+++ b/src/ifcopenshell-python/test/api/root/test_copy_class.py
@@ -120,6 +120,7 @@ class TestCopyClass(test.bootstrap.IFC4):
assert new.RepresentationMaps is None
def test_copying_an_element_with_an_opening(self):
+ # IfcOpeningElement opening
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
@@ -129,6 +130,16 @@ class TestCopyClass(test.bootstrap.IFC4):
assert new.HasOpenings[0].RelatedOpeningElement != opening
assert new.HasOpenings[0].RelatedOpeningElement.is_a("IfcOpeningElement")
+ # IfcVoidingFeature opening
+ plate = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcPlate")
+ opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcVoidingFeature")
+ ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=plate)
+ new = ifcopenshell.api.run("root.copy_class", self.file, product=plate)
+ assert plate.HasOpenings[0] != new.HasOpenings[0]
+ assert plate.HasOpenings[0].RelatedOpeningElement == opening
+ assert new.HasOpenings[0].RelatedOpeningElement != opening
+ assert new.HasOpenings[0].RelatedOpeningElement.is_a("IfcVoidingFeature")
+
def test_copying_an_element_with_a_filled_opening_should_not_copy_the_opening_nor_fill(self):
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
diff --git a/src/ifcopenshell-python/test/api/root/test_remove_product.py b/src/ifcopenshell-python/test/api/root/test_remove_product.py
index eb8a0d6631..5b18ed296b 100644
--- a/src/ifcopenshell-python/test/api/root/test_remove_product.py
+++ b/src/ifcopenshell-python/test/api/root/test_remove_product.py
@@ -391,3 +391,45 @@ class TestRemoveProduct(test.bootstrap.IFC4):
ifcopenshell.api.run("drawing.assign_product", self.file, relating_product=element, related_object=annotation)
ifcopenshell.api.run("root.remove_product", self.file, product=element)
assert not self.file.by_type("IfcRelAssignsToProduct")
+
+ def test_removing_flow_control_elements(self):
+ flow_element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcFlowSegment")
+ flow_control = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcController")
+ flow_control1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcController")
+
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run("root.remove_product", self.file, product=flow_control)
+ assert len(self.file.by_type("IfcRelFlowControlElements")) == 1
+ ifcopenshell.api.run("root.remove_product", self.file, product=flow_control1)
+ assert not self.file.by_type("IfcRelFlowControlElements")
+
+ def test_removing_flow_element_with_flow_controls(self):
+ flow_element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcFlowSegment")
+ flow_control = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcController")
+ flow_control1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcController")
+
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run("root.remove_product", self.file, product=flow_element)
+ assert not self.file.by_type("IfcRelFlowControlElements")
diff --git a/src/ifcopenshell-python/test/api/system/test_assign_flow_control.py b/src/ifcopenshell-python/test/api/system/test_assign_flow_control.py
new file mode 100644
index 0000000000..ac78e66633
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/system/test_assign_flow_control.py
@@ -0,0 +1,68 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2022 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import test.bootstrap
+import ifcopenshell.api
+
+
+class TestAssignFlowControl(test.bootstrap.IFC4):
+ def test_run(self):
+ flow_element = self.file.createIfcFlowSegment()
+ flow_control = self.file.createIfcController()
+
+ # simple assignment
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ assert len(self.file.by_type("IfcRelFlowControlElements")) == 1
+ assert relation.RelatingFlowElement == flow_element
+ assert relation.RelatedControlElements == (flow_control,)
+
+ # trying to establish existing relationship
+ relation0 = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ assert relation == relation0
+
+ # assigning same control to another object
+ flow_element1 = self.file.createIfcFlowSegment()
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element1,
+ )
+ assert relation is None
+
+ # assigning another control to the same object
+ flow_control1 = self.file.createIfcController()
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ assert len(self.file.by_type("IfcRelFlowControlElements")) == 1
+ assert relation.RelatingFlowElement == flow_element
+ assert set(relation.RelatedControlElements) == set((flow_control, flow_control1))
diff --git a/src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py b/src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py
new file mode 100644
index 0000000000..bb881367e6
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py
@@ -0,0 +1,64 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2022 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import test.bootstrap
+import ifcopenshell.api
+
+
+class TestUnassignFlowControl(test.bootstrap.IFC4):
+ def test_run(self):
+ flow_element = self.file.createIfcFlowSegment()
+ flow_control = self.file.createIfcController()
+
+ # assign and unassign
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.unassign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ assert len(self.file.by_type("IfcRelFlowControlElements")) == 0
+
+ # 1 element 2 controls
+ flow_control1 = self.file.createIfcController()
+ relation = ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.assign_flow_control",
+ self.file,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ ifcopenshell.api.run(
+ "system.unassign_flow_control",
+ self.file,
+ related_flow_control=flow_control1,
+ relating_flow_element=flow_element,
+ )
+ assert len(self.file.by_type("IfcRelFlowControlElements")) == 1
+ assert relation.RelatedControlElements == (flow_control,)
diff --git a/src/ifcopenshell-python/test/fixtures/rules/fail-3-box-alignment-CENTER-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-3-box-alignment-CENTER-uppercase-ifc2x3.ifc
similarity index 100%
rename from src/ifcopenshell-python/test/fixtures/rules/fail-3-box-alignment-CENTER-ifc2x3.ifc
rename to src/ifcopenshell-python/test/fixtures/rules/pass-3-box-alignment-CENTER-uppercase-ifc2x3.ifc
diff --git a/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-2-2-2-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-2-2-2-ifc2x3.ifc
index ea8b874efd..fb62d28072 100644
--- a/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-2-2-2-ifc2x3.ifc
+++ b/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-2-2-2-ifc2x3.ifc
@@ -8,6 +8,6 @@ DATA;
#1=IFCCARTESIANPOINT((0.,0.));
#2=IFCCARTESIANPOINT((1.,0.));
#3=IFCCARTESIANPOINT((1.,1.));
-#4=IFCBSPLINECURVE(1,(#1,#2,#3),.POLYLINE_FORM.,.F.,.F.);
+#4=IFCBEZIERCURVE(1,(#1,#2,#3),.POLYLINE_FORM.,.F.,.F.);
ENDSEC;
END-ISO-10303-21;
diff --git a/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-3-3-3-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-3-3-3-ifc2x3.ifc
index 0f9161be1f..505992651b 100644
--- a/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-3-3-3-ifc2x3.ifc
+++ b/src/ifcopenshell-python/test/fixtures/rules/pass-bspline-curve-point-dimensions-3-3-3-ifc2x3.ifc
@@ -8,6 +8,6 @@ DATA;
#1=IFCCARTESIANPOINT((0.,0.,0.));
#2=IFCCARTESIANPOINT((1.,0.,0.));
#3=IFCCARTESIANPOINT((1.,1.,0.));
-#4=IFCBSPLINECURVE(1,(#1,#2,#3),.POLYLINE_FORM.,.F.,.F.);
+#4=IFCBEZIERCURVE(1,(#1,#2,#3),.POLYLINE_FORM.,.F.,.F.);
ENDSEC;
END-ISO-10303-21;
diff --git a/src/ifcopenshell-python/test/fixtures/validate/pass-attr-count-ok.ifc b/src/ifcopenshell-python/test/fixtures/validate/pass-attr-count-ok.ifc
index 0e62b69592..ec52fc3d70 100644
--- a/src/ifcopenshell-python/test/fixtures/validate/pass-attr-count-ok.ifc
+++ b/src/ifcopenshell-python/test/fixtures/validate/pass-attr-count-ok.ifc
@@ -5,6 +5,6 @@ FILE_NAME('','2022-10-02T14:16:07',(),(),'IfcOpenShell 0.7.0','IfcOpenShell 0.7.
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
-#1=IFCPERSON($,$,$,$,$,$,$,$);
+#1=IFCPERSON('id',$,$,$,$,$,$,$);
ENDSEC;
END-ISO-10303-21;
diff --git a/src/ifcopenshell-python/test/fixtures/validate/pass-group-1-rels-IFC2X3.ifc b/src/ifcopenshell-python/test/fixtures/validate/pass-group-1-rels-IFC2X3.ifc
index 023380693d..91ade03f52 100644
--- a/src/ifcopenshell-python/test/fixtures/validate/pass-group-1-rels-IFC2X3.ifc
+++ b/src/ifcopenshell-python/test/fixtures/validate/pass-group-1-rels-IFC2X3.ifc
@@ -12,7 +12,7 @@ DATA;
#5=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#6=IFCUNITASSIGNMENT((#5));
#7=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,$,$,1676210831);
-#8=IFCWALLSTANDARDCASE('3g5hZOvez0U9ta9w2d8T5$',#7,$,$,$,$,$,$);
+#8=IFCWALL('3g5hZOvez0U9ta9w2d8T5$',#7,$,$,$,$,$,$);
#9=IFCGROUP('2bNIcEbbj2uhnzJfxe5SDH',#7,$,$,$);
#10=IFCRELASSIGNSTOGROUP('0B3vnDCO9Cfg4Q09lNwjms',#7,$,$,(#8),$,#9);
ENDSEC;
diff --git a/src/ifcopenshell-python/test/fixtures/validate/pass-valid-selected-enumeration.ifc b/src/ifcopenshell-python/test/fixtures/validate/pass-valid-selected-enumeration.ifc
index 805b175784..dd602ab58b 100644
--- a/src/ifcopenshell-python/test/fixtures/validate/pass-valid-selected-enumeration.ifc
+++ b/src/ifcopenshell-python/test/fixtures/validate/pass-valid-selected-enumeration.ifc
@@ -5,6 +5,8 @@ FILE_NAME('','2023-04-13T10:27:43',(),(),'IfcOpenShell v0.7.0-198fa67cc','IfcOpe
FILE_SCHEMA(('IFC4X3_RC4'));
ENDSEC;
DATA;
-#1=IFCFACILITYPART('0DYKeUG9993PtW$2icoR4v',$,$,$,$,$,$,$,$,IFCBRIDGEPARTTYPEENUM('DECK'),.LATERAL.);
+#1=IFCBRIDGEPART('0DYKeUG9993PtW$2icoR4v',$,$,$,$,$,$,$,$,.LATERAL.,.DECK.);
+#2=IFCPROJECT('3BXOBpFEDFqgWztkubS_w3',$,'My Project',$,$,$,$,$,$);
+#3=IFCRELAGGREGATES('3BXOBpFEDFqgWztkubS_w4',$,$,$,#2,(#1));
ENDSEC;
END-ISO-10303-21;
diff --git a/src/ifcopenshell-python/test/util/test_element.py b/src/ifcopenshell-python/test/util/test_element.py
index 499f448567..9e6f5ffaad 100644
--- a/src/ifcopenshell-python/test/util/test_element.py
+++ b/src/ifcopenshell-python/test/util/test_element.py
@@ -31,6 +31,11 @@ class TestGetPsetIFC4(test.bootstrap.IFC4):
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"a": "b"})
assert subject.get_pset(element, "name") == {"a": "b", "id": pset.id()}
assert subject.get_pset(element, "name", "a") == "b"
+ assert subject.get_pset(element, "name", "a", verbose=True) == {
+ "id": 4,
+ "class": "IfcPropertySingleValue",
+ "value": "b",
+ }
def test_getting_the_psets_of_a_product_type_as_a_dictionary(self):
type_element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
@@ -38,6 +43,14 @@ class TestGetPsetIFC4(test.bootstrap.IFC4):
pset = ifcopenshell.api.run("pset.add_pset", self.file, product=type_element, name="name")
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"x": "y"})
assert subject.get_pset(type_element, "name") == {"x": "y", "id": pset.id()}
+ assert subject.get_pset(type_element, "name", verbose=True) == {
+ "x": {
+ "id": 3,
+ "class": "IfcPropertySingleValue",
+ "value": "y",
+ },
+ "id": pset.id(),
+ }
def test_getting_inherited_psets(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
@@ -401,34 +414,55 @@ class TestGetStyles(test.bootstrap.IFC4):
assert subject.get_styles(element) == []
model = ifcopenshell.api.run("context.add_context", self.file, context_type="Model")
- body = ifcopenshell.api.run("context.add_context", self.file,
- context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=model)
+ body = ifcopenshell.api.run(
+ "context.add_context",
+ self.file,
+ context_type="Model",
+ context_identifier="Body",
+ target_view="MODEL_VIEW",
+ parent=model,
+ )
material = ifcopenshell.api.run("material.add_material", self.file)
ifcopenshell.api.run("material.assign_material", self.file, product=element, material=material)
style = ifcopenshell.api.run("style.add_style", self.file)
- ifcopenshell.api.run("style.add_surface_style", self.file,
- style=style, ifc_class="IfcSurfaceStyleShading", attributes={
- "SurfaceColour": { "Name": None, "Red": 1.0, "Green": 0.8, "Blue": 0.8 },
- "Transparency": 0., # 0 is opaque, 1 is transparent
- })
+ ifcopenshell.api.run(
+ "style.add_surface_style",
+ self.file,
+ style=style,
+ ifc_class="IfcSurfaceStyleShading",
+ attributes={
+ "SurfaceColour": {"Name": None, "Red": 1.0, "Green": 0.8, "Blue": 0.8},
+ "Transparency": 0.0, # 0 is opaque, 1 is transparent
+ },
+ )
ifcopenshell.api.run("style.assign_material_style", self.file, material=material, style=style, context=body)
assert subject.get_styles(element) == [style]
style2 = ifcopenshell.api.run("style.add_style", self.file)
- ifcopenshell.api.run("style.add_surface_style", self.file,
- style=style2, ifc_class="IfcSurfaceStyleShading", attributes={
- "SurfaceColour": { "Name": None, "Red": 1.0, "Green": 0.8, "Blue": 0.8 },
- "Transparency": 0., # 0 is opaque, 1 is transparent
- })
+ ifcopenshell.api.run(
+ "style.add_surface_style",
+ self.file,
+ style=style2,
+ ifc_class="IfcSurfaceStyleShading",
+ attributes={
+ "SurfaceColour": {"Name": None, "Red": 1.0, "Green": 0.8, "Blue": 0.8},
+ "Transparency": 0.0, # 0 is opaque, 1 is transparent
+ },
+ )
- representation = ifcopenshell.api.run("geometry.add_wall_representation", self.file,
- context=body, length=5, height=3, thickness=0.118)
+ representation = ifcopenshell.api.run(
+ "geometry.add_wall_representation", self.file, context=body, length=5, height=3, thickness=0.118
+ )
- ifcopenshell.api.run("geometry.assign_representation", self.file, product=element, representation=representation)
- ifcopenshell.api.run("style.assign_representation_styles", self.file, shape_representation=representation, styles=[style2])
+ ifcopenshell.api.run(
+ "geometry.assign_representation", self.file, product=element, representation=representation
+ )
+ ifcopenshell.api.run(
+ "style.assign_representation_styles", self.file, shape_representation=representation, styles=[style2]
+ )
assert subject.get_styles(element) == [style, style2]
diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py
index c5b69a8724..982f3a5095 100644
--- a/src/ifcopenshell-python/test/util/test_selector.py
+++ b/src/ifcopenshell-python/test/util/test_selector.py
@@ -351,8 +351,8 @@ class TestSelector(test.bootstrap.IFC4):
pset_2 = ifcopenshell.api.run("pset.add_pset", self.file, product=element_2, name="Foo_Bar")
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset_1, properties={"Foo": "Bar"})
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset_2, properties={"Foo": "BOO"})
- assert subject.Selector.parse(self.file, '.IfcElement[Foo_Bar.Foo != "Bar"]') == [element_2]
- assert subject.Selector.parse(self.file, '.IfcElement[Foo_Bar.Foo != "BOO"]') == [element_1]
+ assert subject.Selector.parse(self.file, '.IfcElement["Foo_Bar"."Foo" != "Bar"]') == [element_2]
+ assert subject.Selector.parse(self.file, '.IfcElement["Foo_Bar"."Foo" != "BOO"]') == [element_1]
def test_selecting_when_attribute_is_none(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
diff --git a/src/ifcparse/Ifc4x3_add2-definitions.h b/src/ifcparse/Ifc4x3_add2-definitions.h
new file mode 100644
index 0000000000..f6db270177
--- /dev/null
+++ b/src/ifcparse/Ifc4x3_add2-definitions.h
@@ -0,0 +1,4096 @@
+/********************************************************************************
+ * *
+ * This file is part of IfcOpenShell. *
+ * *
+ * IfcOpenShell is free software: you can redistribute it and/or modify *
+ * it under the terms of the Lesser GNU General Public License as published by *
+ * the Free Software Foundation, either version 3.0 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * IfcOpenShell is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * Lesser GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the Lesser GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ ********************************************************************************/
+
+/********************************************************************************
+ * *
+ * This file has been generated from IFC4X3_ADD2.exp. Do not make modifications *
+ * but instead modify the python script that has been used to generate this. *
+ * *
+ ********************************************************************************/
+
+#define SCHEMA_HAS_IfcAbsorbedDoseMeasure
+#define SCHEMA_HAS_IfcAccelerationMeasure
+#define SCHEMA_HAS_IfcActionRequestTypeEnum
+#define SCHEMA_HAS_IfcActionSourceTypeEnum
+#define SCHEMA_HAS_IfcActionTypeEnum
+#define SCHEMA_HAS_IfcActorSelect
+#define SCHEMA_HAS_IfcActuatorTypeEnum
+#define SCHEMA_HAS_IfcAddressTypeEnum
+#define SCHEMA_HAS_IfcAirTerminalBoxTypeEnum
+#define SCHEMA_HAS_IfcAirTerminalTypeEnum
+#define SCHEMA_HAS_IfcAirToAirHeatRecoveryTypeEnum
+#define SCHEMA_HAS_IfcAlarmTypeEnum
+#define SCHEMA_HAS_IfcAlignmentCantSegmentTypeEnum
+#define SCHEMA_HAS_IfcAlignmentHorizontalSegmentTypeEnum
+#define SCHEMA_HAS_IfcAlignmentTypeEnum
+#define SCHEMA_HAS_IfcAlignmentVerticalSegmentTypeEnum
+#define SCHEMA_HAS_IfcAmountOfSubstanceMeasure
+#define SCHEMA_HAS_IfcAnalysisModelTypeEnum
+#define SCHEMA_HAS_IfcAnalysisTheoryTypeEnum
+#define SCHEMA_HAS_IfcAngularVelocityMeasure
+#define SCHEMA_HAS_IfcAnnotationTypeEnum
+#define SCHEMA_HAS_IfcAppliedValueSelect
+#define SCHEMA_HAS_IfcArcIndex
+#define SCHEMA_HAS_IfcAreaDensityMeasure
+#define SCHEMA_HAS_IfcAreaMeasure
+#define SCHEMA_HAS_IfcArithmeticOperatorEnum
+#define SCHEMA_HAS_IfcAssemblyPlaceEnum
+#define SCHEMA_HAS_IfcAudioVisualApplianceTypeEnum
+#define SCHEMA_HAS_IfcAxis2Placement
+#define SCHEMA_HAS_IfcBSplineCurveForm
+#define SCHEMA_HAS_IfcBSplineSurfaceForm
+#define SCHEMA_HAS_IfcBeamTypeEnum
+#define SCHEMA_HAS_IfcBearingTypeEnum
+#define SCHEMA_HAS_IfcBenchmarkEnum
+#define SCHEMA_HAS_IfcBendingParameterSelect
+#define SCHEMA_HAS_IfcBinary
+#define SCHEMA_HAS_IfcBoilerTypeEnum
+#define SCHEMA_HAS_IfcBoolean
+#define SCHEMA_HAS_IfcBooleanOperand
+#define SCHEMA_HAS_IfcBooleanOperator
+#define SCHEMA_HAS_IfcBoxAlignment
+#define SCHEMA_HAS_IfcBridgePartTypeEnum
+#define SCHEMA_HAS_IfcBridgeTypeEnum
+#define SCHEMA_HAS_IfcBuildingElementPartTypeEnum
+#define SCHEMA_HAS_IfcBuildingElementProxyTypeEnum
+#define SCHEMA_HAS_IfcBuildingSystemTypeEnum
+#define SCHEMA_HAS_IfcBuiltSystemTypeEnum
+#define SCHEMA_HAS_IfcBurnerTypeEnum
+#define SCHEMA_HAS_IfcCableCarrierFittingTypeEnum
+#define SCHEMA_HAS_IfcCableCarrierSegmentTypeEnum
+#define SCHEMA_HAS_IfcCableFittingTypeEnum
+#define SCHEMA_HAS_IfcCableSegmentTypeEnum
+#define SCHEMA_HAS_IfcCaissonFoundationTypeEnum
+#define SCHEMA_HAS_IfcCardinalPointReference
+#define SCHEMA_HAS_IfcChangeActionEnum
+#define SCHEMA_HAS_IfcChillerTypeEnum
+#define SCHEMA_HAS_IfcChimneyTypeEnum
+#define SCHEMA_HAS_IfcClassificationReferenceSelect
+#define SCHEMA_HAS_IfcClassificationSelect
+#define SCHEMA_HAS_IfcCoilTypeEnum
+#define SCHEMA_HAS_IfcColour
+#define SCHEMA_HAS_IfcColourOrFactor
+#define SCHEMA_HAS_IfcColumnTypeEnum
+#define SCHEMA_HAS_IfcCommunicationsApplianceTypeEnum
+#define SCHEMA_HAS_IfcComplexNumber
+#define SCHEMA_HAS_IfcComplexPropertyTemplateTypeEnum
+#define SCHEMA_HAS_IfcCompoundPlaneAngleMeasure
+#define SCHEMA_HAS_IfcCompressorTypeEnum
+#define SCHEMA_HAS_IfcCondenserTypeEnum
+#define SCHEMA_HAS_IfcConnectionTypeEnum
+#define SCHEMA_HAS_IfcConstraintEnum
+#define SCHEMA_HAS_IfcConstructionEquipmentResourceTypeEnum
+#define SCHEMA_HAS_IfcConstructionMaterialResourceTypeEnum
+#define SCHEMA_HAS_IfcConstructionProductResourceTypeEnum
+#define SCHEMA_HAS_IfcContextDependentMeasure
+#define SCHEMA_HAS_IfcControllerTypeEnum
+#define SCHEMA_HAS_IfcConveyorSegmentTypeEnum
+#define SCHEMA_HAS_IfcCooledBeamTypeEnum
+#define SCHEMA_HAS_IfcCoolingTowerTypeEnum
+#define SCHEMA_HAS_IfcCoordinateReferenceSystemSelect
+#define SCHEMA_HAS_IfcCostItemTypeEnum
+#define SCHEMA_HAS_IfcCostScheduleTypeEnum
+#define SCHEMA_HAS_IfcCountMeasure
+#define SCHEMA_HAS_IfcCourseTypeEnum
+#define SCHEMA_HAS_IfcCoveringTypeEnum
+#define SCHEMA_HAS_IfcCrewResourceTypeEnum
+#define SCHEMA_HAS_IfcCsgSelect
+#define SCHEMA_HAS_IfcCurtainWallTypeEnum
+#define SCHEMA_HAS_IfcCurvatureMeasure
+#define SCHEMA_HAS_IfcCurveFontOrScaledCurveFontSelect
+#define SCHEMA_HAS_IfcCurveInterpolationEnum
+#define SCHEMA_HAS_IfcCurveMeasureSelect
+#define SCHEMA_HAS_IfcCurveOnSurface
+#define SCHEMA_HAS_IfcCurveOrEdgeCurve
+#define SCHEMA_HAS_IfcCurveStyleFontSelect
+#define SCHEMA_HAS_IfcDamperTypeEnum
+#define SCHEMA_HAS_IfcDataOriginEnum
+#define SCHEMA_HAS_IfcDate
+#define SCHEMA_HAS_IfcDateTime
+#define SCHEMA_HAS_IfcDayInMonthNumber
+#define SCHEMA_HAS_IfcDayInWeekNumber
+#define SCHEMA_HAS_IfcDefinitionSelect
+#define SCHEMA_HAS_IfcDerivedMeasureValue
+#define SCHEMA_HAS_IfcDerivedUnitEnum
+#define SCHEMA_HAS_IfcDescriptiveMeasure
+#define SCHEMA_HAS_IfcDimensionCount
+#define SCHEMA_HAS_IfcDirectionSenseEnum
+#define SCHEMA_HAS_IfcDiscreteAccessoryTypeEnum
+#define SCHEMA_HAS_IfcDistributionBoardTypeEnum
+#define SCHEMA_HAS_IfcDistributionChamberElementTypeEnum
+#define SCHEMA_HAS_IfcDistributionPortTypeEnum
+#define SCHEMA_HAS_IfcDistributionSystemEnum
+#define SCHEMA_HAS_IfcDocumentConfidentialityEnum
+#define SCHEMA_HAS_IfcDocumentSelect
+#define SCHEMA_HAS_IfcDocumentStatusEnum
+#define SCHEMA_HAS_IfcDoorPanelOperationEnum
+#define SCHEMA_HAS_IfcDoorPanelPositionEnum
+#define SCHEMA_HAS_IfcDoorTypeEnum
+#define SCHEMA_HAS_IfcDoorTypeOperationEnum
+#define SCHEMA_HAS_IfcDoseEquivalentMeasure
+#define SCHEMA_HAS_IfcDuctFittingTypeEnum
+#define SCHEMA_HAS_IfcDuctSegmentTypeEnum
+#define SCHEMA_HAS_IfcDuctSilencerTypeEnum
+#define SCHEMA_HAS_IfcDuration
+#define SCHEMA_HAS_IfcDynamicViscosityMeasure
+#define SCHEMA_HAS_IfcEarthworksCutTypeEnum
+#define SCHEMA_HAS_IfcEarthworksFillTypeEnum
+#define SCHEMA_HAS_IfcElectricApplianceTypeEnum
+#define SCHEMA_HAS_IfcElectricCapacitanceMeasure
+#define SCHEMA_HAS_IfcElectricChargeMeasure
+#define SCHEMA_HAS_IfcElectricConductanceMeasure
+#define SCHEMA_HAS_IfcElectricCurrentMeasure
+#define SCHEMA_HAS_IfcElectricDistributionBoardTypeEnum
+#define SCHEMA_HAS_IfcElectricFlowStorageDeviceTypeEnum
+#define SCHEMA_HAS_IfcElectricFlowTreatmentDeviceTypeEnum
+#define SCHEMA_HAS_IfcElectricGeneratorTypeEnum
+#define SCHEMA_HAS_IfcElectricMotorTypeEnum
+#define SCHEMA_HAS_IfcElectricResistanceMeasure
+#define SCHEMA_HAS_IfcElectricTimeControlTypeEnum
+#define SCHEMA_HAS_IfcElectricVoltageMeasure
+#define SCHEMA_HAS_IfcElementAssemblyTypeEnum
+#define SCHEMA_HAS_IfcElementCompositionEnum
+#define SCHEMA_HAS_IfcEnergyMeasure
+#define SCHEMA_HAS_IfcEngineTypeEnum
+#define SCHEMA_HAS_IfcEvaporativeCoolerTypeEnum
+#define SCHEMA_HAS_IfcEvaporatorTypeEnum
+#define SCHEMA_HAS_IfcEventTriggerTypeEnum
+#define SCHEMA_HAS_IfcEventTypeEnum
+#define SCHEMA_HAS_IfcExternalSpatialElementTypeEnum
+#define SCHEMA_HAS_IfcFacilityPartCommonTypeEnum
+#define SCHEMA_HAS_IfcFacilityUsageEnum
+#define SCHEMA_HAS_IfcFanTypeEnum
+#define SCHEMA_HAS_IfcFastenerTypeEnum
+#define SCHEMA_HAS_IfcFillStyleSelect
+#define SCHEMA_HAS_IfcFilterTypeEnum
+#define SCHEMA_HAS_IfcFireSuppressionTerminalTypeEnum
+#define SCHEMA_HAS_IfcFlowDirectionEnum
+#define SCHEMA_HAS_IfcFlowInstrumentTypeEnum
+#define SCHEMA_HAS_IfcFlowMeterTypeEnum
+#define SCHEMA_HAS_IfcFontStyle
+#define SCHEMA_HAS_IfcFontVariant
+#define SCHEMA_HAS_IfcFontWeight
+#define SCHEMA_HAS_IfcFootingTypeEnum
+#define SCHEMA_HAS_IfcForceMeasure
+#define SCHEMA_HAS_IfcFrequencyMeasure
+#define SCHEMA_HAS_IfcFurnitureTypeEnum
+#define SCHEMA_HAS_IfcGeographicElementTypeEnum
+#define SCHEMA_HAS_IfcGeometricProjectionEnum
+#define SCHEMA_HAS_IfcGeometricSetSelect
+#define SCHEMA_HAS_IfcGeotechnicalStratumTypeEnum
+#define SCHEMA_HAS_IfcGlobalOrLocalEnum
+#define SCHEMA_HAS_IfcGloballyUniqueId
+#define SCHEMA_HAS_IfcGridPlacementDirectionSelect
+#define SCHEMA_HAS_IfcGridTypeEnum
+#define SCHEMA_HAS_IfcHatchLineDistanceSelect
+#define SCHEMA_HAS_IfcHeatExchangerTypeEnum
+#define SCHEMA_HAS_IfcHeatFluxDensityMeasure
+#define SCHEMA_HAS_IfcHeatingValueMeasure
+#define SCHEMA_HAS_IfcHumidifierTypeEnum
+#define SCHEMA_HAS_IfcIdentifier
+#define SCHEMA_HAS_IfcIlluminanceMeasure
+#define SCHEMA_HAS_IfcImpactProtectionDeviceTypeEnum
+#define SCHEMA_HAS_IfcInductanceMeasure
+#define SCHEMA_HAS_IfcInteger
+#define SCHEMA_HAS_IfcIntegerCountRateMeasure
+#define SCHEMA_HAS_IfcInterceptorTypeEnum
+#define SCHEMA_HAS_IfcInterferenceSelect
+#define SCHEMA_HAS_IfcInternalOrExternalEnum
+#define SCHEMA_HAS_IfcInventoryTypeEnum
+#define SCHEMA_HAS_IfcIonConcentrationMeasure
+#define SCHEMA_HAS_IfcIsothermalMoistureCapacityMeasure
+#define SCHEMA_HAS_IfcJunctionBoxTypeEnum
+#define SCHEMA_HAS_IfcKerbTypeEnum
+#define SCHEMA_HAS_IfcKinematicViscosityMeasure
+#define SCHEMA_HAS_IfcKnotType
+#define SCHEMA_HAS_IfcLabel
+#define SCHEMA_HAS_IfcLaborResourceTypeEnum
+#define SCHEMA_HAS_IfcLampTypeEnum
+#define SCHEMA_HAS_IfcLanguageId
+#define SCHEMA_HAS_IfcLayerSetDirectionEnum
+#define SCHEMA_HAS_IfcLayeredItem
+#define SCHEMA_HAS_IfcLengthMeasure
+#define SCHEMA_HAS_IfcLibrarySelect
+#define SCHEMA_HAS_IfcLightDistributionCurveEnum
+#define SCHEMA_HAS_IfcLightDistributionDataSourceSelect
+#define SCHEMA_HAS_IfcLightEmissionSourceEnum
+#define SCHEMA_HAS_IfcLightFixtureTypeEnum
+#define SCHEMA_HAS_IfcLineIndex
+#define SCHEMA_HAS_IfcLinearForceMeasure
+#define SCHEMA_HAS_IfcLinearMomentMeasure
+#define SCHEMA_HAS_IfcLinearStiffnessMeasure
+#define SCHEMA_HAS_IfcLinearVelocityMeasure
+#define SCHEMA_HAS_IfcLiquidTerminalTypeEnum
+#define SCHEMA_HAS_IfcLoadGroupTypeEnum
+#define SCHEMA_HAS_IfcLogical
+#define SCHEMA_HAS_IfcLogicalOperatorEnum
+#define SCHEMA_HAS_IfcLuminousFluxMeasure
+#define SCHEMA_HAS_IfcLuminousIntensityDistributionMeasure
+#define SCHEMA_HAS_IfcLuminousIntensityMeasure
+#define SCHEMA_HAS_IfcMagneticFluxDensityMeasure
+#define SCHEMA_HAS_IfcMagneticFluxMeasure
+#define SCHEMA_HAS_IfcMarineFacilityTypeEnum
+#define SCHEMA_HAS_IfcMarinePartTypeEnum
+#define SCHEMA_HAS_IfcMassDensityMeasure
+#define SCHEMA_HAS_IfcMassFlowRateMeasure
+#define SCHEMA_HAS_IfcMassMeasure
+#define SCHEMA_HAS_IfcMassPerLengthMeasure
+#define SCHEMA_HAS_IfcMaterialSelect
+#define SCHEMA_HAS_IfcMeasureValue
+#define SCHEMA_HAS_IfcMechanicalFastenerTypeEnum
+#define SCHEMA_HAS_IfcMedicalDeviceTypeEnum
+#define SCHEMA_HAS_IfcMemberTypeEnum
+#define SCHEMA_HAS_IfcMetricValueSelect
+#define SCHEMA_HAS_IfcMobileTelecommunicationsApplianceTypeEnum
+#define SCHEMA_HAS_IfcModulusOfElasticityMeasure
+#define SCHEMA_HAS_IfcModulusOfLinearSubgradeReactionMeasure
+#define SCHEMA_HAS_IfcModulusOfRotationalSubgradeReactionMeasure
+#define SCHEMA_HAS_IfcModulusOfRotationalSubgradeReactionSelect
+#define SCHEMA_HAS_IfcModulusOfSubgradeReactionMeasure
+#define SCHEMA_HAS_IfcModulusOfSubgradeReactionSelect
+#define SCHEMA_HAS_IfcModulusOfTranslationalSubgradeReactionSelect
+#define SCHEMA_HAS_IfcMoistureDiffusivityMeasure
+#define SCHEMA_HAS_IfcMolecularWeightMeasure
+#define SCHEMA_HAS_IfcMomentOfInertiaMeasure
+#define SCHEMA_HAS_IfcMonetaryMeasure
+#define SCHEMA_HAS_IfcMonthInYearNumber
+#define SCHEMA_HAS_IfcMooringDeviceTypeEnum
+#define SCHEMA_HAS_IfcMotorConnectionTypeEnum
+#define SCHEMA_HAS_IfcNavigationElementTypeEnum
+#define SCHEMA_HAS_IfcNonNegativeLengthMeasure
+#define SCHEMA_HAS_IfcNormalisedRatioMeasure
+#define SCHEMA_HAS_IfcNumericMeasure
+#define SCHEMA_HAS_IfcObjectReferenceSelect
+#define SCHEMA_HAS_IfcObjectiveEnum
+#define SCHEMA_HAS_IfcOccupantTypeEnum
+#define SCHEMA_HAS_IfcOpeningElementTypeEnum
+#define SCHEMA_HAS_IfcOutletTypeEnum
+#define SCHEMA_HAS_IfcPHMeasure
+#define SCHEMA_HAS_IfcParameterValue
+#define SCHEMA_HAS_IfcPavementTypeEnum
+#define SCHEMA_HAS_IfcPerformanceHistoryTypeEnum
+#define SCHEMA_HAS_IfcPermeableCoveringOperationEnum
+#define SCHEMA_HAS_IfcPermitTypeEnum
+#define SCHEMA_HAS_IfcPhysicalOrVirtualEnum
+#define SCHEMA_HAS_IfcPileConstructionEnum
+#define SCHEMA_HAS_IfcPileTypeEnum
+#define SCHEMA_HAS_IfcPipeFittingTypeEnum
+#define SCHEMA_HAS_IfcPipeSegmentTypeEnum
+#define SCHEMA_HAS_IfcPlanarForceMeasure
+#define SCHEMA_HAS_IfcPlaneAngleMeasure
+#define SCHEMA_HAS_IfcPlateTypeEnum
+#define SCHEMA_HAS_IfcPointOrVertexPoint
+#define SCHEMA_HAS_IfcPositiveInteger
+#define SCHEMA_HAS_IfcPositiveLengthMeasure
+#define SCHEMA_HAS_IfcPositivePlaneAngleMeasure
+#define SCHEMA_HAS_IfcPositiveRatioMeasure
+#define SCHEMA_HAS_IfcPowerMeasure
+#define SCHEMA_HAS_IfcPreferredSurfaceCurveRepresentation
+#define SCHEMA_HAS_IfcPresentableText
+#define SCHEMA_HAS_IfcPressureMeasure
+#define SCHEMA_HAS_IfcProcedureTypeEnum
+#define SCHEMA_HAS_IfcProcessSelect
+#define SCHEMA_HAS_IfcProductRepresentationSelect
+#define SCHEMA_HAS_IfcProductSelect
+#define SCHEMA_HAS_IfcProfileTypeEnum
+#define SCHEMA_HAS_IfcProjectOrderTypeEnum
+#define SCHEMA_HAS_IfcProjectedOrTrueLengthEnum
+#define SCHEMA_HAS_IfcProjectionElementTypeEnum
+#define SCHEMA_HAS_IfcPropertySetDefinitionSelect
+#define SCHEMA_HAS_IfcPropertySetDefinitionSet
+#define SCHEMA_HAS_IfcPropertySetTemplateTypeEnum
+#define SCHEMA_HAS_IfcProtectiveDeviceTrippingUnitTypeEnum
+#define SCHEMA_HAS_IfcProtectiveDeviceTypeEnum
+#define SCHEMA_HAS_IfcPumpTypeEnum
+#define SCHEMA_HAS_IfcRadioActivityMeasure
+#define SCHEMA_HAS_IfcRailTypeEnum
+#define SCHEMA_HAS_IfcRailingTypeEnum
+#define SCHEMA_HAS_IfcRailwayPartTypeEnum
+#define SCHEMA_HAS_IfcRailwayTypeEnum
+#define SCHEMA_HAS_IfcRampFlightTypeEnum
+#define SCHEMA_HAS_IfcRampTypeEnum
+#define SCHEMA_HAS_IfcRatioMeasure
+#define SCHEMA_HAS_IfcReal
+#define SCHEMA_HAS_IfcRecurrenceTypeEnum
+#define SCHEMA_HAS_IfcReferentTypeEnum
+#define SCHEMA_HAS_IfcReflectanceMethodEnum
+#define SCHEMA_HAS_IfcReinforcedSoilTypeEnum
+#define SCHEMA_HAS_IfcReinforcingBarRoleEnum
+#define SCHEMA_HAS_IfcReinforcingBarSurfaceEnum
+#define SCHEMA_HAS_IfcReinforcingBarTypeEnum
+#define SCHEMA_HAS_IfcReinforcingMeshTypeEnum
+#define SCHEMA_HAS_IfcResourceObjectSelect
+#define SCHEMA_HAS_IfcResourceSelect
+#define SCHEMA_HAS_IfcRoadPartTypeEnum
+#define SCHEMA_HAS_IfcRoadTypeEnum
+#define SCHEMA_HAS_IfcRoleEnum
+#define SCHEMA_HAS_IfcRoofTypeEnum
+#define SCHEMA_HAS_IfcRotationalFrequencyMeasure
+#define SCHEMA_HAS_IfcRotationalMassMeasure
+#define SCHEMA_HAS_IfcRotationalStiffnessMeasure
+#define SCHEMA_HAS_IfcRotationalStiffnessSelect
+#define SCHEMA_HAS_IfcSIPrefix
+#define SCHEMA_HAS_IfcSIUnitName
+#define SCHEMA_HAS_IfcSanitaryTerminalTypeEnum
+#define SCHEMA_HAS_IfcSectionModulusMeasure
+#define SCHEMA_HAS_IfcSectionTypeEnum
+#define SCHEMA_HAS_IfcSectionalAreaIntegralMeasure
+#define SCHEMA_HAS_IfcSegmentIndexSelect
+#define SCHEMA_HAS_IfcSensorTypeEnum
+#define SCHEMA_HAS_IfcSequenceEnum
+#define SCHEMA_HAS_IfcShadingDeviceTypeEnum
+#define SCHEMA_HAS_IfcShearModulusMeasure
+#define SCHEMA_HAS_IfcShell
+#define SCHEMA_HAS_IfcSignTypeEnum
+#define SCHEMA_HAS_IfcSignalTypeEnum
+#define SCHEMA_HAS_IfcSimplePropertyTemplateTypeEnum
+#define SCHEMA_HAS_IfcSimpleValue
+#define SCHEMA_HAS_IfcSizeSelect
+#define SCHEMA_HAS_IfcSlabTypeEnum
+#define SCHEMA_HAS_IfcSolarDeviceTypeEnum
+#define SCHEMA_HAS_IfcSolidAngleMeasure
+#define SCHEMA_HAS_IfcSolidOrShell
+#define SCHEMA_HAS_IfcSoundPowerLevelMeasure
+#define SCHEMA_HAS_IfcSoundPowerMeasure
+#define SCHEMA_HAS_IfcSoundPressureLevelMeasure
+#define SCHEMA_HAS_IfcSoundPressureMeasure
+#define SCHEMA_HAS_IfcSpaceBoundarySelect
+#define SCHEMA_HAS_IfcSpaceHeaterTypeEnum
+#define SCHEMA_HAS_IfcSpaceTypeEnum
+#define SCHEMA_HAS_IfcSpatialReferenceSelect
+#define SCHEMA_HAS_IfcSpatialZoneTypeEnum
+#define SCHEMA_HAS_IfcSpecificHeatCapacityMeasure
+#define SCHEMA_HAS_IfcSpecularExponent
+#define SCHEMA_HAS_IfcSpecularHighlightSelect
+#define SCHEMA_HAS_IfcSpecularRoughness
+#define SCHEMA_HAS_IfcStackTerminalTypeEnum
+#define SCHEMA_HAS_IfcStairFlightTypeEnum
+#define SCHEMA_HAS_IfcStairTypeEnum
+#define SCHEMA_HAS_IfcStateEnum
+#define SCHEMA_HAS_IfcStrippedOptional
+#define SCHEMA_HAS_IfcStructuralActivityAssignmentSelect
+#define SCHEMA_HAS_IfcStructuralCurveActivityTypeEnum
+#define SCHEMA_HAS_IfcStructuralCurveMemberTypeEnum
+#define SCHEMA_HAS_IfcStructuralSurfaceActivityTypeEnum
+#define SCHEMA_HAS_IfcStructuralSurfaceMemberTypeEnum
+#define SCHEMA_HAS_IfcSubContractResourceTypeEnum
+#define SCHEMA_HAS_IfcSurfaceFeatureTypeEnum
+#define SCHEMA_HAS_IfcSurfaceOrFaceSurface
+#define SCHEMA_HAS_IfcSurfaceSide
+#define SCHEMA_HAS_IfcSurfaceStyleElementSelect
+#define SCHEMA_HAS_IfcSwitchingDeviceTypeEnum
+#define SCHEMA_HAS_IfcSystemFurnitureElementTypeEnum
+#define SCHEMA_HAS_IfcTankTypeEnum
+#define SCHEMA_HAS_IfcTaskDurationEnum
+#define SCHEMA_HAS_IfcTaskTypeEnum
+#define SCHEMA_HAS_IfcTemperatureGradientMeasure
+#define SCHEMA_HAS_IfcTemperatureRateOfChangeMeasure
+#define SCHEMA_HAS_IfcTendonAnchorTypeEnum
+#define SCHEMA_HAS_IfcTendonConduitTypeEnum
+#define SCHEMA_HAS_IfcTendonTypeEnum
+#define SCHEMA_HAS_IfcText
+#define SCHEMA_HAS_IfcTextAlignment
+#define SCHEMA_HAS_IfcTextDecoration
+#define SCHEMA_HAS_IfcTextFontName
+#define SCHEMA_HAS_IfcTextFontSelect
+#define SCHEMA_HAS_IfcTextPath
+#define SCHEMA_HAS_IfcTextTransformation
+#define SCHEMA_HAS_IfcThermalAdmittanceMeasure
+#define SCHEMA_HAS_IfcThermalConductivityMeasure
+#define SCHEMA_HAS_IfcThermalExpansionCoefficientMeasure
+#define SCHEMA_HAS_IfcThermalResistanceMeasure
+#define SCHEMA_HAS_IfcThermalTransmittanceMeasure
+#define SCHEMA_HAS_IfcThermodynamicTemperatureMeasure
+#define SCHEMA_HAS_IfcTime
+#define SCHEMA_HAS_IfcTimeMeasure
+#define SCHEMA_HAS_IfcTimeOrRatioSelect
+#define SCHEMA_HAS_IfcTimeSeriesDataTypeEnum
+#define SCHEMA_HAS_IfcTimeStamp
+#define SCHEMA_HAS_IfcTorqueMeasure
+#define SCHEMA_HAS_IfcTrackElementTypeEnum
+#define SCHEMA_HAS_IfcTransformerTypeEnum
+#define SCHEMA_HAS_IfcTransitionCode
+#define SCHEMA_HAS_IfcTranslationalStiffnessSelect
+#define SCHEMA_HAS_IfcTransportElementTypeEnum
+#define SCHEMA_HAS_IfcTrimmingPreference
+#define SCHEMA_HAS_IfcTrimmingSelect
+#define SCHEMA_HAS_IfcTubeBundleTypeEnum
+#define SCHEMA_HAS_IfcURIReference
+#define SCHEMA_HAS_IfcUnit
+#define SCHEMA_HAS_IfcUnitEnum
+#define SCHEMA_HAS_IfcUnitaryControlElementTypeEnum
+#define SCHEMA_HAS_IfcUnitaryEquipmentTypeEnum
+#define SCHEMA_HAS_IfcValue
+#define SCHEMA_HAS_IfcValveTypeEnum
+#define SCHEMA_HAS_IfcVaporPermeabilityMeasure
+#define SCHEMA_HAS_IfcVectorOrDirection
+#define SCHEMA_HAS_IfcVehicleTypeEnum
+#define SCHEMA_HAS_IfcVibrationDamperTypeEnum
+#define SCHEMA_HAS_IfcVibrationIsolatorTypeEnum
+#define SCHEMA_HAS_IfcVirtualElementTypeEnum
+#define SCHEMA_HAS_IfcVoidingFeatureTypeEnum
+#define SCHEMA_HAS_IfcVolumeMeasure
+#define SCHEMA_HAS_IfcVolumetricFlowRateMeasure
+#define SCHEMA_HAS_IfcWallTypeEnum
+#define SCHEMA_HAS_IfcWarpingConstantMeasure
+#define SCHEMA_HAS_IfcWarpingMomentMeasure
+#define SCHEMA_HAS_IfcWarpingStiffnessSelect
+#define SCHEMA_HAS_IfcWasteTerminalTypeEnum
+#define SCHEMA_HAS_IfcWellKnownTextLiteral
+#define SCHEMA_HAS_IfcWindowPanelOperationEnum
+#define SCHEMA_HAS_IfcWindowPanelPositionEnum
+#define SCHEMA_HAS_IfcWindowTypeEnum
+#define SCHEMA_HAS_IfcWindowTypePartitioningEnum
+#define SCHEMA_HAS_IfcWorkCalendarTypeEnum
+#define SCHEMA_HAS_IfcWorkPlanTypeEnum
+#define SCHEMA_HAS_IfcWorkScheduleTypeEnum
+#define SCHEMA_HAS_IfcActionRequest
+#define SCHEMA_IfcActionRequest_HAS_PredefinedType
+#define SCHEMA_IfcActionRequest_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcActionRequest_HAS_Status
+#define SCHEMA_IfcActionRequest_Status_IS_OPTIONAL
+#define SCHEMA_IfcActionRequest_HAS_LongDescription
+#define SCHEMA_IfcActionRequest_LongDescription_IS_OPTIONAL
+#define SCHEMA_HAS_IfcActor
+#define SCHEMA_IfcActor_HAS_TheActor
+#define SCHEMA_IfcActor_HAS_IsActingUpon
+#define SCHEMA_HAS_IfcActorRole
+#define SCHEMA_IfcActorRole_HAS_Role
+#define SCHEMA_IfcActorRole_HAS_UserDefinedRole
+#define SCHEMA_IfcActorRole_UserDefinedRole_IS_OPTIONAL
+#define SCHEMA_IfcActorRole_HAS_Description
+#define SCHEMA_IfcActorRole_Description_IS_OPTIONAL
+#define SCHEMA_IfcActorRole_HAS_HasExternalReference
+#define SCHEMA_HAS_IfcActuator
+#define SCHEMA_IfcActuator_HAS_PredefinedType
+#define SCHEMA_IfcActuator_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcActuatorType
+#define SCHEMA_IfcActuatorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAddress
+#define SCHEMA_IfcAddress_HAS_Purpose
+#define SCHEMA_IfcAddress_Purpose_IS_OPTIONAL
+#define SCHEMA_IfcAddress_HAS_Description
+#define SCHEMA_IfcAddress_Description_IS_OPTIONAL
+#define SCHEMA_IfcAddress_HAS_UserDefinedPurpose
+#define SCHEMA_IfcAddress_UserDefinedPurpose_IS_OPTIONAL
+#define SCHEMA_IfcAddress_HAS_OfPerson
+#define SCHEMA_IfcAddress_HAS_OfOrganization
+#define SCHEMA_HAS_IfcAdvancedBrep
+#define SCHEMA_HAS_IfcAdvancedBrepWithVoids
+#define SCHEMA_IfcAdvancedBrepWithVoids_HAS_Voids
+#define SCHEMA_HAS_IfcAdvancedFace
+#define SCHEMA_HAS_IfcAirTerminal
+#define SCHEMA_IfcAirTerminal_HAS_PredefinedType
+#define SCHEMA_IfcAirTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAirTerminalBox
+#define SCHEMA_IfcAirTerminalBox_HAS_PredefinedType
+#define SCHEMA_IfcAirTerminalBox_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAirTerminalBoxType
+#define SCHEMA_IfcAirTerminalBoxType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAirTerminalType
+#define SCHEMA_IfcAirTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAirToAirHeatRecovery
+#define SCHEMA_IfcAirToAirHeatRecovery_HAS_PredefinedType
+#define SCHEMA_IfcAirToAirHeatRecovery_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAirToAirHeatRecoveryType
+#define SCHEMA_IfcAirToAirHeatRecoveryType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAlarm
+#define SCHEMA_IfcAlarm_HAS_PredefinedType
+#define SCHEMA_IfcAlarm_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAlarmType
+#define SCHEMA_IfcAlarmType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAlignment
+#define SCHEMA_IfcAlignment_HAS_PredefinedType
+#define SCHEMA_IfcAlignment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAlignmentCant
+#define SCHEMA_IfcAlignmentCant_HAS_RailHeadDistance
+#define SCHEMA_HAS_IfcAlignmentCantSegment
+#define SCHEMA_IfcAlignmentCantSegment_HAS_StartDistAlong
+#define SCHEMA_IfcAlignmentCantSegment_HAS_HorizontalLength
+#define SCHEMA_IfcAlignmentCantSegment_HAS_StartCantLeft
+#define SCHEMA_IfcAlignmentCantSegment_HAS_EndCantLeft
+#define SCHEMA_IfcAlignmentCantSegment_EndCantLeft_IS_OPTIONAL
+#define SCHEMA_IfcAlignmentCantSegment_HAS_StartCantRight
+#define SCHEMA_IfcAlignmentCantSegment_HAS_EndCantRight
+#define SCHEMA_IfcAlignmentCantSegment_EndCantRight_IS_OPTIONAL
+#define SCHEMA_IfcAlignmentCantSegment_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAlignmentHorizontal
+#define SCHEMA_HAS_IfcAlignmentHorizontalSegment
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_StartPoint
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_StartDirection
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_StartRadiusOfCurvature
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_EndRadiusOfCurvature
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_SegmentLength
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_GravityCenterLineHeight
+#define SCHEMA_IfcAlignmentHorizontalSegment_GravityCenterLineHeight_IS_OPTIONAL
+#define SCHEMA_IfcAlignmentHorizontalSegment_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAlignmentParameterSegment
+#define SCHEMA_IfcAlignmentParameterSegment_HAS_StartTag
+#define SCHEMA_IfcAlignmentParameterSegment_StartTag_IS_OPTIONAL
+#define SCHEMA_IfcAlignmentParameterSegment_HAS_EndTag
+#define SCHEMA_IfcAlignmentParameterSegment_EndTag_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAlignmentSegment
+#define SCHEMA_IfcAlignmentSegment_HAS_DesignParameters
+#define SCHEMA_HAS_IfcAlignmentVertical
+#define SCHEMA_HAS_IfcAlignmentVerticalSegment
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_StartDistAlong
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_HorizontalLength
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_StartHeight
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_StartGradient
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_EndGradient
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_RadiusOfCurvature
+#define SCHEMA_IfcAlignmentVerticalSegment_RadiusOfCurvature_IS_OPTIONAL
+#define SCHEMA_IfcAlignmentVerticalSegment_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAnnotation
+#define SCHEMA_IfcAnnotation_HAS_PredefinedType
+#define SCHEMA_IfcAnnotation_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcAnnotation_HAS_ContainedInStructure
+#define SCHEMA_HAS_IfcAnnotationFillArea
+#define SCHEMA_IfcAnnotationFillArea_HAS_OuterBoundary
+#define SCHEMA_IfcAnnotationFillArea_HAS_InnerBoundaries
+#define SCHEMA_IfcAnnotationFillArea_InnerBoundaries_IS_OPTIONAL
+#define SCHEMA_HAS_IfcApplication
+#define SCHEMA_IfcApplication_HAS_ApplicationDeveloper
+#define SCHEMA_IfcApplication_HAS_Version
+#define SCHEMA_IfcApplication_HAS_ApplicationFullName
+#define SCHEMA_IfcApplication_HAS_ApplicationIdentifier
+#define SCHEMA_HAS_IfcAppliedValue
+#define SCHEMA_IfcAppliedValue_HAS_Name
+#define SCHEMA_IfcAppliedValue_Name_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_Description
+#define SCHEMA_IfcAppliedValue_Description_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_AppliedValue
+#define SCHEMA_IfcAppliedValue_AppliedValue_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_UnitBasis
+#define SCHEMA_IfcAppliedValue_UnitBasis_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_ApplicableDate
+#define SCHEMA_IfcAppliedValue_ApplicableDate_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_FixedUntilDate
+#define SCHEMA_IfcAppliedValue_FixedUntilDate_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_Category
+#define SCHEMA_IfcAppliedValue_Category_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_Condition
+#define SCHEMA_IfcAppliedValue_Condition_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_ArithmeticOperator
+#define SCHEMA_IfcAppliedValue_ArithmeticOperator_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_Components
+#define SCHEMA_IfcAppliedValue_Components_IS_OPTIONAL
+#define SCHEMA_IfcAppliedValue_HAS_HasExternalReference
+#define SCHEMA_HAS_IfcApproval
+#define SCHEMA_IfcApproval_HAS_Identifier
+#define SCHEMA_IfcApproval_Identifier_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_Name
+#define SCHEMA_IfcApproval_Name_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_Description
+#define SCHEMA_IfcApproval_Description_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_TimeOfApproval
+#define SCHEMA_IfcApproval_TimeOfApproval_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_Status
+#define SCHEMA_IfcApproval_Status_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_Level
+#define SCHEMA_IfcApproval_Level_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_Qualifier
+#define SCHEMA_IfcApproval_Qualifier_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_RequestingApproval
+#define SCHEMA_IfcApproval_RequestingApproval_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_GivingApproval
+#define SCHEMA_IfcApproval_GivingApproval_IS_OPTIONAL
+#define SCHEMA_IfcApproval_HAS_HasExternalReferences
+#define SCHEMA_IfcApproval_HAS_ApprovedObjects
+#define SCHEMA_IfcApproval_HAS_ApprovedResources
+#define SCHEMA_IfcApproval_HAS_IsRelatedWith
+#define SCHEMA_IfcApproval_HAS_Relates
+#define SCHEMA_HAS_IfcApprovalRelationship
+#define SCHEMA_IfcApprovalRelationship_HAS_RelatingApproval
+#define SCHEMA_IfcApprovalRelationship_HAS_RelatedApprovals
+#define SCHEMA_HAS_IfcArbitraryClosedProfileDef
+#define SCHEMA_IfcArbitraryClosedProfileDef_HAS_OuterCurve
+#define SCHEMA_HAS_IfcArbitraryOpenProfileDef
+#define SCHEMA_IfcArbitraryOpenProfileDef_HAS_Curve
+#define SCHEMA_HAS_IfcArbitraryProfileDefWithVoids
+#define SCHEMA_IfcArbitraryProfileDefWithVoids_HAS_InnerCurves
+#define SCHEMA_HAS_IfcAsset
+#define SCHEMA_IfcAsset_HAS_Identification
+#define SCHEMA_IfcAsset_Identification_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_OriginalValue
+#define SCHEMA_IfcAsset_OriginalValue_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_CurrentValue
+#define SCHEMA_IfcAsset_CurrentValue_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_TotalReplacementCost
+#define SCHEMA_IfcAsset_TotalReplacementCost_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_Owner
+#define SCHEMA_IfcAsset_Owner_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_User
+#define SCHEMA_IfcAsset_User_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_ResponsiblePerson
+#define SCHEMA_IfcAsset_ResponsiblePerson_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_IncorporationDate
+#define SCHEMA_IfcAsset_IncorporationDate_IS_OPTIONAL
+#define SCHEMA_IfcAsset_HAS_DepreciatedValue
+#define SCHEMA_IfcAsset_DepreciatedValue_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAsymmetricIShapeProfileDef
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_BottomFlangeWidth
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_OverallDepth
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_WebThickness
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_BottomFlangeThickness
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_BottomFlangeFilletRadius
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_BottomFlangeFilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_TopFlangeWidth
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_TopFlangeThickness
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_TopFlangeThickness_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_TopFlangeFilletRadius
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_TopFlangeFilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_BottomFlangeEdgeRadius
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_BottomFlangeEdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_BottomFlangeSlope
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_BottomFlangeSlope_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_TopFlangeEdgeRadius
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_TopFlangeEdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_HAS_TopFlangeSlope
+#define SCHEMA_IfcAsymmetricIShapeProfileDef_TopFlangeSlope_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAudioVisualAppliance
+#define SCHEMA_IfcAudioVisualAppliance_HAS_PredefinedType
+#define SCHEMA_IfcAudioVisualAppliance_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAudioVisualApplianceType
+#define SCHEMA_IfcAudioVisualApplianceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcAxis1Placement
+#define SCHEMA_IfcAxis1Placement_HAS_Axis
+#define SCHEMA_IfcAxis1Placement_Axis_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAxis2Placement2D
+#define SCHEMA_IfcAxis2Placement2D_HAS_RefDirection
+#define SCHEMA_IfcAxis2Placement2D_RefDirection_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAxis2Placement3D
+#define SCHEMA_IfcAxis2Placement3D_HAS_Axis
+#define SCHEMA_IfcAxis2Placement3D_Axis_IS_OPTIONAL
+#define SCHEMA_IfcAxis2Placement3D_HAS_RefDirection
+#define SCHEMA_IfcAxis2Placement3D_RefDirection_IS_OPTIONAL
+#define SCHEMA_HAS_IfcAxis2PlacementLinear
+#define SCHEMA_IfcAxis2PlacementLinear_HAS_Axis
+#define SCHEMA_IfcAxis2PlacementLinear_Axis_IS_OPTIONAL
+#define SCHEMA_IfcAxis2PlacementLinear_HAS_RefDirection
+#define SCHEMA_IfcAxis2PlacementLinear_RefDirection_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBSplineCurve
+#define SCHEMA_IfcBSplineCurve_HAS_Degree
+#define SCHEMA_IfcBSplineCurve_HAS_ControlPointsList
+#define SCHEMA_IfcBSplineCurve_HAS_CurveForm
+#define SCHEMA_IfcBSplineCurve_HAS_ClosedCurve
+#define SCHEMA_IfcBSplineCurve_HAS_SelfIntersect
+#define SCHEMA_HAS_IfcBSplineCurveWithKnots
+#define SCHEMA_IfcBSplineCurveWithKnots_HAS_KnotMultiplicities
+#define SCHEMA_IfcBSplineCurveWithKnots_HAS_Knots
+#define SCHEMA_IfcBSplineCurveWithKnots_HAS_KnotSpec
+#define SCHEMA_HAS_IfcBSplineSurface
+#define SCHEMA_IfcBSplineSurface_HAS_UDegree
+#define SCHEMA_IfcBSplineSurface_HAS_VDegree
+#define SCHEMA_IfcBSplineSurface_HAS_ControlPointsList
+#define SCHEMA_IfcBSplineSurface_HAS_SurfaceForm
+#define SCHEMA_IfcBSplineSurface_HAS_UClosed
+#define SCHEMA_IfcBSplineSurface_HAS_VClosed
+#define SCHEMA_IfcBSplineSurface_HAS_SelfIntersect
+#define SCHEMA_HAS_IfcBSplineSurfaceWithKnots
+#define SCHEMA_IfcBSplineSurfaceWithKnots_HAS_UMultiplicities
+#define SCHEMA_IfcBSplineSurfaceWithKnots_HAS_VMultiplicities
+#define SCHEMA_IfcBSplineSurfaceWithKnots_HAS_UKnots
+#define SCHEMA_IfcBSplineSurfaceWithKnots_HAS_VKnots
+#define SCHEMA_IfcBSplineSurfaceWithKnots_HAS_KnotSpec
+#define SCHEMA_HAS_IfcBeam
+#define SCHEMA_IfcBeam_HAS_PredefinedType
+#define SCHEMA_IfcBeam_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBeamType
+#define SCHEMA_IfcBeamType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcBearing
+#define SCHEMA_IfcBearing_HAS_PredefinedType
+#define SCHEMA_IfcBearing_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBearingType
+#define SCHEMA_IfcBearingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcBlobTexture
+#define SCHEMA_IfcBlobTexture_HAS_RasterFormat
+#define SCHEMA_IfcBlobTexture_HAS_RasterCode
+#define SCHEMA_HAS_IfcBlock
+#define SCHEMA_IfcBlock_HAS_XLength
+#define SCHEMA_IfcBlock_HAS_YLength
+#define SCHEMA_IfcBlock_HAS_ZLength
+#define SCHEMA_HAS_IfcBoiler
+#define SCHEMA_IfcBoiler_HAS_PredefinedType
+#define SCHEMA_IfcBoiler_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoilerType
+#define SCHEMA_IfcBoilerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcBooleanClippingResult
+#define SCHEMA_HAS_IfcBooleanResult
+#define SCHEMA_IfcBooleanResult_HAS_Operator
+#define SCHEMA_IfcBooleanResult_HAS_FirstOperand
+#define SCHEMA_IfcBooleanResult_HAS_SecondOperand
+#define SCHEMA_HAS_IfcBorehole
+#define SCHEMA_HAS_IfcBoundaryCondition
+#define SCHEMA_IfcBoundaryCondition_HAS_Name
+#define SCHEMA_IfcBoundaryCondition_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoundaryCurve
+#define SCHEMA_HAS_IfcBoundaryEdgeCondition
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_TranslationalStiffnessByLengthX
+#define SCHEMA_IfcBoundaryEdgeCondition_TranslationalStiffnessByLengthX_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_TranslationalStiffnessByLengthY
+#define SCHEMA_IfcBoundaryEdgeCondition_TranslationalStiffnessByLengthY_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_TranslationalStiffnessByLengthZ
+#define SCHEMA_IfcBoundaryEdgeCondition_TranslationalStiffnessByLengthZ_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_RotationalStiffnessByLengthX
+#define SCHEMA_IfcBoundaryEdgeCondition_RotationalStiffnessByLengthX_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_RotationalStiffnessByLengthY
+#define SCHEMA_IfcBoundaryEdgeCondition_RotationalStiffnessByLengthY_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryEdgeCondition_HAS_RotationalStiffnessByLengthZ
+#define SCHEMA_IfcBoundaryEdgeCondition_RotationalStiffnessByLengthZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoundaryFaceCondition
+#define SCHEMA_IfcBoundaryFaceCondition_HAS_TranslationalStiffnessByAreaX
+#define SCHEMA_IfcBoundaryFaceCondition_TranslationalStiffnessByAreaX_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryFaceCondition_HAS_TranslationalStiffnessByAreaY
+#define SCHEMA_IfcBoundaryFaceCondition_TranslationalStiffnessByAreaY_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryFaceCondition_HAS_TranslationalStiffnessByAreaZ
+#define SCHEMA_IfcBoundaryFaceCondition_TranslationalStiffnessByAreaZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoundaryNodeCondition
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_TranslationalStiffnessX
+#define SCHEMA_IfcBoundaryNodeCondition_TranslationalStiffnessX_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_TranslationalStiffnessY
+#define SCHEMA_IfcBoundaryNodeCondition_TranslationalStiffnessY_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_TranslationalStiffnessZ
+#define SCHEMA_IfcBoundaryNodeCondition_TranslationalStiffnessZ_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_RotationalStiffnessX
+#define SCHEMA_IfcBoundaryNodeCondition_RotationalStiffnessX_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_RotationalStiffnessY
+#define SCHEMA_IfcBoundaryNodeCondition_RotationalStiffnessY_IS_OPTIONAL
+#define SCHEMA_IfcBoundaryNodeCondition_HAS_RotationalStiffnessZ
+#define SCHEMA_IfcBoundaryNodeCondition_RotationalStiffnessZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoundaryNodeConditionWarping
+#define SCHEMA_IfcBoundaryNodeConditionWarping_HAS_WarpingStiffness
+#define SCHEMA_IfcBoundaryNodeConditionWarping_WarpingStiffness_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBoundedCurve
+#define SCHEMA_HAS_IfcBoundedSurface
+#define SCHEMA_HAS_IfcBoundingBox
+#define SCHEMA_IfcBoundingBox_HAS_Corner
+#define SCHEMA_IfcBoundingBox_HAS_XDim
+#define SCHEMA_IfcBoundingBox_HAS_YDim
+#define SCHEMA_IfcBoundingBox_HAS_ZDim
+#define SCHEMA_HAS_IfcBoxedHalfSpace
+#define SCHEMA_IfcBoxedHalfSpace_HAS_Enclosure
+#define SCHEMA_HAS_IfcBridge
+#define SCHEMA_IfcBridge_HAS_PredefinedType
+#define SCHEMA_IfcBridge_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBridgePart
+#define SCHEMA_IfcBridgePart_HAS_PredefinedType
+#define SCHEMA_IfcBridgePart_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuilding
+#define SCHEMA_IfcBuilding_HAS_ElevationOfRefHeight
+#define SCHEMA_IfcBuilding_ElevationOfRefHeight_IS_OPTIONAL
+#define SCHEMA_IfcBuilding_HAS_ElevationOfTerrain
+#define SCHEMA_IfcBuilding_ElevationOfTerrain_IS_OPTIONAL
+#define SCHEMA_IfcBuilding_HAS_BuildingAddress
+#define SCHEMA_IfcBuilding_BuildingAddress_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuildingElementPart
+#define SCHEMA_IfcBuildingElementPart_HAS_PredefinedType
+#define SCHEMA_IfcBuildingElementPart_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuildingElementPartType
+#define SCHEMA_IfcBuildingElementPartType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcBuildingElementProxy
+#define SCHEMA_IfcBuildingElementProxy_HAS_PredefinedType
+#define SCHEMA_IfcBuildingElementProxy_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuildingElementProxyType
+#define SCHEMA_IfcBuildingElementProxyType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcBuildingStorey
+#define SCHEMA_IfcBuildingStorey_HAS_Elevation
+#define SCHEMA_IfcBuildingStorey_Elevation_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuildingSystem
+#define SCHEMA_IfcBuildingSystem_HAS_PredefinedType
+#define SCHEMA_IfcBuildingSystem_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcBuildingSystem_HAS_LongName
+#define SCHEMA_IfcBuildingSystem_LongName_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBuiltElement
+#define SCHEMA_HAS_IfcBuiltElementType
+#define SCHEMA_HAS_IfcBuiltSystem
+#define SCHEMA_IfcBuiltSystem_HAS_PredefinedType
+#define SCHEMA_IfcBuiltSystem_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcBuiltSystem_HAS_LongName
+#define SCHEMA_IfcBuiltSystem_LongName_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBurner
+#define SCHEMA_IfcBurner_HAS_PredefinedType
+#define SCHEMA_IfcBurner_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcBurnerType
+#define SCHEMA_IfcBurnerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCShapeProfileDef
+#define SCHEMA_IfcCShapeProfileDef_HAS_Depth
+#define SCHEMA_IfcCShapeProfileDef_HAS_Width
+#define SCHEMA_IfcCShapeProfileDef_HAS_WallThickness
+#define SCHEMA_IfcCShapeProfileDef_HAS_Girth
+#define SCHEMA_IfcCShapeProfileDef_HAS_InternalFilletRadius
+#define SCHEMA_IfcCShapeProfileDef_InternalFilletRadius_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCableCarrierFitting
+#define SCHEMA_IfcCableCarrierFitting_HAS_PredefinedType
+#define SCHEMA_IfcCableCarrierFitting_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCableCarrierFittingType
+#define SCHEMA_IfcCableCarrierFittingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCableCarrierSegment
+#define SCHEMA_IfcCableCarrierSegment_HAS_PredefinedType
+#define SCHEMA_IfcCableCarrierSegment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCableCarrierSegmentType
+#define SCHEMA_IfcCableCarrierSegmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCableFitting
+#define SCHEMA_IfcCableFitting_HAS_PredefinedType
+#define SCHEMA_IfcCableFitting_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCableFittingType
+#define SCHEMA_IfcCableFittingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCableSegment
+#define SCHEMA_IfcCableSegment_HAS_PredefinedType
+#define SCHEMA_IfcCableSegment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCableSegmentType
+#define SCHEMA_IfcCableSegmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCaissonFoundation
+#define SCHEMA_IfcCaissonFoundation_HAS_PredefinedType
+#define SCHEMA_IfcCaissonFoundation_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCaissonFoundationType
+#define SCHEMA_IfcCaissonFoundationType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCartesianPoint
+#define SCHEMA_IfcCartesianPoint_HAS_Coordinates
+#define SCHEMA_HAS_IfcCartesianPointList
+#define SCHEMA_HAS_IfcCartesianPointList2D
+#define SCHEMA_IfcCartesianPointList2D_HAS_CoordList
+#define SCHEMA_IfcCartesianPointList2D_HAS_TagList
+#define SCHEMA_IfcCartesianPointList2D_TagList_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCartesianPointList3D
+#define SCHEMA_IfcCartesianPointList3D_HAS_CoordList
+#define SCHEMA_IfcCartesianPointList3D_HAS_TagList
+#define SCHEMA_IfcCartesianPointList3D_TagList_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCartesianTransformationOperator
+#define SCHEMA_IfcCartesianTransformationOperator_HAS_Axis1
+#define SCHEMA_IfcCartesianTransformationOperator_Axis1_IS_OPTIONAL
+#define SCHEMA_IfcCartesianTransformationOperator_HAS_Axis2
+#define SCHEMA_IfcCartesianTransformationOperator_Axis2_IS_OPTIONAL
+#define SCHEMA_IfcCartesianTransformationOperator_HAS_LocalOrigin
+#define SCHEMA_IfcCartesianTransformationOperator_HAS_Scale
+#define SCHEMA_IfcCartesianTransformationOperator_Scale_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCartesianTransformationOperator2D
+#define SCHEMA_HAS_IfcCartesianTransformationOperator2DnonUniform
+#define SCHEMA_IfcCartesianTransformationOperator2DnonUniform_HAS_Scale2
+#define SCHEMA_IfcCartesianTransformationOperator2DnonUniform_Scale2_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCartesianTransformationOperator3D
+#define SCHEMA_IfcCartesianTransformationOperator3D_HAS_Axis3
+#define SCHEMA_IfcCartesianTransformationOperator3D_Axis3_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCartesianTransformationOperator3DnonUniform
+#define SCHEMA_IfcCartesianTransformationOperator3DnonUniform_HAS_Scale2
+#define SCHEMA_IfcCartesianTransformationOperator3DnonUniform_Scale2_IS_OPTIONAL
+#define SCHEMA_IfcCartesianTransformationOperator3DnonUniform_HAS_Scale3
+#define SCHEMA_IfcCartesianTransformationOperator3DnonUniform_Scale3_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCenterLineProfileDef
+#define SCHEMA_IfcCenterLineProfileDef_HAS_Thickness
+#define SCHEMA_HAS_IfcChiller
+#define SCHEMA_IfcChiller_HAS_PredefinedType
+#define SCHEMA_IfcChiller_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcChillerType
+#define SCHEMA_IfcChillerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcChimney
+#define SCHEMA_IfcChimney_HAS_PredefinedType
+#define SCHEMA_IfcChimney_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcChimneyType
+#define SCHEMA_IfcChimneyType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCircle
+#define SCHEMA_IfcCircle_HAS_Radius
+#define SCHEMA_HAS_IfcCircleHollowProfileDef
+#define SCHEMA_IfcCircleHollowProfileDef_HAS_WallThickness
+#define SCHEMA_HAS_IfcCircleProfileDef
+#define SCHEMA_IfcCircleProfileDef_HAS_Radius
+#define SCHEMA_HAS_IfcCivilElement
+#define SCHEMA_HAS_IfcCivilElementType
+#define SCHEMA_HAS_IfcClassification
+#define SCHEMA_IfcClassification_HAS_Source
+#define SCHEMA_IfcClassification_Source_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_Edition
+#define SCHEMA_IfcClassification_Edition_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_EditionDate
+#define SCHEMA_IfcClassification_EditionDate_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_Name
+#define SCHEMA_IfcClassification_HAS_Description
+#define SCHEMA_IfcClassification_Description_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_Specification
+#define SCHEMA_IfcClassification_Specification_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_ReferenceTokens
+#define SCHEMA_IfcClassification_ReferenceTokens_IS_OPTIONAL
+#define SCHEMA_IfcClassification_HAS_ClassificationForObjects
+#define SCHEMA_IfcClassification_HAS_HasReferences
+#define SCHEMA_HAS_IfcClassificationReference
+#define SCHEMA_IfcClassificationReference_HAS_ReferencedSource
+#define SCHEMA_IfcClassificationReference_ReferencedSource_IS_OPTIONAL
+#define SCHEMA_IfcClassificationReference_HAS_Description
+#define SCHEMA_IfcClassificationReference_Description_IS_OPTIONAL
+#define SCHEMA_IfcClassificationReference_HAS_Sort
+#define SCHEMA_IfcClassificationReference_Sort_IS_OPTIONAL
+#define SCHEMA_IfcClassificationReference_HAS_ClassificationRefForObjects
+#define SCHEMA_IfcClassificationReference_HAS_HasReferences
+#define SCHEMA_HAS_IfcClosedShell
+#define SCHEMA_HAS_IfcClothoid
+#define SCHEMA_IfcClothoid_HAS_ClothoidConstant
+#define SCHEMA_HAS_IfcCoil
+#define SCHEMA_IfcCoil_HAS_PredefinedType
+#define SCHEMA_IfcCoil_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCoilType
+#define SCHEMA_IfcCoilType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcColourRgb
+#define SCHEMA_IfcColourRgb_HAS_Red
+#define SCHEMA_IfcColourRgb_HAS_Green
+#define SCHEMA_IfcColourRgb_HAS_Blue
+#define SCHEMA_HAS_IfcColourRgbList
+#define SCHEMA_IfcColourRgbList_HAS_ColourList
+#define SCHEMA_HAS_IfcColourSpecification
+#define SCHEMA_IfcColourSpecification_HAS_Name
+#define SCHEMA_IfcColourSpecification_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcColumn
+#define SCHEMA_IfcColumn_HAS_PredefinedType
+#define SCHEMA_IfcColumn_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcColumnType
+#define SCHEMA_IfcColumnType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCommunicationsAppliance
+#define SCHEMA_IfcCommunicationsAppliance_HAS_PredefinedType
+#define SCHEMA_IfcCommunicationsAppliance_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCommunicationsApplianceType
+#define SCHEMA_IfcCommunicationsApplianceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcComplexProperty
+#define SCHEMA_IfcComplexProperty_HAS_UsageName
+#define SCHEMA_IfcComplexProperty_HAS_HasProperties
+#define SCHEMA_HAS_IfcComplexPropertyTemplate
+#define SCHEMA_IfcComplexPropertyTemplate_HAS_UsageName
+#define SCHEMA_IfcComplexPropertyTemplate_UsageName_IS_OPTIONAL
+#define SCHEMA_IfcComplexPropertyTemplate_HAS_TemplateType
+#define SCHEMA_IfcComplexPropertyTemplate_TemplateType_IS_OPTIONAL
+#define SCHEMA_IfcComplexPropertyTemplate_HAS_HasPropertyTemplates
+#define SCHEMA_IfcComplexPropertyTemplate_HasPropertyTemplates_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCompositeCurve
+#define SCHEMA_IfcCompositeCurve_HAS_Segments
+#define SCHEMA_IfcCompositeCurve_HAS_SelfIntersect
+#define SCHEMA_HAS_IfcCompositeCurveOnSurface
+#define SCHEMA_HAS_IfcCompositeCurveSegment
+#define SCHEMA_IfcCompositeCurveSegment_HAS_SameSense
+#define SCHEMA_IfcCompositeCurveSegment_HAS_ParentCurve
+#define SCHEMA_HAS_IfcCompositeProfileDef
+#define SCHEMA_IfcCompositeProfileDef_HAS_Profiles
+#define SCHEMA_IfcCompositeProfileDef_HAS_Label
+#define SCHEMA_IfcCompositeProfileDef_Label_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCompressor
+#define SCHEMA_IfcCompressor_HAS_PredefinedType
+#define SCHEMA_IfcCompressor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCompressorType
+#define SCHEMA_IfcCompressorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCondenser
+#define SCHEMA_IfcCondenser_HAS_PredefinedType
+#define SCHEMA_IfcCondenser_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCondenserType
+#define SCHEMA_IfcCondenserType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcConic
+#define SCHEMA_IfcConic_HAS_Position
+#define SCHEMA_HAS_IfcConnectedFaceSet
+#define SCHEMA_IfcConnectedFaceSet_HAS_CfsFaces
+#define SCHEMA_HAS_IfcConnectionCurveGeometry
+#define SCHEMA_IfcConnectionCurveGeometry_HAS_CurveOnRelatingElement
+#define SCHEMA_IfcConnectionCurveGeometry_HAS_CurveOnRelatedElement
+#define SCHEMA_IfcConnectionCurveGeometry_CurveOnRelatedElement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConnectionGeometry
+#define SCHEMA_HAS_IfcConnectionPointEccentricity
+#define SCHEMA_IfcConnectionPointEccentricity_HAS_EccentricityInX
+#define SCHEMA_IfcConnectionPointEccentricity_EccentricityInX_IS_OPTIONAL
+#define SCHEMA_IfcConnectionPointEccentricity_HAS_EccentricityInY
+#define SCHEMA_IfcConnectionPointEccentricity_EccentricityInY_IS_OPTIONAL
+#define SCHEMA_IfcConnectionPointEccentricity_HAS_EccentricityInZ
+#define SCHEMA_IfcConnectionPointEccentricity_EccentricityInZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConnectionPointGeometry
+#define SCHEMA_IfcConnectionPointGeometry_HAS_PointOnRelatingElement
+#define SCHEMA_IfcConnectionPointGeometry_HAS_PointOnRelatedElement
+#define SCHEMA_IfcConnectionPointGeometry_PointOnRelatedElement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConnectionSurfaceGeometry
+#define SCHEMA_IfcConnectionSurfaceGeometry_HAS_SurfaceOnRelatingElement
+#define SCHEMA_IfcConnectionSurfaceGeometry_HAS_SurfaceOnRelatedElement
+#define SCHEMA_IfcConnectionSurfaceGeometry_SurfaceOnRelatedElement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConnectionVolumeGeometry
+#define SCHEMA_IfcConnectionVolumeGeometry_HAS_VolumeOnRelatingElement
+#define SCHEMA_IfcConnectionVolumeGeometry_HAS_VolumeOnRelatedElement
+#define SCHEMA_IfcConnectionVolumeGeometry_VolumeOnRelatedElement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConstraint
+#define SCHEMA_IfcConstraint_HAS_Name
+#define SCHEMA_IfcConstraint_HAS_Description
+#define SCHEMA_IfcConstraint_Description_IS_OPTIONAL
+#define SCHEMA_IfcConstraint_HAS_ConstraintGrade
+#define SCHEMA_IfcConstraint_HAS_ConstraintSource
+#define SCHEMA_IfcConstraint_ConstraintSource_IS_OPTIONAL
+#define SCHEMA_IfcConstraint_HAS_CreatingActor
+#define SCHEMA_IfcConstraint_CreatingActor_IS_OPTIONAL
+#define SCHEMA_IfcConstraint_HAS_CreationTime
+#define SCHEMA_IfcConstraint_CreationTime_IS_OPTIONAL
+#define SCHEMA_IfcConstraint_HAS_UserDefinedGrade
+#define SCHEMA_IfcConstraint_UserDefinedGrade_IS_OPTIONAL
+#define SCHEMA_IfcConstraint_HAS_HasExternalReferences
+#define SCHEMA_IfcConstraint_HAS_PropertiesForConstraint
+#define SCHEMA_HAS_IfcConstructionEquipmentResource
+#define SCHEMA_IfcConstructionEquipmentResource_HAS_PredefinedType
+#define SCHEMA_IfcConstructionEquipmentResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConstructionEquipmentResourceType
+#define SCHEMA_IfcConstructionEquipmentResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcConstructionMaterialResource
+#define SCHEMA_IfcConstructionMaterialResource_HAS_PredefinedType
+#define SCHEMA_IfcConstructionMaterialResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConstructionMaterialResourceType
+#define SCHEMA_IfcConstructionMaterialResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcConstructionProductResource
+#define SCHEMA_IfcConstructionProductResource_HAS_PredefinedType
+#define SCHEMA_IfcConstructionProductResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConstructionProductResourceType
+#define SCHEMA_IfcConstructionProductResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcConstructionResource
+#define SCHEMA_IfcConstructionResource_HAS_Usage
+#define SCHEMA_IfcConstructionResource_Usage_IS_OPTIONAL
+#define SCHEMA_IfcConstructionResource_HAS_BaseCosts
+#define SCHEMA_IfcConstructionResource_BaseCosts_IS_OPTIONAL
+#define SCHEMA_IfcConstructionResource_HAS_BaseQuantity
+#define SCHEMA_IfcConstructionResource_BaseQuantity_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConstructionResourceType
+#define SCHEMA_IfcConstructionResourceType_HAS_BaseCosts
+#define SCHEMA_IfcConstructionResourceType_BaseCosts_IS_OPTIONAL
+#define SCHEMA_IfcConstructionResourceType_HAS_BaseQuantity
+#define SCHEMA_IfcConstructionResourceType_BaseQuantity_IS_OPTIONAL
+#define SCHEMA_HAS_IfcContext
+#define SCHEMA_IfcContext_HAS_ObjectType
+#define SCHEMA_IfcContext_ObjectType_IS_OPTIONAL
+#define SCHEMA_IfcContext_HAS_LongName
+#define SCHEMA_IfcContext_LongName_IS_OPTIONAL
+#define SCHEMA_IfcContext_HAS_Phase
+#define SCHEMA_IfcContext_Phase_IS_OPTIONAL
+#define SCHEMA_IfcContext_HAS_RepresentationContexts
+#define SCHEMA_IfcContext_RepresentationContexts_IS_OPTIONAL
+#define SCHEMA_IfcContext_HAS_UnitsInContext
+#define SCHEMA_IfcContext_UnitsInContext_IS_OPTIONAL
+#define SCHEMA_IfcContext_HAS_IsDefinedBy
+#define SCHEMA_IfcContext_HAS_Declares
+#define SCHEMA_HAS_IfcContextDependentUnit
+#define SCHEMA_IfcContextDependentUnit_HAS_Name
+#define SCHEMA_IfcContextDependentUnit_HAS_HasExternalReference
+#define SCHEMA_HAS_IfcControl
+#define SCHEMA_IfcControl_HAS_Identification
+#define SCHEMA_IfcControl_Identification_IS_OPTIONAL
+#define SCHEMA_IfcControl_HAS_Controls
+#define SCHEMA_HAS_IfcController
+#define SCHEMA_IfcController_HAS_PredefinedType
+#define SCHEMA_IfcController_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcControllerType
+#define SCHEMA_IfcControllerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcConversionBasedUnit
+#define SCHEMA_IfcConversionBasedUnit_HAS_Name
+#define SCHEMA_IfcConversionBasedUnit_HAS_ConversionFactor
+#define SCHEMA_IfcConversionBasedUnit_HAS_HasExternalReference
+#define SCHEMA_HAS_IfcConversionBasedUnitWithOffset
+#define SCHEMA_IfcConversionBasedUnitWithOffset_HAS_ConversionOffset
+#define SCHEMA_HAS_IfcConveyorSegment
+#define SCHEMA_IfcConveyorSegment_HAS_PredefinedType
+#define SCHEMA_IfcConveyorSegment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcConveyorSegmentType
+#define SCHEMA_IfcConveyorSegmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCooledBeam
+#define SCHEMA_IfcCooledBeam_HAS_PredefinedType
+#define SCHEMA_IfcCooledBeam_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCooledBeamType
+#define SCHEMA_IfcCooledBeamType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCoolingTower
+#define SCHEMA_IfcCoolingTower_HAS_PredefinedType
+#define SCHEMA_IfcCoolingTower_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCoolingTowerType
+#define SCHEMA_IfcCoolingTowerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCoordinateOperation
+#define SCHEMA_IfcCoordinateOperation_HAS_SourceCRS
+#define SCHEMA_IfcCoordinateOperation_HAS_TargetCRS
+#define SCHEMA_HAS_IfcCoordinateReferenceSystem
+#define SCHEMA_IfcCoordinateReferenceSystem_HAS_Name
+#define SCHEMA_IfcCoordinateReferenceSystem_Name_IS_OPTIONAL
+#define SCHEMA_IfcCoordinateReferenceSystem_HAS_Description
+#define SCHEMA_IfcCoordinateReferenceSystem_Description_IS_OPTIONAL
+#define SCHEMA_IfcCoordinateReferenceSystem_HAS_GeodeticDatum
+#define SCHEMA_IfcCoordinateReferenceSystem_GeodeticDatum_IS_OPTIONAL
+#define SCHEMA_IfcCoordinateReferenceSystem_HAS_HasCoordinateOperation
+#define SCHEMA_IfcCoordinateReferenceSystem_HAS_WellKnownText
+#define SCHEMA_HAS_IfcCosineSpiral
+#define SCHEMA_IfcCosineSpiral_HAS_CosineTerm
+#define SCHEMA_IfcCosineSpiral_HAS_ConstantTerm
+#define SCHEMA_IfcCosineSpiral_ConstantTerm_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCostItem
+#define SCHEMA_IfcCostItem_HAS_PredefinedType
+#define SCHEMA_IfcCostItem_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcCostItem_HAS_CostValues
+#define SCHEMA_IfcCostItem_CostValues_IS_OPTIONAL
+#define SCHEMA_IfcCostItem_HAS_CostQuantities
+#define SCHEMA_IfcCostItem_CostQuantities_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCostSchedule
+#define SCHEMA_IfcCostSchedule_HAS_PredefinedType
+#define SCHEMA_IfcCostSchedule_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcCostSchedule_HAS_Status
+#define SCHEMA_IfcCostSchedule_Status_IS_OPTIONAL
+#define SCHEMA_IfcCostSchedule_HAS_SubmittedOn
+#define SCHEMA_IfcCostSchedule_SubmittedOn_IS_OPTIONAL
+#define SCHEMA_IfcCostSchedule_HAS_UpdateDate
+#define SCHEMA_IfcCostSchedule_UpdateDate_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCostValue
+#define SCHEMA_HAS_IfcCourse
+#define SCHEMA_IfcCourse_HAS_PredefinedType
+#define SCHEMA_IfcCourse_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCourseType
+#define SCHEMA_IfcCourseType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCovering
+#define SCHEMA_IfcCovering_HAS_PredefinedType
+#define SCHEMA_IfcCovering_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcCovering_HAS_CoversSpaces
+#define SCHEMA_IfcCovering_HAS_CoversElements
+#define SCHEMA_HAS_IfcCoveringType
+#define SCHEMA_IfcCoveringType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCrewResource
+#define SCHEMA_IfcCrewResource_HAS_PredefinedType
+#define SCHEMA_IfcCrewResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCrewResourceType
+#define SCHEMA_IfcCrewResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCsgPrimitive3D
+#define SCHEMA_IfcCsgPrimitive3D_HAS_Position
+#define SCHEMA_HAS_IfcCsgSolid
+#define SCHEMA_IfcCsgSolid_HAS_TreeRootExpression
+#define SCHEMA_HAS_IfcCurrencyRelationship
+#define SCHEMA_IfcCurrencyRelationship_HAS_RelatingMonetaryUnit
+#define SCHEMA_IfcCurrencyRelationship_HAS_RelatedMonetaryUnit
+#define SCHEMA_IfcCurrencyRelationship_HAS_ExchangeRate
+#define SCHEMA_IfcCurrencyRelationship_HAS_RateDateTime
+#define SCHEMA_IfcCurrencyRelationship_RateDateTime_IS_OPTIONAL
+#define SCHEMA_IfcCurrencyRelationship_HAS_RateSource
+#define SCHEMA_IfcCurrencyRelationship_RateSource_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCurtainWall
+#define SCHEMA_IfcCurtainWall_HAS_PredefinedType
+#define SCHEMA_IfcCurtainWall_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCurtainWallType
+#define SCHEMA_IfcCurtainWallType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcCurve
+#define SCHEMA_HAS_IfcCurveBoundedPlane
+#define SCHEMA_IfcCurveBoundedPlane_HAS_BasisSurface
+#define SCHEMA_IfcCurveBoundedPlane_HAS_OuterBoundary
+#define SCHEMA_IfcCurveBoundedPlane_HAS_InnerBoundaries
+#define SCHEMA_HAS_IfcCurveBoundedSurface
+#define SCHEMA_IfcCurveBoundedSurface_HAS_BasisSurface
+#define SCHEMA_IfcCurveBoundedSurface_HAS_Boundaries
+#define SCHEMA_IfcCurveBoundedSurface_HAS_ImplicitOuter
+#define SCHEMA_HAS_IfcCurveSegment
+#define SCHEMA_IfcCurveSegment_HAS_Placement
+#define SCHEMA_IfcCurveSegment_HAS_SegmentStart
+#define SCHEMA_IfcCurveSegment_HAS_SegmentLength
+#define SCHEMA_IfcCurveSegment_HAS_ParentCurve
+#define SCHEMA_HAS_IfcCurveStyle
+#define SCHEMA_IfcCurveStyle_HAS_CurveFont
+#define SCHEMA_IfcCurveStyle_CurveFont_IS_OPTIONAL
+#define SCHEMA_IfcCurveStyle_HAS_CurveWidth
+#define SCHEMA_IfcCurveStyle_CurveWidth_IS_OPTIONAL
+#define SCHEMA_IfcCurveStyle_HAS_CurveColour
+#define SCHEMA_IfcCurveStyle_CurveColour_IS_OPTIONAL
+#define SCHEMA_IfcCurveStyle_HAS_ModelOrDraughting
+#define SCHEMA_IfcCurveStyle_ModelOrDraughting_IS_OPTIONAL
+#define SCHEMA_HAS_IfcCurveStyleFont
+#define SCHEMA_IfcCurveStyleFont_HAS_Name
+#define SCHEMA_IfcCurveStyleFont_Name_IS_OPTIONAL
+#define SCHEMA_IfcCurveStyleFont_HAS_PatternList
+#define SCHEMA_HAS_IfcCurveStyleFontAndScaling
+#define SCHEMA_IfcCurveStyleFontAndScaling_HAS_Name
+#define SCHEMA_IfcCurveStyleFontAndScaling_Name_IS_OPTIONAL
+#define SCHEMA_IfcCurveStyleFontAndScaling_HAS_CurveStyleFont
+#define SCHEMA_IfcCurveStyleFontAndScaling_HAS_CurveFontScaling
+#define SCHEMA_HAS_IfcCurveStyleFontPattern
+#define SCHEMA_IfcCurveStyleFontPattern_HAS_VisibleSegmentLength
+#define SCHEMA_IfcCurveStyleFontPattern_HAS_InvisibleSegmentLength
+#define SCHEMA_HAS_IfcCylindricalSurface
+#define SCHEMA_IfcCylindricalSurface_HAS_Radius
+#define SCHEMA_HAS_IfcDamper
+#define SCHEMA_IfcDamper_HAS_PredefinedType
+#define SCHEMA_IfcDamper_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDamperType
+#define SCHEMA_IfcDamperType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDeepFoundation
+#define SCHEMA_HAS_IfcDeepFoundationType
+#define SCHEMA_HAS_IfcDerivedProfileDef
+#define SCHEMA_IfcDerivedProfileDef_HAS_ParentProfile
+#define SCHEMA_IfcDerivedProfileDef_HAS_Operator
+#define SCHEMA_IfcDerivedProfileDef_HAS_Label
+#define SCHEMA_IfcDerivedProfileDef_Label_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDerivedUnit
+#define SCHEMA_IfcDerivedUnit_HAS_Elements
+#define SCHEMA_IfcDerivedUnit_HAS_UnitType
+#define SCHEMA_IfcDerivedUnit_HAS_UserDefinedType
+#define SCHEMA_IfcDerivedUnit_UserDefinedType_IS_OPTIONAL
+#define SCHEMA_IfcDerivedUnit_HAS_Name
+#define SCHEMA_IfcDerivedUnit_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDerivedUnitElement
+#define SCHEMA_IfcDerivedUnitElement_HAS_Unit
+#define SCHEMA_IfcDerivedUnitElement_HAS_Exponent
+#define SCHEMA_HAS_IfcDimensionalExponents
+#define SCHEMA_IfcDimensionalExponents_HAS_LengthExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_MassExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_TimeExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_ElectricCurrentExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_ThermodynamicTemperatureExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_AmountOfSubstanceExponent
+#define SCHEMA_IfcDimensionalExponents_HAS_LuminousIntensityExponent
+#define SCHEMA_HAS_IfcDirection
+#define SCHEMA_IfcDirection_HAS_DirectionRatios
+#define SCHEMA_HAS_IfcDirectrixCurveSweptAreaSolid
+#define SCHEMA_IfcDirectrixCurveSweptAreaSolid_HAS_Directrix
+#define SCHEMA_IfcDirectrixCurveSweptAreaSolid_HAS_StartParam
+#define SCHEMA_IfcDirectrixCurveSweptAreaSolid_StartParam_IS_OPTIONAL
+#define SCHEMA_IfcDirectrixCurveSweptAreaSolid_HAS_EndParam
+#define SCHEMA_IfcDirectrixCurveSweptAreaSolid_EndParam_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDirectrixDerivedReferenceSweptAreaSolid
+#define SCHEMA_HAS_IfcDiscreteAccessory
+#define SCHEMA_IfcDiscreteAccessory_HAS_PredefinedType
+#define SCHEMA_IfcDiscreteAccessory_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDiscreteAccessoryType
+#define SCHEMA_IfcDiscreteAccessoryType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDistributionBoard
+#define SCHEMA_IfcDistributionBoard_HAS_PredefinedType
+#define SCHEMA_IfcDistributionBoard_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDistributionBoardType
+#define SCHEMA_IfcDistributionBoardType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDistributionChamberElement
+#define SCHEMA_IfcDistributionChamberElement_HAS_PredefinedType
+#define SCHEMA_IfcDistributionChamberElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDistributionChamberElementType
+#define SCHEMA_IfcDistributionChamberElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDistributionCircuit
+#define SCHEMA_HAS_IfcDistributionControlElement
+#define SCHEMA_IfcDistributionControlElement_HAS_AssignedToFlowElement
+#define SCHEMA_HAS_IfcDistributionControlElementType
+#define SCHEMA_HAS_IfcDistributionElement
+#define SCHEMA_IfcDistributionElement_HAS_HasPorts
+#define SCHEMA_HAS_IfcDistributionElementType
+#define SCHEMA_HAS_IfcDistributionFlowElement
+#define SCHEMA_IfcDistributionFlowElement_HAS_HasControlElements
+#define SCHEMA_HAS_IfcDistributionFlowElementType
+#define SCHEMA_HAS_IfcDistributionPort
+#define SCHEMA_IfcDistributionPort_HAS_FlowDirection
+#define SCHEMA_IfcDistributionPort_FlowDirection_IS_OPTIONAL
+#define SCHEMA_IfcDistributionPort_HAS_PredefinedType
+#define SCHEMA_IfcDistributionPort_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcDistributionPort_HAS_SystemType
+#define SCHEMA_IfcDistributionPort_SystemType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDistributionSystem
+#define SCHEMA_IfcDistributionSystem_HAS_LongName
+#define SCHEMA_IfcDistributionSystem_LongName_IS_OPTIONAL
+#define SCHEMA_IfcDistributionSystem_HAS_PredefinedType
+#define SCHEMA_IfcDistributionSystem_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDocumentInformation
+#define SCHEMA_IfcDocumentInformation_HAS_Identification
+#define SCHEMA_IfcDocumentInformation_HAS_Name
+#define SCHEMA_IfcDocumentInformation_HAS_Description
+#define SCHEMA_IfcDocumentInformation_Description_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Location
+#define SCHEMA_IfcDocumentInformation_Location_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Purpose
+#define SCHEMA_IfcDocumentInformation_Purpose_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_IntendedUse
+#define SCHEMA_IfcDocumentInformation_IntendedUse_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Scope
+#define SCHEMA_IfcDocumentInformation_Scope_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Revision
+#define SCHEMA_IfcDocumentInformation_Revision_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_DocumentOwner
+#define SCHEMA_IfcDocumentInformation_DocumentOwner_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Editors
+#define SCHEMA_IfcDocumentInformation_Editors_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_CreationTime
+#define SCHEMA_IfcDocumentInformation_CreationTime_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_LastRevisionTime
+#define SCHEMA_IfcDocumentInformation_LastRevisionTime_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_ElectronicFormat
+#define SCHEMA_IfcDocumentInformation_ElectronicFormat_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_ValidFrom
+#define SCHEMA_IfcDocumentInformation_ValidFrom_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_ValidUntil
+#define SCHEMA_IfcDocumentInformation_ValidUntil_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Confidentiality
+#define SCHEMA_IfcDocumentInformation_Confidentiality_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_Status
+#define SCHEMA_IfcDocumentInformation_Status_IS_OPTIONAL
+#define SCHEMA_IfcDocumentInformation_HAS_DocumentInfoForObjects
+#define SCHEMA_IfcDocumentInformation_HAS_HasDocumentReferences
+#define SCHEMA_IfcDocumentInformation_HAS_IsPointedTo
+#define SCHEMA_IfcDocumentInformation_HAS_IsPointer
+#define SCHEMA_HAS_IfcDocumentInformationRelationship
+#define SCHEMA_IfcDocumentInformationRelationship_HAS_RelatingDocument
+#define SCHEMA_IfcDocumentInformationRelationship_HAS_RelatedDocuments
+#define SCHEMA_IfcDocumentInformationRelationship_HAS_RelationshipType
+#define SCHEMA_IfcDocumentInformationRelationship_RelationshipType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDocumentReference
+#define SCHEMA_IfcDocumentReference_HAS_Description
+#define SCHEMA_IfcDocumentReference_Description_IS_OPTIONAL
+#define SCHEMA_IfcDocumentReference_HAS_ReferencedDocument
+#define SCHEMA_IfcDocumentReference_ReferencedDocument_IS_OPTIONAL
+#define SCHEMA_IfcDocumentReference_HAS_DocumentRefForObjects
+#define SCHEMA_HAS_IfcDoor
+#define SCHEMA_IfcDoor_HAS_OverallHeight
+#define SCHEMA_IfcDoor_OverallHeight_IS_OPTIONAL
+#define SCHEMA_IfcDoor_HAS_OverallWidth
+#define SCHEMA_IfcDoor_OverallWidth_IS_OPTIONAL
+#define SCHEMA_IfcDoor_HAS_PredefinedType
+#define SCHEMA_IfcDoor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcDoor_HAS_OperationType
+#define SCHEMA_IfcDoor_OperationType_IS_OPTIONAL
+#define SCHEMA_IfcDoor_HAS_UserDefinedOperationType
+#define SCHEMA_IfcDoor_UserDefinedOperationType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDoorLiningProperties
+#define SCHEMA_IfcDoorLiningProperties_HAS_LiningDepth
+#define SCHEMA_IfcDoorLiningProperties_LiningDepth_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_LiningThickness
+#define SCHEMA_IfcDoorLiningProperties_LiningThickness_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_ThresholdDepth
+#define SCHEMA_IfcDoorLiningProperties_ThresholdDepth_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_ThresholdThickness
+#define SCHEMA_IfcDoorLiningProperties_ThresholdThickness_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_TransomThickness
+#define SCHEMA_IfcDoorLiningProperties_TransomThickness_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_TransomOffset
+#define SCHEMA_IfcDoorLiningProperties_TransomOffset_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_LiningOffset
+#define SCHEMA_IfcDoorLiningProperties_LiningOffset_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_ThresholdOffset
+#define SCHEMA_IfcDoorLiningProperties_ThresholdOffset_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_CasingThickness
+#define SCHEMA_IfcDoorLiningProperties_CasingThickness_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_CasingDepth
+#define SCHEMA_IfcDoorLiningProperties_CasingDepth_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_ShapeAspectStyle
+#define SCHEMA_IfcDoorLiningProperties_ShapeAspectStyle_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_LiningToPanelOffsetX
+#define SCHEMA_IfcDoorLiningProperties_LiningToPanelOffsetX_IS_OPTIONAL
+#define SCHEMA_IfcDoorLiningProperties_HAS_LiningToPanelOffsetY
+#define SCHEMA_IfcDoorLiningProperties_LiningToPanelOffsetY_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDoorPanelProperties
+#define SCHEMA_IfcDoorPanelProperties_HAS_PanelDepth
+#define SCHEMA_IfcDoorPanelProperties_PanelDepth_IS_OPTIONAL
+#define SCHEMA_IfcDoorPanelProperties_HAS_PanelOperation
+#define SCHEMA_IfcDoorPanelProperties_HAS_PanelWidth
+#define SCHEMA_IfcDoorPanelProperties_PanelWidth_IS_OPTIONAL
+#define SCHEMA_IfcDoorPanelProperties_HAS_PanelPosition
+#define SCHEMA_IfcDoorPanelProperties_HAS_ShapeAspectStyle
+#define SCHEMA_IfcDoorPanelProperties_ShapeAspectStyle_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDoorType
+#define SCHEMA_IfcDoorType_HAS_PredefinedType
+#define SCHEMA_IfcDoorType_HAS_OperationType
+#define SCHEMA_IfcDoorType_HAS_ParameterTakesPrecedence
+#define SCHEMA_IfcDoorType_ParameterTakesPrecedence_IS_OPTIONAL
+#define SCHEMA_IfcDoorType_HAS_UserDefinedOperationType
+#define SCHEMA_IfcDoorType_UserDefinedOperationType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDraughtingPreDefinedColour
+#define SCHEMA_HAS_IfcDraughtingPreDefinedCurveFont
+#define SCHEMA_HAS_IfcDuctFitting
+#define SCHEMA_IfcDuctFitting_HAS_PredefinedType
+#define SCHEMA_IfcDuctFitting_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDuctFittingType
+#define SCHEMA_IfcDuctFittingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDuctSegment
+#define SCHEMA_IfcDuctSegment_HAS_PredefinedType
+#define SCHEMA_IfcDuctSegment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDuctSegmentType
+#define SCHEMA_IfcDuctSegmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcDuctSilencer
+#define SCHEMA_IfcDuctSilencer_HAS_PredefinedType
+#define SCHEMA_IfcDuctSilencer_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcDuctSilencerType
+#define SCHEMA_IfcDuctSilencerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcEarthworksCut
+#define SCHEMA_IfcEarthworksCut_HAS_PredefinedType
+#define SCHEMA_IfcEarthworksCut_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEarthworksElement
+#define SCHEMA_HAS_IfcEarthworksFill
+#define SCHEMA_IfcEarthworksFill_HAS_PredefinedType
+#define SCHEMA_IfcEarthworksFill_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEdge
+#define SCHEMA_IfcEdge_HAS_EdgeStart
+#define SCHEMA_IfcEdge_HAS_EdgeEnd
+#define SCHEMA_HAS_IfcEdgeCurve
+#define SCHEMA_IfcEdgeCurve_HAS_EdgeGeometry
+#define SCHEMA_IfcEdgeCurve_HAS_SameSense
+#define SCHEMA_HAS_IfcEdgeLoop
+#define SCHEMA_IfcEdgeLoop_HAS_EdgeList
+#define SCHEMA_HAS_IfcElectricAppliance
+#define SCHEMA_IfcElectricAppliance_HAS_PredefinedType
+#define SCHEMA_IfcElectricAppliance_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricApplianceType
+#define SCHEMA_IfcElectricApplianceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricDistributionBoard
+#define SCHEMA_IfcElectricDistributionBoard_HAS_PredefinedType
+#define SCHEMA_IfcElectricDistributionBoard_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricDistributionBoardType
+#define SCHEMA_IfcElectricDistributionBoardType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricFlowStorageDevice
+#define SCHEMA_IfcElectricFlowStorageDevice_HAS_PredefinedType
+#define SCHEMA_IfcElectricFlowStorageDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricFlowStorageDeviceType
+#define SCHEMA_IfcElectricFlowStorageDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricFlowTreatmentDevice
+#define SCHEMA_IfcElectricFlowTreatmentDevice_HAS_PredefinedType
+#define SCHEMA_IfcElectricFlowTreatmentDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricFlowTreatmentDeviceType
+#define SCHEMA_IfcElectricFlowTreatmentDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricGenerator
+#define SCHEMA_IfcElectricGenerator_HAS_PredefinedType
+#define SCHEMA_IfcElectricGenerator_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricGeneratorType
+#define SCHEMA_IfcElectricGeneratorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricMotor
+#define SCHEMA_IfcElectricMotor_HAS_PredefinedType
+#define SCHEMA_IfcElectricMotor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricMotorType
+#define SCHEMA_IfcElectricMotorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElectricTimeControl
+#define SCHEMA_IfcElectricTimeControl_HAS_PredefinedType
+#define SCHEMA_IfcElectricTimeControl_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElectricTimeControlType
+#define SCHEMA_IfcElectricTimeControlType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElement
+#define SCHEMA_IfcElement_HAS_Tag
+#define SCHEMA_IfcElement_Tag_IS_OPTIONAL
+#define SCHEMA_IfcElement_HAS_FillsVoids
+#define SCHEMA_IfcElement_HAS_ConnectedTo
+#define SCHEMA_IfcElement_HAS_IsInterferedByElements
+#define SCHEMA_IfcElement_HAS_InterferesElements
+#define SCHEMA_IfcElement_HAS_HasProjections
+#define SCHEMA_IfcElement_HAS_HasOpenings
+#define SCHEMA_IfcElement_HAS_IsConnectionRealization
+#define SCHEMA_IfcElement_HAS_ProvidesBoundaries
+#define SCHEMA_IfcElement_HAS_ConnectedFrom
+#define SCHEMA_IfcElement_HAS_ContainedInStructure
+#define SCHEMA_IfcElement_HAS_HasCoverings
+#define SCHEMA_IfcElement_HAS_HasSurfaceFeatures
+#define SCHEMA_HAS_IfcElementAssembly
+#define SCHEMA_IfcElementAssembly_HAS_AssemblyPlace
+#define SCHEMA_IfcElementAssembly_AssemblyPlace_IS_OPTIONAL
+#define SCHEMA_IfcElementAssembly_HAS_PredefinedType
+#define SCHEMA_IfcElementAssembly_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElementAssemblyType
+#define SCHEMA_IfcElementAssemblyType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcElementComponent
+#define SCHEMA_HAS_IfcElementComponentType
+#define SCHEMA_HAS_IfcElementQuantity
+#define SCHEMA_IfcElementQuantity_HAS_MethodOfMeasurement
+#define SCHEMA_IfcElementQuantity_MethodOfMeasurement_IS_OPTIONAL
+#define SCHEMA_IfcElementQuantity_HAS_Quantities
+#define SCHEMA_HAS_IfcElementType
+#define SCHEMA_IfcElementType_HAS_ElementType
+#define SCHEMA_IfcElementType_ElementType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcElementarySurface
+#define SCHEMA_IfcElementarySurface_HAS_Position
+#define SCHEMA_HAS_IfcEllipse
+#define SCHEMA_IfcEllipse_HAS_SemiAxis1
+#define SCHEMA_IfcEllipse_HAS_SemiAxis2
+#define SCHEMA_HAS_IfcEllipseProfileDef
+#define SCHEMA_IfcEllipseProfileDef_HAS_SemiAxis1
+#define SCHEMA_IfcEllipseProfileDef_HAS_SemiAxis2
+#define SCHEMA_HAS_IfcEnergyConversionDevice
+#define SCHEMA_HAS_IfcEnergyConversionDeviceType
+#define SCHEMA_HAS_IfcEngine
+#define SCHEMA_IfcEngine_HAS_PredefinedType
+#define SCHEMA_IfcEngine_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEngineType
+#define SCHEMA_IfcEngineType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcEvaporativeCooler
+#define SCHEMA_IfcEvaporativeCooler_HAS_PredefinedType
+#define SCHEMA_IfcEvaporativeCooler_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEvaporativeCoolerType
+#define SCHEMA_IfcEvaporativeCoolerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcEvaporator
+#define SCHEMA_IfcEvaporator_HAS_PredefinedType
+#define SCHEMA_IfcEvaporator_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEvaporatorType
+#define SCHEMA_IfcEvaporatorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcEvent
+#define SCHEMA_IfcEvent_HAS_PredefinedType
+#define SCHEMA_IfcEvent_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcEvent_HAS_EventTriggerType
+#define SCHEMA_IfcEvent_EventTriggerType_IS_OPTIONAL
+#define SCHEMA_IfcEvent_HAS_UserDefinedEventTriggerType
+#define SCHEMA_IfcEvent_UserDefinedEventTriggerType_IS_OPTIONAL
+#define SCHEMA_IfcEvent_HAS_EventOccurenceTime
+#define SCHEMA_IfcEvent_EventOccurenceTime_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEventTime
+#define SCHEMA_IfcEventTime_HAS_ActualDate
+#define SCHEMA_IfcEventTime_ActualDate_IS_OPTIONAL
+#define SCHEMA_IfcEventTime_HAS_EarlyDate
+#define SCHEMA_IfcEventTime_EarlyDate_IS_OPTIONAL
+#define SCHEMA_IfcEventTime_HAS_LateDate
+#define SCHEMA_IfcEventTime_LateDate_IS_OPTIONAL
+#define SCHEMA_IfcEventTime_HAS_ScheduleDate
+#define SCHEMA_IfcEventTime_ScheduleDate_IS_OPTIONAL
+#define SCHEMA_HAS_IfcEventType
+#define SCHEMA_IfcEventType_HAS_PredefinedType
+#define SCHEMA_IfcEventType_HAS_EventTriggerType
+#define SCHEMA_IfcEventType_HAS_UserDefinedEventTriggerType
+#define SCHEMA_IfcEventType_UserDefinedEventTriggerType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcExtendedProperties
+#define SCHEMA_IfcExtendedProperties_HAS_Name
+#define SCHEMA_IfcExtendedProperties_Name_IS_OPTIONAL
+#define SCHEMA_IfcExtendedProperties_HAS_Description
+#define SCHEMA_IfcExtendedProperties_Description_IS_OPTIONAL
+#define SCHEMA_IfcExtendedProperties_HAS_Properties
+#define SCHEMA_HAS_IfcExternalInformation
+#define SCHEMA_HAS_IfcExternalReference
+#define SCHEMA_IfcExternalReference_HAS_Location
+#define SCHEMA_IfcExternalReference_Location_IS_OPTIONAL
+#define SCHEMA_IfcExternalReference_HAS_Identification
+#define SCHEMA_IfcExternalReference_Identification_IS_OPTIONAL
+#define SCHEMA_IfcExternalReference_HAS_Name
+#define SCHEMA_IfcExternalReference_Name_IS_OPTIONAL
+#define SCHEMA_IfcExternalReference_HAS_ExternalReferenceForResources
+#define SCHEMA_HAS_IfcExternalReferenceRelationship
+#define SCHEMA_IfcExternalReferenceRelationship_HAS_RelatingReference
+#define SCHEMA_IfcExternalReferenceRelationship_HAS_RelatedResourceObjects
+#define SCHEMA_HAS_IfcExternalSpatialElement
+#define SCHEMA_IfcExternalSpatialElement_HAS_PredefinedType
+#define SCHEMA_IfcExternalSpatialElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcExternalSpatialElement_HAS_BoundedBy
+#define SCHEMA_HAS_IfcExternalSpatialStructureElement
+#define SCHEMA_HAS_IfcExternallyDefinedHatchStyle
+#define SCHEMA_HAS_IfcExternallyDefinedSurfaceStyle
+#define SCHEMA_HAS_IfcExternallyDefinedTextFont
+#define SCHEMA_HAS_IfcExtrudedAreaSolid
+#define SCHEMA_IfcExtrudedAreaSolid_HAS_ExtrudedDirection
+#define SCHEMA_IfcExtrudedAreaSolid_HAS_Depth
+#define SCHEMA_HAS_IfcExtrudedAreaSolidTapered
+#define SCHEMA_IfcExtrudedAreaSolidTapered_HAS_EndSweptArea
+#define SCHEMA_HAS_IfcFace
+#define SCHEMA_IfcFace_HAS_Bounds
+#define SCHEMA_IfcFace_HAS_HasTextureMaps
+#define SCHEMA_HAS_IfcFaceBasedSurfaceModel
+#define SCHEMA_IfcFaceBasedSurfaceModel_HAS_FbsmFaces
+#define SCHEMA_HAS_IfcFaceBound
+#define SCHEMA_IfcFaceBound_HAS_Bound
+#define SCHEMA_IfcFaceBound_HAS_Orientation
+#define SCHEMA_HAS_IfcFaceOuterBound
+#define SCHEMA_HAS_IfcFaceSurface
+#define SCHEMA_IfcFaceSurface_HAS_FaceSurface
+#define SCHEMA_IfcFaceSurface_HAS_SameSense
+#define SCHEMA_HAS_IfcFacetedBrep
+#define SCHEMA_HAS_IfcFacetedBrepWithVoids
+#define SCHEMA_IfcFacetedBrepWithVoids_HAS_Voids
+#define SCHEMA_HAS_IfcFacility
+#define SCHEMA_HAS_IfcFacilityPart
+#define SCHEMA_IfcFacilityPart_HAS_UsageType
+#define SCHEMA_HAS_IfcFacilityPartCommon
+#define SCHEMA_IfcFacilityPartCommon_HAS_PredefinedType
+#define SCHEMA_IfcFacilityPartCommon_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFailureConnectionCondition
+#define SCHEMA_IfcFailureConnectionCondition_HAS_TensionFailureX
+#define SCHEMA_IfcFailureConnectionCondition_TensionFailureX_IS_OPTIONAL
+#define SCHEMA_IfcFailureConnectionCondition_HAS_TensionFailureY
+#define SCHEMA_IfcFailureConnectionCondition_TensionFailureY_IS_OPTIONAL
+#define SCHEMA_IfcFailureConnectionCondition_HAS_TensionFailureZ
+#define SCHEMA_IfcFailureConnectionCondition_TensionFailureZ_IS_OPTIONAL
+#define SCHEMA_IfcFailureConnectionCondition_HAS_CompressionFailureX
+#define SCHEMA_IfcFailureConnectionCondition_CompressionFailureX_IS_OPTIONAL
+#define SCHEMA_IfcFailureConnectionCondition_HAS_CompressionFailureY
+#define SCHEMA_IfcFailureConnectionCondition_CompressionFailureY_IS_OPTIONAL
+#define SCHEMA_IfcFailureConnectionCondition_HAS_CompressionFailureZ
+#define SCHEMA_IfcFailureConnectionCondition_CompressionFailureZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFan
+#define SCHEMA_IfcFan_HAS_PredefinedType
+#define SCHEMA_IfcFan_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFanType
+#define SCHEMA_IfcFanType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFastener
+#define SCHEMA_IfcFastener_HAS_PredefinedType
+#define SCHEMA_IfcFastener_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFastenerType
+#define SCHEMA_IfcFastenerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFeatureElement
+#define SCHEMA_HAS_IfcFeatureElementAddition
+#define SCHEMA_IfcFeatureElementAddition_HAS_ProjectsElements
+#define SCHEMA_HAS_IfcFeatureElementSubtraction
+#define SCHEMA_IfcFeatureElementSubtraction_HAS_VoidsElements
+#define SCHEMA_HAS_IfcFillAreaStyle
+#define SCHEMA_IfcFillAreaStyle_HAS_FillStyles
+#define SCHEMA_IfcFillAreaStyle_HAS_ModelOrDraughting
+#define SCHEMA_IfcFillAreaStyle_ModelOrDraughting_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFillAreaStyleHatching
+#define SCHEMA_IfcFillAreaStyleHatching_HAS_HatchLineAppearance
+#define SCHEMA_IfcFillAreaStyleHatching_HAS_StartOfNextHatchLine
+#define SCHEMA_IfcFillAreaStyleHatching_HAS_PointOfReferenceHatchLine
+#define SCHEMA_IfcFillAreaStyleHatching_PointOfReferenceHatchLine_IS_OPTIONAL
+#define SCHEMA_IfcFillAreaStyleHatching_HAS_PatternStart
+#define SCHEMA_IfcFillAreaStyleHatching_PatternStart_IS_OPTIONAL
+#define SCHEMA_IfcFillAreaStyleHatching_HAS_HatchLineAngle
+#define SCHEMA_HAS_IfcFillAreaStyleTiles
+#define SCHEMA_IfcFillAreaStyleTiles_HAS_TilingPattern
+#define SCHEMA_IfcFillAreaStyleTiles_HAS_Tiles
+#define SCHEMA_IfcFillAreaStyleTiles_HAS_TilingScale
+#define SCHEMA_HAS_IfcFilter
+#define SCHEMA_IfcFilter_HAS_PredefinedType
+#define SCHEMA_IfcFilter_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFilterType
+#define SCHEMA_IfcFilterType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFireSuppressionTerminal
+#define SCHEMA_IfcFireSuppressionTerminal_HAS_PredefinedType
+#define SCHEMA_IfcFireSuppressionTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFireSuppressionTerminalType
+#define SCHEMA_IfcFireSuppressionTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFixedReferenceSweptAreaSolid
+#define SCHEMA_IfcFixedReferenceSweptAreaSolid_HAS_FixedReference
+#define SCHEMA_HAS_IfcFlowController
+#define SCHEMA_HAS_IfcFlowControllerType
+#define SCHEMA_HAS_IfcFlowFitting
+#define SCHEMA_HAS_IfcFlowFittingType
+#define SCHEMA_HAS_IfcFlowInstrument
+#define SCHEMA_IfcFlowInstrument_HAS_PredefinedType
+#define SCHEMA_IfcFlowInstrument_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFlowInstrumentType
+#define SCHEMA_IfcFlowInstrumentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFlowMeter
+#define SCHEMA_IfcFlowMeter_HAS_PredefinedType
+#define SCHEMA_IfcFlowMeter_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFlowMeterType
+#define SCHEMA_IfcFlowMeterType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFlowMovingDevice
+#define SCHEMA_HAS_IfcFlowMovingDeviceType
+#define SCHEMA_HAS_IfcFlowSegment
+#define SCHEMA_HAS_IfcFlowSegmentType
+#define SCHEMA_HAS_IfcFlowStorageDevice
+#define SCHEMA_HAS_IfcFlowStorageDeviceType
+#define SCHEMA_HAS_IfcFlowTerminal
+#define SCHEMA_HAS_IfcFlowTerminalType
+#define SCHEMA_HAS_IfcFlowTreatmentDevice
+#define SCHEMA_HAS_IfcFlowTreatmentDeviceType
+#define SCHEMA_HAS_IfcFooting
+#define SCHEMA_IfcFooting_HAS_PredefinedType
+#define SCHEMA_IfcFooting_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFootingType
+#define SCHEMA_IfcFootingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcFurnishingElement
+#define SCHEMA_HAS_IfcFurnishingElementType
+#define SCHEMA_HAS_IfcFurniture
+#define SCHEMA_IfcFurniture_HAS_PredefinedType
+#define SCHEMA_IfcFurniture_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcFurnitureType
+#define SCHEMA_IfcFurnitureType_HAS_AssemblyPlace
+#define SCHEMA_IfcFurnitureType_HAS_PredefinedType
+#define SCHEMA_IfcFurnitureType_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGeographicCRS
+#define SCHEMA_IfcGeographicCRS_HAS_PrimeMeridian
+#define SCHEMA_IfcGeographicCRS_PrimeMeridian_IS_OPTIONAL
+#define SCHEMA_IfcGeographicCRS_HAS_AngleUnit
+#define SCHEMA_IfcGeographicCRS_AngleUnit_IS_OPTIONAL
+#define SCHEMA_IfcGeographicCRS_HAS_HeightUnit
+#define SCHEMA_IfcGeographicCRS_HeightUnit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGeographicElement
+#define SCHEMA_IfcGeographicElement_HAS_PredefinedType
+#define SCHEMA_IfcGeographicElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGeographicElementType
+#define SCHEMA_IfcGeographicElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcGeometricCurveSet
+#define SCHEMA_HAS_IfcGeometricRepresentationContext
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_CoordinateSpaceDimension
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_Precision
+#define SCHEMA_IfcGeometricRepresentationContext_Precision_IS_OPTIONAL
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_WorldCoordinateSystem
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_TrueNorth
+#define SCHEMA_IfcGeometricRepresentationContext_TrueNorth_IS_OPTIONAL
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_HasSubContexts
+#define SCHEMA_IfcGeometricRepresentationContext_HAS_HasCoordinateOperation
+#define SCHEMA_HAS_IfcGeometricRepresentationItem
+#define SCHEMA_HAS_IfcGeometricRepresentationSubContext
+#define SCHEMA_IfcGeometricRepresentationSubContext_HAS_ParentContext
+#define SCHEMA_IfcGeometricRepresentationSubContext_HAS_TargetScale
+#define SCHEMA_IfcGeometricRepresentationSubContext_TargetScale_IS_OPTIONAL
+#define SCHEMA_IfcGeometricRepresentationSubContext_HAS_TargetView
+#define SCHEMA_IfcGeometricRepresentationSubContext_HAS_UserDefinedTargetView
+#define SCHEMA_IfcGeometricRepresentationSubContext_UserDefinedTargetView_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGeometricSet
+#define SCHEMA_IfcGeometricSet_HAS_Elements
+#define SCHEMA_HAS_IfcGeomodel
+#define SCHEMA_HAS_IfcGeoslice
+#define SCHEMA_HAS_IfcGeotechnicalAssembly
+#define SCHEMA_HAS_IfcGeotechnicalElement
+#define SCHEMA_HAS_IfcGeotechnicalStratum
+#define SCHEMA_IfcGeotechnicalStratum_HAS_PredefinedType
+#define SCHEMA_IfcGeotechnicalStratum_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGradientCurve
+#define SCHEMA_IfcGradientCurve_HAS_BaseCurve
+#define SCHEMA_IfcGradientCurve_HAS_EndPoint
+#define SCHEMA_IfcGradientCurve_EndPoint_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGrid
+#define SCHEMA_IfcGrid_HAS_UAxes
+#define SCHEMA_IfcGrid_HAS_VAxes
+#define SCHEMA_IfcGrid_HAS_WAxes
+#define SCHEMA_IfcGrid_WAxes_IS_OPTIONAL
+#define SCHEMA_IfcGrid_HAS_PredefinedType
+#define SCHEMA_IfcGrid_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGridAxis
+#define SCHEMA_IfcGridAxis_HAS_AxisTag
+#define SCHEMA_IfcGridAxis_AxisTag_IS_OPTIONAL
+#define SCHEMA_IfcGridAxis_HAS_AxisCurve
+#define SCHEMA_IfcGridAxis_HAS_SameSense
+#define SCHEMA_IfcGridAxis_HAS_PartOfW
+#define SCHEMA_IfcGridAxis_HAS_PartOfV
+#define SCHEMA_IfcGridAxis_HAS_PartOfU
+#define SCHEMA_IfcGridAxis_HAS_HasIntersections
+#define SCHEMA_HAS_IfcGridPlacement
+#define SCHEMA_IfcGridPlacement_HAS_PlacementLocation
+#define SCHEMA_IfcGridPlacement_HAS_PlacementRefDirection
+#define SCHEMA_IfcGridPlacement_PlacementRefDirection_IS_OPTIONAL
+#define SCHEMA_HAS_IfcGroup
+#define SCHEMA_IfcGroup_HAS_IsGroupedBy
+#define SCHEMA_IfcGroup_HAS_ReferencedInStructures
+#define SCHEMA_HAS_IfcHalfSpaceSolid
+#define SCHEMA_IfcHalfSpaceSolid_HAS_BaseSurface
+#define SCHEMA_IfcHalfSpaceSolid_HAS_AgreementFlag
+#define SCHEMA_HAS_IfcHeatExchanger
+#define SCHEMA_IfcHeatExchanger_HAS_PredefinedType
+#define SCHEMA_IfcHeatExchanger_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcHeatExchangerType
+#define SCHEMA_IfcHeatExchangerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcHumidifier
+#define SCHEMA_IfcHumidifier_HAS_PredefinedType
+#define SCHEMA_IfcHumidifier_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcHumidifierType
+#define SCHEMA_IfcHumidifierType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcIShapeProfileDef
+#define SCHEMA_IfcIShapeProfileDef_HAS_OverallWidth
+#define SCHEMA_IfcIShapeProfileDef_HAS_OverallDepth
+#define SCHEMA_IfcIShapeProfileDef_HAS_WebThickness
+#define SCHEMA_IfcIShapeProfileDef_HAS_FlangeThickness
+#define SCHEMA_IfcIShapeProfileDef_HAS_FilletRadius
+#define SCHEMA_IfcIShapeProfileDef_FilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcIShapeProfileDef_HAS_FlangeEdgeRadius
+#define SCHEMA_IfcIShapeProfileDef_FlangeEdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcIShapeProfileDef_HAS_FlangeSlope
+#define SCHEMA_IfcIShapeProfileDef_FlangeSlope_IS_OPTIONAL
+#define SCHEMA_HAS_IfcImageTexture
+#define SCHEMA_IfcImageTexture_HAS_URLReference
+#define SCHEMA_HAS_IfcImpactProtectionDevice
+#define SCHEMA_IfcImpactProtectionDevice_HAS_PredefinedType
+#define SCHEMA_IfcImpactProtectionDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcImpactProtectionDeviceType
+#define SCHEMA_IfcImpactProtectionDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcIndexedColourMap
+#define SCHEMA_IfcIndexedColourMap_HAS_MappedTo
+#define SCHEMA_IfcIndexedColourMap_HAS_Opacity
+#define SCHEMA_IfcIndexedColourMap_Opacity_IS_OPTIONAL
+#define SCHEMA_IfcIndexedColourMap_HAS_Colours
+#define SCHEMA_IfcIndexedColourMap_HAS_ColourIndex
+#define SCHEMA_HAS_IfcIndexedPolyCurve
+#define SCHEMA_IfcIndexedPolyCurve_HAS_Points
+#define SCHEMA_IfcIndexedPolyCurve_HAS_Segments
+#define SCHEMA_IfcIndexedPolyCurve_Segments_IS_OPTIONAL
+#define SCHEMA_IfcIndexedPolyCurve_HAS_SelfIntersect
+#define SCHEMA_IfcIndexedPolyCurve_SelfIntersect_IS_OPTIONAL
+#define SCHEMA_HAS_IfcIndexedPolygonalFace
+#define SCHEMA_IfcIndexedPolygonalFace_HAS_CoordIndex
+#define SCHEMA_IfcIndexedPolygonalFace_HAS_ToFaceSet
+#define SCHEMA_IfcIndexedPolygonalFace_HAS_HasTexCoords
+#define SCHEMA_HAS_IfcIndexedPolygonalFaceWithVoids
+#define SCHEMA_IfcIndexedPolygonalFaceWithVoids_HAS_InnerCoordIndices
+#define SCHEMA_HAS_IfcIndexedPolygonalTextureMap
+#define SCHEMA_IfcIndexedPolygonalTextureMap_HAS_TexCoordIndices
+#define SCHEMA_HAS_IfcIndexedTextureMap
+#define SCHEMA_IfcIndexedTextureMap_HAS_MappedTo
+#define SCHEMA_IfcIndexedTextureMap_HAS_TexCoords
+#define SCHEMA_HAS_IfcIndexedTriangleTextureMap
+#define SCHEMA_IfcIndexedTriangleTextureMap_HAS_TexCoordIndex
+#define SCHEMA_IfcIndexedTriangleTextureMap_TexCoordIndex_IS_OPTIONAL
+#define SCHEMA_HAS_IfcInterceptor
+#define SCHEMA_IfcInterceptor_HAS_PredefinedType
+#define SCHEMA_IfcInterceptor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcInterceptorType
+#define SCHEMA_IfcInterceptorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcIntersectionCurve
+#define SCHEMA_HAS_IfcInventory
+#define SCHEMA_IfcInventory_HAS_PredefinedType
+#define SCHEMA_IfcInventory_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcInventory_HAS_Jurisdiction
+#define SCHEMA_IfcInventory_Jurisdiction_IS_OPTIONAL
+#define SCHEMA_IfcInventory_HAS_ResponsiblePersons
+#define SCHEMA_IfcInventory_ResponsiblePersons_IS_OPTIONAL
+#define SCHEMA_IfcInventory_HAS_LastUpdateDate
+#define SCHEMA_IfcInventory_LastUpdateDate_IS_OPTIONAL
+#define SCHEMA_IfcInventory_HAS_CurrentValue
+#define SCHEMA_IfcInventory_CurrentValue_IS_OPTIONAL
+#define SCHEMA_IfcInventory_HAS_OriginalValue
+#define SCHEMA_IfcInventory_OriginalValue_IS_OPTIONAL
+#define SCHEMA_HAS_IfcIrregularTimeSeries
+#define SCHEMA_IfcIrregularTimeSeries_HAS_Values
+#define SCHEMA_HAS_IfcIrregularTimeSeriesValue
+#define SCHEMA_IfcIrregularTimeSeriesValue_HAS_TimeStamp
+#define SCHEMA_IfcIrregularTimeSeriesValue_HAS_ListValues
+#define SCHEMA_HAS_IfcJunctionBox
+#define SCHEMA_IfcJunctionBox_HAS_PredefinedType
+#define SCHEMA_IfcJunctionBox_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcJunctionBoxType
+#define SCHEMA_IfcJunctionBoxType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcKerb
+#define SCHEMA_IfcKerb_HAS_PredefinedType
+#define SCHEMA_IfcKerb_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcKerbType
+#define SCHEMA_IfcKerbType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcLShapeProfileDef
+#define SCHEMA_IfcLShapeProfileDef_HAS_Depth
+#define SCHEMA_IfcLShapeProfileDef_HAS_Width
+#define SCHEMA_IfcLShapeProfileDef_Width_IS_OPTIONAL
+#define SCHEMA_IfcLShapeProfileDef_HAS_Thickness
+#define SCHEMA_IfcLShapeProfileDef_HAS_FilletRadius
+#define SCHEMA_IfcLShapeProfileDef_FilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcLShapeProfileDef_HAS_EdgeRadius
+#define SCHEMA_IfcLShapeProfileDef_EdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcLShapeProfileDef_HAS_LegSlope
+#define SCHEMA_IfcLShapeProfileDef_LegSlope_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLaborResource
+#define SCHEMA_IfcLaborResource_HAS_PredefinedType
+#define SCHEMA_IfcLaborResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLaborResourceType
+#define SCHEMA_IfcLaborResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcLagTime
+#define SCHEMA_IfcLagTime_HAS_LagValue
+#define SCHEMA_IfcLagTime_HAS_DurationType
+#define SCHEMA_HAS_IfcLamp
+#define SCHEMA_IfcLamp_HAS_PredefinedType
+#define SCHEMA_IfcLamp_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLampType
+#define SCHEMA_IfcLampType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcLibraryInformation
+#define SCHEMA_IfcLibraryInformation_HAS_Name
+#define SCHEMA_IfcLibraryInformation_HAS_Version
+#define SCHEMA_IfcLibraryInformation_Version_IS_OPTIONAL
+#define SCHEMA_IfcLibraryInformation_HAS_Publisher
+#define SCHEMA_IfcLibraryInformation_Publisher_IS_OPTIONAL
+#define SCHEMA_IfcLibraryInformation_HAS_VersionDate
+#define SCHEMA_IfcLibraryInformation_VersionDate_IS_OPTIONAL
+#define SCHEMA_IfcLibraryInformation_HAS_Location
+#define SCHEMA_IfcLibraryInformation_Location_IS_OPTIONAL
+#define SCHEMA_IfcLibraryInformation_HAS_Description
+#define SCHEMA_IfcLibraryInformation_Description_IS_OPTIONAL
+#define SCHEMA_IfcLibraryInformation_HAS_LibraryInfoForObjects
+#define SCHEMA_IfcLibraryInformation_HAS_HasLibraryReferences
+#define SCHEMA_HAS_IfcLibraryReference
+#define SCHEMA_IfcLibraryReference_HAS_Description
+#define SCHEMA_IfcLibraryReference_Description_IS_OPTIONAL
+#define SCHEMA_IfcLibraryReference_HAS_Language
+#define SCHEMA_IfcLibraryReference_Language_IS_OPTIONAL
+#define SCHEMA_IfcLibraryReference_HAS_ReferencedLibrary
+#define SCHEMA_IfcLibraryReference_ReferencedLibrary_IS_OPTIONAL
+#define SCHEMA_IfcLibraryReference_HAS_LibraryRefForObjects
+#define SCHEMA_HAS_IfcLightDistributionData
+#define SCHEMA_IfcLightDistributionData_HAS_MainPlaneAngle
+#define SCHEMA_IfcLightDistributionData_HAS_SecondaryPlaneAngle
+#define SCHEMA_IfcLightDistributionData_HAS_LuminousIntensity
+#define SCHEMA_HAS_IfcLightFixture
+#define SCHEMA_IfcLightFixture_HAS_PredefinedType
+#define SCHEMA_IfcLightFixture_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLightFixtureType
+#define SCHEMA_IfcLightFixtureType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcLightIntensityDistribution
+#define SCHEMA_IfcLightIntensityDistribution_HAS_LightDistributionCurve
+#define SCHEMA_IfcLightIntensityDistribution_HAS_DistributionData
+#define SCHEMA_HAS_IfcLightSource
+#define SCHEMA_IfcLightSource_HAS_Name
+#define SCHEMA_IfcLightSource_Name_IS_OPTIONAL
+#define SCHEMA_IfcLightSource_HAS_LightColour
+#define SCHEMA_IfcLightSource_HAS_AmbientIntensity
+#define SCHEMA_IfcLightSource_AmbientIntensity_IS_OPTIONAL
+#define SCHEMA_IfcLightSource_HAS_Intensity
+#define SCHEMA_IfcLightSource_Intensity_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLightSourceAmbient
+#define SCHEMA_HAS_IfcLightSourceDirectional
+#define SCHEMA_IfcLightSourceDirectional_HAS_Orientation
+#define SCHEMA_HAS_IfcLightSourceGoniometric
+#define SCHEMA_IfcLightSourceGoniometric_HAS_Position
+#define SCHEMA_IfcLightSourceGoniometric_HAS_ColourAppearance
+#define SCHEMA_IfcLightSourceGoniometric_ColourAppearance_IS_OPTIONAL
+#define SCHEMA_IfcLightSourceGoniometric_HAS_ColourTemperature
+#define SCHEMA_IfcLightSourceGoniometric_HAS_LuminousFlux
+#define SCHEMA_IfcLightSourceGoniometric_HAS_LightEmissionSource
+#define SCHEMA_IfcLightSourceGoniometric_HAS_LightDistributionDataSource
+#define SCHEMA_HAS_IfcLightSourcePositional
+#define SCHEMA_IfcLightSourcePositional_HAS_Position
+#define SCHEMA_IfcLightSourcePositional_HAS_Radius
+#define SCHEMA_IfcLightSourcePositional_HAS_ConstantAttenuation
+#define SCHEMA_IfcLightSourcePositional_HAS_DistanceAttenuation
+#define SCHEMA_IfcLightSourcePositional_HAS_QuadricAttenuation
+#define SCHEMA_HAS_IfcLightSourceSpot
+#define SCHEMA_IfcLightSourceSpot_HAS_Orientation
+#define SCHEMA_IfcLightSourceSpot_HAS_ConcentrationExponent
+#define SCHEMA_IfcLightSourceSpot_ConcentrationExponent_IS_OPTIONAL
+#define SCHEMA_IfcLightSourceSpot_HAS_SpreadAngle
+#define SCHEMA_IfcLightSourceSpot_HAS_BeamWidthAngle
+#define SCHEMA_HAS_IfcLine
+#define SCHEMA_IfcLine_HAS_Pnt
+#define SCHEMA_IfcLine_HAS_Dir
+#define SCHEMA_HAS_IfcLinearElement
+#define SCHEMA_HAS_IfcLinearPlacement
+#define SCHEMA_IfcLinearPlacement_HAS_RelativePlacement
+#define SCHEMA_IfcLinearPlacement_HAS_CartesianPosition
+#define SCHEMA_IfcLinearPlacement_CartesianPosition_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLinearPositioningElement
+#define SCHEMA_HAS_IfcLiquidTerminal
+#define SCHEMA_IfcLiquidTerminal_HAS_PredefinedType
+#define SCHEMA_IfcLiquidTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcLiquidTerminalType
+#define SCHEMA_IfcLiquidTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcLocalPlacement
+#define SCHEMA_IfcLocalPlacement_HAS_RelativePlacement
+#define SCHEMA_HAS_IfcLoop
+#define SCHEMA_HAS_IfcManifoldSolidBrep
+#define SCHEMA_IfcManifoldSolidBrep_HAS_Outer
+#define SCHEMA_HAS_IfcMapConversion
+#define SCHEMA_IfcMapConversion_HAS_Eastings
+#define SCHEMA_IfcMapConversion_HAS_Northings
+#define SCHEMA_IfcMapConversion_HAS_OrthogonalHeight
+#define SCHEMA_IfcMapConversion_HAS_XAxisAbscissa
+#define SCHEMA_IfcMapConversion_XAxisAbscissa_IS_OPTIONAL
+#define SCHEMA_IfcMapConversion_HAS_XAxisOrdinate
+#define SCHEMA_IfcMapConversion_XAxisOrdinate_IS_OPTIONAL
+#define SCHEMA_IfcMapConversion_HAS_Scale
+#define SCHEMA_IfcMapConversion_Scale_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMapConversionScaled
+#define SCHEMA_IfcMapConversionScaled_HAS_FactorX
+#define SCHEMA_IfcMapConversionScaled_HAS_FactorY
+#define SCHEMA_IfcMapConversionScaled_HAS_FactorZ
+#define SCHEMA_HAS_IfcMappedItem
+#define SCHEMA_IfcMappedItem_HAS_MappingSource
+#define SCHEMA_IfcMappedItem_HAS_MappingTarget
+#define SCHEMA_HAS_IfcMarineFacility
+#define SCHEMA_IfcMarineFacility_HAS_PredefinedType
+#define SCHEMA_IfcMarineFacility_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMarinePart
+#define SCHEMA_IfcMarinePart_HAS_PredefinedType
+#define SCHEMA_IfcMarinePart_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterial
+#define SCHEMA_IfcMaterial_HAS_Name
+#define SCHEMA_IfcMaterial_HAS_Description
+#define SCHEMA_IfcMaterial_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterial_HAS_Category
+#define SCHEMA_IfcMaterial_Category_IS_OPTIONAL
+#define SCHEMA_IfcMaterial_HAS_HasRepresentation
+#define SCHEMA_IfcMaterial_HAS_IsRelatedWith
+#define SCHEMA_IfcMaterial_HAS_RelatesTo
+#define SCHEMA_HAS_IfcMaterialClassificationRelationship
+#define SCHEMA_IfcMaterialClassificationRelationship_HAS_MaterialClassifications
+#define SCHEMA_IfcMaterialClassificationRelationship_HAS_ClassifiedMaterial
+#define SCHEMA_HAS_IfcMaterialConstituent
+#define SCHEMA_IfcMaterialConstituent_HAS_Name
+#define SCHEMA_IfcMaterialConstituent_Name_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituent_HAS_Description
+#define SCHEMA_IfcMaterialConstituent_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituent_HAS_Material
+#define SCHEMA_IfcMaterialConstituent_HAS_Fraction
+#define SCHEMA_IfcMaterialConstituent_Fraction_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituent_HAS_Category
+#define SCHEMA_IfcMaterialConstituent_Category_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituent_HAS_ToMaterialConstituentSet
+#define SCHEMA_HAS_IfcMaterialConstituentSet
+#define SCHEMA_IfcMaterialConstituentSet_HAS_Name
+#define SCHEMA_IfcMaterialConstituentSet_Name_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituentSet_HAS_Description
+#define SCHEMA_IfcMaterialConstituentSet_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterialConstituentSet_HAS_MaterialConstituents
+#define SCHEMA_IfcMaterialConstituentSet_MaterialConstituents_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialDefinition
+#define SCHEMA_IfcMaterialDefinition_HAS_AssociatedTo
+#define SCHEMA_IfcMaterialDefinition_HAS_HasExternalReferences
+#define SCHEMA_IfcMaterialDefinition_HAS_HasProperties
+#define SCHEMA_HAS_IfcMaterialDefinitionRepresentation
+#define SCHEMA_IfcMaterialDefinitionRepresentation_HAS_RepresentedMaterial
+#define SCHEMA_HAS_IfcMaterialLayer
+#define SCHEMA_IfcMaterialLayer_HAS_Material
+#define SCHEMA_IfcMaterialLayer_Material_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_LayerThickness
+#define SCHEMA_IfcMaterialLayer_HAS_IsVentilated
+#define SCHEMA_IfcMaterialLayer_IsVentilated_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_Name
+#define SCHEMA_IfcMaterialLayer_Name_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_Description
+#define SCHEMA_IfcMaterialLayer_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_Category
+#define SCHEMA_IfcMaterialLayer_Category_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_Priority
+#define SCHEMA_IfcMaterialLayer_Priority_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayer_HAS_ToMaterialLayerSet
+#define SCHEMA_HAS_IfcMaterialLayerSet
+#define SCHEMA_IfcMaterialLayerSet_HAS_MaterialLayers
+#define SCHEMA_IfcMaterialLayerSet_HAS_LayerSetName
+#define SCHEMA_IfcMaterialLayerSet_LayerSetName_IS_OPTIONAL
+#define SCHEMA_IfcMaterialLayerSet_HAS_Description
+#define SCHEMA_IfcMaterialLayerSet_Description_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialLayerSetUsage
+#define SCHEMA_IfcMaterialLayerSetUsage_HAS_ForLayerSet
+#define SCHEMA_IfcMaterialLayerSetUsage_HAS_LayerSetDirection
+#define SCHEMA_IfcMaterialLayerSetUsage_HAS_DirectionSense
+#define SCHEMA_IfcMaterialLayerSetUsage_HAS_OffsetFromReferenceLine
+#define SCHEMA_IfcMaterialLayerSetUsage_HAS_ReferenceExtent
+#define SCHEMA_IfcMaterialLayerSetUsage_ReferenceExtent_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialLayerWithOffsets
+#define SCHEMA_IfcMaterialLayerWithOffsets_HAS_OffsetDirection
+#define SCHEMA_IfcMaterialLayerWithOffsets_HAS_OffsetValues
+#define SCHEMA_HAS_IfcMaterialList
+#define SCHEMA_IfcMaterialList_HAS_Materials
+#define SCHEMA_HAS_IfcMaterialProfile
+#define SCHEMA_IfcMaterialProfile_HAS_Name
+#define SCHEMA_IfcMaterialProfile_Name_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfile_HAS_Description
+#define SCHEMA_IfcMaterialProfile_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfile_HAS_Material
+#define SCHEMA_IfcMaterialProfile_Material_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfile_HAS_Profile
+#define SCHEMA_IfcMaterialProfile_HAS_Priority
+#define SCHEMA_IfcMaterialProfile_Priority_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfile_HAS_Category
+#define SCHEMA_IfcMaterialProfile_Category_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfile_HAS_ToMaterialProfileSet
+#define SCHEMA_HAS_IfcMaterialProfileSet
+#define SCHEMA_IfcMaterialProfileSet_HAS_Name
+#define SCHEMA_IfcMaterialProfileSet_Name_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfileSet_HAS_Description
+#define SCHEMA_IfcMaterialProfileSet_Description_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfileSet_HAS_MaterialProfiles
+#define SCHEMA_IfcMaterialProfileSet_HAS_CompositeProfile
+#define SCHEMA_IfcMaterialProfileSet_CompositeProfile_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialProfileSetUsage
+#define SCHEMA_IfcMaterialProfileSetUsage_HAS_ForProfileSet
+#define SCHEMA_IfcMaterialProfileSetUsage_HAS_CardinalPoint
+#define SCHEMA_IfcMaterialProfileSetUsage_CardinalPoint_IS_OPTIONAL
+#define SCHEMA_IfcMaterialProfileSetUsage_HAS_ReferenceExtent
+#define SCHEMA_IfcMaterialProfileSetUsage_ReferenceExtent_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialProfileSetUsageTapering
+#define SCHEMA_IfcMaterialProfileSetUsageTapering_HAS_ForProfileEndSet
+#define SCHEMA_IfcMaterialProfileSetUsageTapering_HAS_CardinalEndPoint
+#define SCHEMA_IfcMaterialProfileSetUsageTapering_CardinalEndPoint_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialProfileWithOffsets
+#define SCHEMA_IfcMaterialProfileWithOffsets_HAS_OffsetValues
+#define SCHEMA_HAS_IfcMaterialProperties
+#define SCHEMA_IfcMaterialProperties_HAS_Material
+#define SCHEMA_HAS_IfcMaterialRelationship
+#define SCHEMA_IfcMaterialRelationship_HAS_RelatingMaterial
+#define SCHEMA_IfcMaterialRelationship_HAS_RelatedMaterials
+#define SCHEMA_IfcMaterialRelationship_HAS_MaterialExpression
+#define SCHEMA_IfcMaterialRelationship_MaterialExpression_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMaterialUsageDefinition
+#define SCHEMA_IfcMaterialUsageDefinition_HAS_AssociatedTo
+#define SCHEMA_HAS_IfcMeasureWithUnit
+#define SCHEMA_IfcMeasureWithUnit_HAS_ValueComponent
+#define SCHEMA_IfcMeasureWithUnit_HAS_UnitComponent
+#define SCHEMA_HAS_IfcMechanicalFastener
+#define SCHEMA_IfcMechanicalFastener_HAS_NominalDiameter
+#define SCHEMA_IfcMechanicalFastener_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcMechanicalFastener_HAS_NominalLength
+#define SCHEMA_IfcMechanicalFastener_NominalLength_IS_OPTIONAL
+#define SCHEMA_IfcMechanicalFastener_HAS_PredefinedType
+#define SCHEMA_IfcMechanicalFastener_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMechanicalFastenerType
+#define SCHEMA_IfcMechanicalFastenerType_HAS_PredefinedType
+#define SCHEMA_IfcMechanicalFastenerType_HAS_NominalDiameter
+#define SCHEMA_IfcMechanicalFastenerType_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcMechanicalFastenerType_HAS_NominalLength
+#define SCHEMA_IfcMechanicalFastenerType_NominalLength_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMedicalDevice
+#define SCHEMA_IfcMedicalDevice_HAS_PredefinedType
+#define SCHEMA_IfcMedicalDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMedicalDeviceType
+#define SCHEMA_IfcMedicalDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcMember
+#define SCHEMA_IfcMember_HAS_PredefinedType
+#define SCHEMA_IfcMember_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMemberType
+#define SCHEMA_IfcMemberType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcMetric
+#define SCHEMA_IfcMetric_HAS_Benchmark
+#define SCHEMA_IfcMetric_HAS_ValueSource
+#define SCHEMA_IfcMetric_ValueSource_IS_OPTIONAL
+#define SCHEMA_IfcMetric_HAS_DataValue
+#define SCHEMA_IfcMetric_DataValue_IS_OPTIONAL
+#define SCHEMA_IfcMetric_HAS_ReferencePath
+#define SCHEMA_IfcMetric_ReferencePath_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMirroredProfileDef
+#define SCHEMA_HAS_IfcMobileTelecommunicationsAppliance
+#define SCHEMA_IfcMobileTelecommunicationsAppliance_HAS_PredefinedType
+#define SCHEMA_IfcMobileTelecommunicationsAppliance_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMobileTelecommunicationsApplianceType
+#define SCHEMA_IfcMobileTelecommunicationsApplianceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcMonetaryUnit
+#define SCHEMA_IfcMonetaryUnit_HAS_Currency
+#define SCHEMA_HAS_IfcMooringDevice
+#define SCHEMA_IfcMooringDevice_HAS_PredefinedType
+#define SCHEMA_IfcMooringDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMooringDeviceType
+#define SCHEMA_IfcMooringDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcMotorConnection
+#define SCHEMA_IfcMotorConnection_HAS_PredefinedType
+#define SCHEMA_IfcMotorConnection_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcMotorConnectionType
+#define SCHEMA_IfcMotorConnectionType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcNamedUnit
+#define SCHEMA_IfcNamedUnit_HAS_Dimensions
+#define SCHEMA_IfcNamedUnit_HAS_UnitType
+#define SCHEMA_HAS_IfcNavigationElement
+#define SCHEMA_IfcNavigationElement_HAS_PredefinedType
+#define SCHEMA_IfcNavigationElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcNavigationElementType
+#define SCHEMA_IfcNavigationElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcObject
+#define SCHEMA_IfcObject_HAS_ObjectType
+#define SCHEMA_IfcObject_ObjectType_IS_OPTIONAL
+#define SCHEMA_IfcObject_HAS_IsDeclaredBy
+#define SCHEMA_IfcObject_HAS_Declares
+#define SCHEMA_IfcObject_HAS_IsTypedBy
+#define SCHEMA_IfcObject_HAS_IsDefinedBy
+#define SCHEMA_HAS_IfcObjectDefinition
+#define SCHEMA_IfcObjectDefinition_HAS_HasAssignments
+#define SCHEMA_IfcObjectDefinition_HAS_Nests
+#define SCHEMA_IfcObjectDefinition_HAS_IsNestedBy
+#define SCHEMA_IfcObjectDefinition_HAS_HasContext
+#define SCHEMA_IfcObjectDefinition_HAS_IsDecomposedBy
+#define SCHEMA_IfcObjectDefinition_HAS_Decomposes
+#define SCHEMA_IfcObjectDefinition_HAS_HasAssociations
+#define SCHEMA_HAS_IfcObjectPlacement
+#define SCHEMA_IfcObjectPlacement_HAS_PlacementRelTo
+#define SCHEMA_IfcObjectPlacement_PlacementRelTo_IS_OPTIONAL
+#define SCHEMA_IfcObjectPlacement_HAS_PlacesObject
+#define SCHEMA_IfcObjectPlacement_HAS_ReferencedByPlacements
+#define SCHEMA_HAS_IfcObjective
+#define SCHEMA_IfcObjective_HAS_BenchmarkValues
+#define SCHEMA_IfcObjective_BenchmarkValues_IS_OPTIONAL
+#define SCHEMA_IfcObjective_HAS_LogicalAggregator
+#define SCHEMA_IfcObjective_LogicalAggregator_IS_OPTIONAL
+#define SCHEMA_IfcObjective_HAS_ObjectiveQualifier
+#define SCHEMA_IfcObjective_HAS_UserDefinedQualifier
+#define SCHEMA_IfcObjective_UserDefinedQualifier_IS_OPTIONAL
+#define SCHEMA_HAS_IfcOccupant
+#define SCHEMA_IfcOccupant_HAS_PredefinedType
+#define SCHEMA_IfcOccupant_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcOffsetCurve
+#define SCHEMA_IfcOffsetCurve_HAS_BasisCurve
+#define SCHEMA_HAS_IfcOffsetCurve2D
+#define SCHEMA_IfcOffsetCurve2D_HAS_Distance
+#define SCHEMA_IfcOffsetCurve2D_HAS_SelfIntersect
+#define SCHEMA_HAS_IfcOffsetCurve3D
+#define SCHEMA_IfcOffsetCurve3D_HAS_Distance
+#define SCHEMA_IfcOffsetCurve3D_HAS_SelfIntersect
+#define SCHEMA_IfcOffsetCurve3D_HAS_RefDirection
+#define SCHEMA_HAS_IfcOffsetCurveByDistances
+#define SCHEMA_IfcOffsetCurveByDistances_HAS_OffsetValues
+#define SCHEMA_IfcOffsetCurveByDistances_HAS_Tag
+#define SCHEMA_IfcOffsetCurveByDistances_Tag_IS_OPTIONAL
+#define SCHEMA_HAS_IfcOpenCrossProfileDef
+#define SCHEMA_IfcOpenCrossProfileDef_HAS_HorizontalWidths
+#define SCHEMA_IfcOpenCrossProfileDef_HAS_Widths
+#define SCHEMA_IfcOpenCrossProfileDef_HAS_Slopes
+#define SCHEMA_IfcOpenCrossProfileDef_HAS_Tags
+#define SCHEMA_IfcOpenCrossProfileDef_Tags_IS_OPTIONAL
+#define SCHEMA_IfcOpenCrossProfileDef_HAS_OffsetPoint
+#define SCHEMA_IfcOpenCrossProfileDef_OffsetPoint_IS_OPTIONAL
+#define SCHEMA_HAS_IfcOpenShell
+#define SCHEMA_HAS_IfcOpeningElement
+#define SCHEMA_IfcOpeningElement_HAS_PredefinedType
+#define SCHEMA_IfcOpeningElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcOpeningElement_HAS_HasFillings
+#define SCHEMA_HAS_IfcOrganization
+#define SCHEMA_IfcOrganization_HAS_Identification
+#define SCHEMA_IfcOrganization_Identification_IS_OPTIONAL
+#define SCHEMA_IfcOrganization_HAS_Name
+#define SCHEMA_IfcOrganization_HAS_Description
+#define SCHEMA_IfcOrganization_Description_IS_OPTIONAL
+#define SCHEMA_IfcOrganization_HAS_Roles
+#define SCHEMA_IfcOrganization_Roles_IS_OPTIONAL
+#define SCHEMA_IfcOrganization_HAS_Addresses
+#define SCHEMA_IfcOrganization_Addresses_IS_OPTIONAL
+#define SCHEMA_IfcOrganization_HAS_IsRelatedBy
+#define SCHEMA_IfcOrganization_HAS_Relates
+#define SCHEMA_IfcOrganization_HAS_Engages
+#define SCHEMA_HAS_IfcOrganizationRelationship
+#define SCHEMA_IfcOrganizationRelationship_HAS_RelatingOrganization
+#define SCHEMA_IfcOrganizationRelationship_HAS_RelatedOrganizations
+#define SCHEMA_HAS_IfcOrientedEdge
+#define SCHEMA_IfcOrientedEdge_HAS_EdgeElement
+#define SCHEMA_IfcOrientedEdge_HAS_Orientation
+#define SCHEMA_HAS_IfcOuterBoundaryCurve
+#define SCHEMA_HAS_IfcOutlet
+#define SCHEMA_IfcOutlet_HAS_PredefinedType
+#define SCHEMA_IfcOutlet_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcOutletType
+#define SCHEMA_IfcOutletType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcOwnerHistory
+#define SCHEMA_IfcOwnerHistory_HAS_OwningUser
+#define SCHEMA_IfcOwnerHistory_HAS_OwningApplication
+#define SCHEMA_IfcOwnerHistory_HAS_State
+#define SCHEMA_IfcOwnerHistory_State_IS_OPTIONAL
+#define SCHEMA_IfcOwnerHistory_HAS_ChangeAction
+#define SCHEMA_IfcOwnerHistory_ChangeAction_IS_OPTIONAL
+#define SCHEMA_IfcOwnerHistory_HAS_LastModifiedDate
+#define SCHEMA_IfcOwnerHistory_LastModifiedDate_IS_OPTIONAL
+#define SCHEMA_IfcOwnerHistory_HAS_LastModifyingUser
+#define SCHEMA_IfcOwnerHistory_LastModifyingUser_IS_OPTIONAL
+#define SCHEMA_IfcOwnerHistory_HAS_LastModifyingApplication
+#define SCHEMA_IfcOwnerHistory_LastModifyingApplication_IS_OPTIONAL
+#define SCHEMA_IfcOwnerHistory_HAS_CreationDate
+#define SCHEMA_HAS_IfcParameterizedProfileDef
+#define SCHEMA_IfcParameterizedProfileDef_HAS_Position
+#define SCHEMA_IfcParameterizedProfileDef_Position_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPath
+#define SCHEMA_IfcPath_HAS_EdgeList
+#define SCHEMA_HAS_IfcPavement
+#define SCHEMA_IfcPavement_HAS_PredefinedType
+#define SCHEMA_IfcPavement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPavementType
+#define SCHEMA_IfcPavementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPcurve
+#define SCHEMA_IfcPcurve_HAS_BasisSurface
+#define SCHEMA_IfcPcurve_HAS_ReferenceCurve
+#define SCHEMA_HAS_IfcPerformanceHistory
+#define SCHEMA_IfcPerformanceHistory_HAS_LifeCyclePhase
+#define SCHEMA_IfcPerformanceHistory_HAS_PredefinedType
+#define SCHEMA_IfcPerformanceHistory_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPermeableCoveringProperties
+#define SCHEMA_IfcPermeableCoveringProperties_HAS_OperationType
+#define SCHEMA_IfcPermeableCoveringProperties_HAS_PanelPosition
+#define SCHEMA_IfcPermeableCoveringProperties_HAS_FrameDepth
+#define SCHEMA_IfcPermeableCoveringProperties_FrameDepth_IS_OPTIONAL
+#define SCHEMA_IfcPermeableCoveringProperties_HAS_FrameThickness
+#define SCHEMA_IfcPermeableCoveringProperties_FrameThickness_IS_OPTIONAL
+#define SCHEMA_IfcPermeableCoveringProperties_HAS_ShapeAspectStyle
+#define SCHEMA_IfcPermeableCoveringProperties_ShapeAspectStyle_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPermit
+#define SCHEMA_IfcPermit_HAS_PredefinedType
+#define SCHEMA_IfcPermit_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcPermit_HAS_Status
+#define SCHEMA_IfcPermit_Status_IS_OPTIONAL
+#define SCHEMA_IfcPermit_HAS_LongDescription
+#define SCHEMA_IfcPermit_LongDescription_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPerson
+#define SCHEMA_IfcPerson_HAS_Identification
+#define SCHEMA_IfcPerson_Identification_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_FamilyName
+#define SCHEMA_IfcPerson_FamilyName_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_GivenName
+#define SCHEMA_IfcPerson_GivenName_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_MiddleNames
+#define SCHEMA_IfcPerson_MiddleNames_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_PrefixTitles
+#define SCHEMA_IfcPerson_PrefixTitles_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_SuffixTitles
+#define SCHEMA_IfcPerson_SuffixTitles_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_Roles
+#define SCHEMA_IfcPerson_Roles_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_Addresses
+#define SCHEMA_IfcPerson_Addresses_IS_OPTIONAL
+#define SCHEMA_IfcPerson_HAS_EngagedIn
+#define SCHEMA_HAS_IfcPersonAndOrganization
+#define SCHEMA_IfcPersonAndOrganization_HAS_ThePerson
+#define SCHEMA_IfcPersonAndOrganization_HAS_TheOrganization
+#define SCHEMA_IfcPersonAndOrganization_HAS_Roles
+#define SCHEMA_IfcPersonAndOrganization_Roles_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPhysicalComplexQuantity
+#define SCHEMA_IfcPhysicalComplexQuantity_HAS_HasQuantities
+#define SCHEMA_IfcPhysicalComplexQuantity_HAS_Discrimination
+#define SCHEMA_IfcPhysicalComplexQuantity_HAS_Quality
+#define SCHEMA_IfcPhysicalComplexQuantity_Quality_IS_OPTIONAL
+#define SCHEMA_IfcPhysicalComplexQuantity_HAS_Usage
+#define SCHEMA_IfcPhysicalComplexQuantity_Usage_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPhysicalQuantity
+#define SCHEMA_IfcPhysicalQuantity_HAS_Name
+#define SCHEMA_IfcPhysicalQuantity_HAS_Description
+#define SCHEMA_IfcPhysicalQuantity_Description_IS_OPTIONAL
+#define SCHEMA_IfcPhysicalQuantity_HAS_HasExternalReferences
+#define SCHEMA_IfcPhysicalQuantity_HAS_PartOfComplex
+#define SCHEMA_HAS_IfcPhysicalSimpleQuantity
+#define SCHEMA_IfcPhysicalSimpleQuantity_HAS_Unit
+#define SCHEMA_IfcPhysicalSimpleQuantity_Unit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPile
+#define SCHEMA_IfcPile_HAS_PredefinedType
+#define SCHEMA_IfcPile_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcPile_HAS_ConstructionType
+#define SCHEMA_IfcPile_ConstructionType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPileType
+#define SCHEMA_IfcPileType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPipeFitting
+#define SCHEMA_IfcPipeFitting_HAS_PredefinedType
+#define SCHEMA_IfcPipeFitting_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPipeFittingType
+#define SCHEMA_IfcPipeFittingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPipeSegment
+#define SCHEMA_IfcPipeSegment_HAS_PredefinedType
+#define SCHEMA_IfcPipeSegment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPipeSegmentType
+#define SCHEMA_IfcPipeSegmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPixelTexture
+#define SCHEMA_IfcPixelTexture_HAS_Width
+#define SCHEMA_IfcPixelTexture_HAS_Height
+#define SCHEMA_IfcPixelTexture_HAS_ColourComponents
+#define SCHEMA_IfcPixelTexture_HAS_Pixel
+#define SCHEMA_HAS_IfcPlacement
+#define SCHEMA_IfcPlacement_HAS_Location
+#define SCHEMA_HAS_IfcPlanarBox
+#define SCHEMA_IfcPlanarBox_HAS_Placement
+#define SCHEMA_HAS_IfcPlanarExtent
+#define SCHEMA_IfcPlanarExtent_HAS_SizeInX
+#define SCHEMA_IfcPlanarExtent_HAS_SizeInY
+#define SCHEMA_HAS_IfcPlane
+#define SCHEMA_HAS_IfcPlate
+#define SCHEMA_IfcPlate_HAS_PredefinedType
+#define SCHEMA_IfcPlate_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPlateType
+#define SCHEMA_IfcPlateType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPoint
+#define SCHEMA_HAS_IfcPointByDistanceExpression
+#define SCHEMA_IfcPointByDistanceExpression_HAS_DistanceAlong
+#define SCHEMA_IfcPointByDistanceExpression_HAS_OffsetLateral
+#define SCHEMA_IfcPointByDistanceExpression_OffsetLateral_IS_OPTIONAL
+#define SCHEMA_IfcPointByDistanceExpression_HAS_OffsetVertical
+#define SCHEMA_IfcPointByDistanceExpression_OffsetVertical_IS_OPTIONAL
+#define SCHEMA_IfcPointByDistanceExpression_HAS_OffsetLongitudinal
+#define SCHEMA_IfcPointByDistanceExpression_OffsetLongitudinal_IS_OPTIONAL
+#define SCHEMA_IfcPointByDistanceExpression_HAS_BasisCurve
+#define SCHEMA_HAS_IfcPointOnCurve
+#define SCHEMA_IfcPointOnCurve_HAS_BasisCurve
+#define SCHEMA_IfcPointOnCurve_HAS_PointParameter
+#define SCHEMA_HAS_IfcPointOnSurface
+#define SCHEMA_IfcPointOnSurface_HAS_BasisSurface
+#define SCHEMA_IfcPointOnSurface_HAS_PointParameterU
+#define SCHEMA_IfcPointOnSurface_HAS_PointParameterV
+#define SCHEMA_HAS_IfcPolyLoop
+#define SCHEMA_IfcPolyLoop_HAS_Polygon
+#define SCHEMA_HAS_IfcPolygonalBoundedHalfSpace
+#define SCHEMA_IfcPolygonalBoundedHalfSpace_HAS_Position
+#define SCHEMA_IfcPolygonalBoundedHalfSpace_HAS_PolygonalBoundary
+#define SCHEMA_HAS_IfcPolygonalFaceSet
+#define SCHEMA_IfcPolygonalFaceSet_HAS_Closed
+#define SCHEMA_IfcPolygonalFaceSet_Closed_IS_OPTIONAL
+#define SCHEMA_IfcPolygonalFaceSet_HAS_Faces
+#define SCHEMA_IfcPolygonalFaceSet_HAS_PnIndex
+#define SCHEMA_IfcPolygonalFaceSet_PnIndex_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPolyline
+#define SCHEMA_IfcPolyline_HAS_Points
+#define SCHEMA_HAS_IfcPolynomialCurve
+#define SCHEMA_IfcPolynomialCurve_HAS_Position
+#define SCHEMA_IfcPolynomialCurve_HAS_CoefficientsX
+#define SCHEMA_IfcPolynomialCurve_CoefficientsX_IS_OPTIONAL
+#define SCHEMA_IfcPolynomialCurve_HAS_CoefficientsY
+#define SCHEMA_IfcPolynomialCurve_CoefficientsY_IS_OPTIONAL
+#define SCHEMA_IfcPolynomialCurve_HAS_CoefficientsZ
+#define SCHEMA_IfcPolynomialCurve_CoefficientsZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPort
+#define SCHEMA_IfcPort_HAS_ContainedIn
+#define SCHEMA_IfcPort_HAS_ConnectedFrom
+#define SCHEMA_IfcPort_HAS_ConnectedTo
+#define SCHEMA_HAS_IfcPositioningElement
+#define SCHEMA_IfcPositioningElement_HAS_ContainedInStructure
+#define SCHEMA_IfcPositioningElement_HAS_Positions
+#define SCHEMA_HAS_IfcPostalAddress
+#define SCHEMA_IfcPostalAddress_HAS_InternalLocation
+#define SCHEMA_IfcPostalAddress_InternalLocation_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_AddressLines
+#define SCHEMA_IfcPostalAddress_AddressLines_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_PostalBox
+#define SCHEMA_IfcPostalAddress_PostalBox_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_Town
+#define SCHEMA_IfcPostalAddress_Town_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_Region
+#define SCHEMA_IfcPostalAddress_Region_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_PostalCode
+#define SCHEMA_IfcPostalAddress_PostalCode_IS_OPTIONAL
+#define SCHEMA_IfcPostalAddress_HAS_Country
+#define SCHEMA_IfcPostalAddress_Country_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPreDefinedColour
+#define SCHEMA_HAS_IfcPreDefinedCurveFont
+#define SCHEMA_HAS_IfcPreDefinedItem
+#define SCHEMA_IfcPreDefinedItem_HAS_Name
+#define SCHEMA_HAS_IfcPreDefinedProperties
+#define SCHEMA_HAS_IfcPreDefinedPropertySet
+#define SCHEMA_HAS_IfcPreDefinedTextFont
+#define SCHEMA_HAS_IfcPresentationItem
+#define SCHEMA_HAS_IfcPresentationLayerAssignment
+#define SCHEMA_IfcPresentationLayerAssignment_HAS_Name
+#define SCHEMA_IfcPresentationLayerAssignment_HAS_Description
+#define SCHEMA_IfcPresentationLayerAssignment_Description_IS_OPTIONAL
+#define SCHEMA_IfcPresentationLayerAssignment_HAS_AssignedItems
+#define SCHEMA_IfcPresentationLayerAssignment_HAS_Identifier
+#define SCHEMA_IfcPresentationLayerAssignment_Identifier_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPresentationLayerWithStyle
+#define SCHEMA_IfcPresentationLayerWithStyle_HAS_LayerOn
+#define SCHEMA_IfcPresentationLayerWithStyle_HAS_LayerFrozen
+#define SCHEMA_IfcPresentationLayerWithStyle_HAS_LayerBlocked
+#define SCHEMA_IfcPresentationLayerWithStyle_HAS_LayerStyles
+#define SCHEMA_HAS_IfcPresentationStyle
+#define SCHEMA_IfcPresentationStyle_HAS_Name
+#define SCHEMA_IfcPresentationStyle_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProcedure
+#define SCHEMA_IfcProcedure_HAS_PredefinedType
+#define SCHEMA_IfcProcedure_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProcedureType
+#define SCHEMA_IfcProcedureType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcProcess
+#define SCHEMA_IfcProcess_HAS_Identification
+#define SCHEMA_IfcProcess_Identification_IS_OPTIONAL
+#define SCHEMA_IfcProcess_HAS_LongDescription
+#define SCHEMA_IfcProcess_LongDescription_IS_OPTIONAL
+#define SCHEMA_IfcProcess_HAS_IsPredecessorTo
+#define SCHEMA_IfcProcess_HAS_IsSuccessorFrom
+#define SCHEMA_IfcProcess_HAS_OperatesOn
+#define SCHEMA_HAS_IfcProduct
+#define SCHEMA_IfcProduct_HAS_ObjectPlacement
+#define SCHEMA_IfcProduct_ObjectPlacement_IS_OPTIONAL
+#define SCHEMA_IfcProduct_HAS_Representation
+#define SCHEMA_IfcProduct_Representation_IS_OPTIONAL
+#define SCHEMA_IfcProduct_HAS_ReferencedBy
+#define SCHEMA_IfcProduct_HAS_PositionedRelativeTo
+#define SCHEMA_IfcProduct_HAS_ReferencedInStructures
+#define SCHEMA_HAS_IfcProductDefinitionShape
+#define SCHEMA_IfcProductDefinitionShape_HAS_ShapeOfProduct
+#define SCHEMA_IfcProductDefinitionShape_HAS_HasShapeAspects
+#define SCHEMA_HAS_IfcProductRepresentation
+#define SCHEMA_IfcProductRepresentation_HAS_Name
+#define SCHEMA_IfcProductRepresentation_Name_IS_OPTIONAL
+#define SCHEMA_IfcProductRepresentation_HAS_Description
+#define SCHEMA_IfcProductRepresentation_Description_IS_OPTIONAL
+#define SCHEMA_IfcProductRepresentation_HAS_Representations
+#define SCHEMA_HAS_IfcProfileDef
+#define SCHEMA_IfcProfileDef_HAS_ProfileType
+#define SCHEMA_IfcProfileDef_HAS_ProfileName
+#define SCHEMA_IfcProfileDef_ProfileName_IS_OPTIONAL
+#define SCHEMA_IfcProfileDef_HAS_HasExternalReference
+#define SCHEMA_IfcProfileDef_HAS_HasProperties
+#define SCHEMA_HAS_IfcProfileProperties
+#define SCHEMA_IfcProfileProperties_HAS_ProfileDefinition
+#define SCHEMA_HAS_IfcProject
+#define SCHEMA_HAS_IfcProjectLibrary
+#define SCHEMA_HAS_IfcProjectOrder
+#define SCHEMA_IfcProjectOrder_HAS_PredefinedType
+#define SCHEMA_IfcProjectOrder_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcProjectOrder_HAS_Status
+#define SCHEMA_IfcProjectOrder_Status_IS_OPTIONAL
+#define SCHEMA_IfcProjectOrder_HAS_LongDescription
+#define SCHEMA_IfcProjectOrder_LongDescription_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProjectedCRS
+#define SCHEMA_IfcProjectedCRS_HAS_VerticalDatum
+#define SCHEMA_IfcProjectedCRS_VerticalDatum_IS_OPTIONAL
+#define SCHEMA_IfcProjectedCRS_HAS_MapProjection
+#define SCHEMA_IfcProjectedCRS_MapProjection_IS_OPTIONAL
+#define SCHEMA_IfcProjectedCRS_HAS_MapZone
+#define SCHEMA_IfcProjectedCRS_MapZone_IS_OPTIONAL
+#define SCHEMA_IfcProjectedCRS_HAS_MapUnit
+#define SCHEMA_IfcProjectedCRS_MapUnit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProjectionElement
+#define SCHEMA_IfcProjectionElement_HAS_PredefinedType
+#define SCHEMA_IfcProjectionElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProperty
+#define SCHEMA_IfcProperty_HAS_Name
+#define SCHEMA_IfcProperty_HAS_Specification
+#define SCHEMA_IfcProperty_Specification_IS_OPTIONAL
+#define SCHEMA_IfcProperty_HAS_PartOfPset
+#define SCHEMA_IfcProperty_HAS_PropertyForDependance
+#define SCHEMA_IfcProperty_HAS_PropertyDependsOn
+#define SCHEMA_IfcProperty_HAS_PartOfComplex
+#define SCHEMA_IfcProperty_HAS_HasConstraints
+#define SCHEMA_IfcProperty_HAS_HasApprovals
+#define SCHEMA_HAS_IfcPropertyAbstraction
+#define SCHEMA_IfcPropertyAbstraction_HAS_HasExternalReferences
+#define SCHEMA_HAS_IfcPropertyBoundedValue
+#define SCHEMA_IfcPropertyBoundedValue_HAS_UpperBoundValue
+#define SCHEMA_IfcPropertyBoundedValue_UpperBoundValue_IS_OPTIONAL
+#define SCHEMA_IfcPropertyBoundedValue_HAS_LowerBoundValue
+#define SCHEMA_IfcPropertyBoundedValue_LowerBoundValue_IS_OPTIONAL
+#define SCHEMA_IfcPropertyBoundedValue_HAS_Unit
+#define SCHEMA_IfcPropertyBoundedValue_Unit_IS_OPTIONAL
+#define SCHEMA_IfcPropertyBoundedValue_HAS_SetPointValue
+#define SCHEMA_IfcPropertyBoundedValue_SetPointValue_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyDefinition
+#define SCHEMA_IfcPropertyDefinition_HAS_HasContext
+#define SCHEMA_IfcPropertyDefinition_HAS_HasAssociations
+#define SCHEMA_HAS_IfcPropertyDependencyRelationship
+#define SCHEMA_IfcPropertyDependencyRelationship_HAS_DependingProperty
+#define SCHEMA_IfcPropertyDependencyRelationship_HAS_DependantProperty
+#define SCHEMA_IfcPropertyDependencyRelationship_HAS_Expression
+#define SCHEMA_IfcPropertyDependencyRelationship_Expression_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyEnumeratedValue
+#define SCHEMA_IfcPropertyEnumeratedValue_HAS_EnumerationValues
+#define SCHEMA_IfcPropertyEnumeratedValue_EnumerationValues_IS_OPTIONAL
+#define SCHEMA_IfcPropertyEnumeratedValue_HAS_EnumerationReference
+#define SCHEMA_IfcPropertyEnumeratedValue_EnumerationReference_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyEnumeration
+#define SCHEMA_IfcPropertyEnumeration_HAS_Name
+#define SCHEMA_IfcPropertyEnumeration_HAS_EnumerationValues
+#define SCHEMA_IfcPropertyEnumeration_HAS_Unit
+#define SCHEMA_IfcPropertyEnumeration_Unit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyListValue
+#define SCHEMA_IfcPropertyListValue_HAS_ListValues
+#define SCHEMA_IfcPropertyListValue_ListValues_IS_OPTIONAL
+#define SCHEMA_IfcPropertyListValue_HAS_Unit
+#define SCHEMA_IfcPropertyListValue_Unit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyReferenceValue
+#define SCHEMA_IfcPropertyReferenceValue_HAS_UsageName
+#define SCHEMA_IfcPropertyReferenceValue_UsageName_IS_OPTIONAL
+#define SCHEMA_IfcPropertyReferenceValue_HAS_PropertyReference
+#define SCHEMA_IfcPropertyReferenceValue_PropertyReference_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertySet
+#define SCHEMA_IfcPropertySet_HAS_HasProperties
+#define SCHEMA_HAS_IfcPropertySetDefinition
+#define SCHEMA_IfcPropertySetDefinition_HAS_DefinesType
+#define SCHEMA_IfcPropertySetDefinition_HAS_IsDefinedBy
+#define SCHEMA_IfcPropertySetDefinition_HAS_DefinesOccurrence
+#define SCHEMA_HAS_IfcPropertySetTemplate
+#define SCHEMA_IfcPropertySetTemplate_HAS_TemplateType
+#define SCHEMA_IfcPropertySetTemplate_TemplateType_IS_OPTIONAL
+#define SCHEMA_IfcPropertySetTemplate_HAS_ApplicableEntity
+#define SCHEMA_IfcPropertySetTemplate_ApplicableEntity_IS_OPTIONAL
+#define SCHEMA_IfcPropertySetTemplate_HAS_HasPropertyTemplates
+#define SCHEMA_IfcPropertySetTemplate_HAS_Defines
+#define SCHEMA_HAS_IfcPropertySingleValue
+#define SCHEMA_IfcPropertySingleValue_HAS_NominalValue
+#define SCHEMA_IfcPropertySingleValue_NominalValue_IS_OPTIONAL
+#define SCHEMA_IfcPropertySingleValue_HAS_Unit
+#define SCHEMA_IfcPropertySingleValue_Unit_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyTableValue
+#define SCHEMA_IfcPropertyTableValue_HAS_DefiningValues
+#define SCHEMA_IfcPropertyTableValue_DefiningValues_IS_OPTIONAL
+#define SCHEMA_IfcPropertyTableValue_HAS_DefinedValues
+#define SCHEMA_IfcPropertyTableValue_DefinedValues_IS_OPTIONAL
+#define SCHEMA_IfcPropertyTableValue_HAS_Expression
+#define SCHEMA_IfcPropertyTableValue_Expression_IS_OPTIONAL
+#define SCHEMA_IfcPropertyTableValue_HAS_DefiningUnit
+#define SCHEMA_IfcPropertyTableValue_DefiningUnit_IS_OPTIONAL
+#define SCHEMA_IfcPropertyTableValue_HAS_DefinedUnit
+#define SCHEMA_IfcPropertyTableValue_DefinedUnit_IS_OPTIONAL
+#define SCHEMA_IfcPropertyTableValue_HAS_CurveInterpolation
+#define SCHEMA_IfcPropertyTableValue_CurveInterpolation_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPropertyTemplate
+#define SCHEMA_IfcPropertyTemplate_HAS_PartOfComplexTemplate
+#define SCHEMA_IfcPropertyTemplate_HAS_PartOfPsetTemplate
+#define SCHEMA_HAS_IfcPropertyTemplateDefinition
+#define SCHEMA_HAS_IfcProtectiveDevice
+#define SCHEMA_IfcProtectiveDevice_HAS_PredefinedType
+#define SCHEMA_IfcProtectiveDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProtectiveDeviceTrippingUnit
+#define SCHEMA_IfcProtectiveDeviceTrippingUnit_HAS_PredefinedType
+#define SCHEMA_IfcProtectiveDeviceTrippingUnit_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcProtectiveDeviceTrippingUnitType
+#define SCHEMA_IfcProtectiveDeviceTrippingUnitType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcProtectiveDeviceType
+#define SCHEMA_IfcProtectiveDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcPump
+#define SCHEMA_IfcPump_HAS_PredefinedType
+#define SCHEMA_IfcPump_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcPumpType
+#define SCHEMA_IfcPumpType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcQuantityArea
+#define SCHEMA_IfcQuantityArea_HAS_AreaValue
+#define SCHEMA_IfcQuantityArea_HAS_Formula
+#define SCHEMA_IfcQuantityArea_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantityCount
+#define SCHEMA_IfcQuantityCount_HAS_CountValue
+#define SCHEMA_IfcQuantityCount_HAS_Formula
+#define SCHEMA_IfcQuantityCount_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantityLength
+#define SCHEMA_IfcQuantityLength_HAS_LengthValue
+#define SCHEMA_IfcQuantityLength_HAS_Formula
+#define SCHEMA_IfcQuantityLength_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantityNumber
+#define SCHEMA_IfcQuantityNumber_HAS_NumberValue
+#define SCHEMA_IfcQuantityNumber_HAS_Formula
+#define SCHEMA_IfcQuantityNumber_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantitySet
+#define SCHEMA_HAS_IfcQuantityTime
+#define SCHEMA_IfcQuantityTime_HAS_TimeValue
+#define SCHEMA_IfcQuantityTime_HAS_Formula
+#define SCHEMA_IfcQuantityTime_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantityVolume
+#define SCHEMA_IfcQuantityVolume_HAS_VolumeValue
+#define SCHEMA_IfcQuantityVolume_HAS_Formula
+#define SCHEMA_IfcQuantityVolume_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcQuantityWeight
+#define SCHEMA_IfcQuantityWeight_HAS_WeightValue
+#define SCHEMA_IfcQuantityWeight_HAS_Formula
+#define SCHEMA_IfcQuantityWeight_Formula_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRail
+#define SCHEMA_IfcRail_HAS_PredefinedType
+#define SCHEMA_IfcRail_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRailType
+#define SCHEMA_IfcRailType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcRailing
+#define SCHEMA_IfcRailing_HAS_PredefinedType
+#define SCHEMA_IfcRailing_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRailingType
+#define SCHEMA_IfcRailingType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcRailway
+#define SCHEMA_IfcRailway_HAS_PredefinedType
+#define SCHEMA_IfcRailway_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRailwayPart
+#define SCHEMA_IfcRailwayPart_HAS_PredefinedType
+#define SCHEMA_IfcRailwayPart_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRamp
+#define SCHEMA_IfcRamp_HAS_PredefinedType
+#define SCHEMA_IfcRamp_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRampFlight
+#define SCHEMA_IfcRampFlight_HAS_PredefinedType
+#define SCHEMA_IfcRampFlight_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRampFlightType
+#define SCHEMA_IfcRampFlightType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcRampType
+#define SCHEMA_IfcRampType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcRationalBSplineCurveWithKnots
+#define SCHEMA_IfcRationalBSplineCurveWithKnots_HAS_WeightsData
+#define SCHEMA_HAS_IfcRationalBSplineSurfaceWithKnots
+#define SCHEMA_IfcRationalBSplineSurfaceWithKnots_HAS_WeightsData
+#define SCHEMA_HAS_IfcRectangleHollowProfileDef
+#define SCHEMA_IfcRectangleHollowProfileDef_HAS_WallThickness
+#define SCHEMA_IfcRectangleHollowProfileDef_HAS_InnerFilletRadius
+#define SCHEMA_IfcRectangleHollowProfileDef_InnerFilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcRectangleHollowProfileDef_HAS_OuterFilletRadius
+#define SCHEMA_IfcRectangleHollowProfileDef_OuterFilletRadius_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRectangleProfileDef
+#define SCHEMA_IfcRectangleProfileDef_HAS_XDim
+#define SCHEMA_IfcRectangleProfileDef_HAS_YDim
+#define SCHEMA_HAS_IfcRectangularPyramid
+#define SCHEMA_IfcRectangularPyramid_HAS_XLength
+#define SCHEMA_IfcRectangularPyramid_HAS_YLength
+#define SCHEMA_IfcRectangularPyramid_HAS_Height
+#define SCHEMA_HAS_IfcRectangularTrimmedSurface
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_BasisSurface
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_U1
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_V1
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_U2
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_V2
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_Usense
+#define SCHEMA_IfcRectangularTrimmedSurface_HAS_Vsense
+#define SCHEMA_HAS_IfcRecurrencePattern
+#define SCHEMA_IfcRecurrencePattern_HAS_RecurrenceType
+#define SCHEMA_IfcRecurrencePattern_HAS_DayComponent
+#define SCHEMA_IfcRecurrencePattern_DayComponent_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_WeekdayComponent
+#define SCHEMA_IfcRecurrencePattern_WeekdayComponent_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_MonthComponent
+#define SCHEMA_IfcRecurrencePattern_MonthComponent_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_Position
+#define SCHEMA_IfcRecurrencePattern_Position_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_Interval
+#define SCHEMA_IfcRecurrencePattern_Interval_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_Occurrences
+#define SCHEMA_IfcRecurrencePattern_Occurrences_IS_OPTIONAL
+#define SCHEMA_IfcRecurrencePattern_HAS_TimePeriods
+#define SCHEMA_IfcRecurrencePattern_TimePeriods_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReference
+#define SCHEMA_IfcReference_HAS_TypeIdentifier
+#define SCHEMA_IfcReference_TypeIdentifier_IS_OPTIONAL
+#define SCHEMA_IfcReference_HAS_AttributeIdentifier
+#define SCHEMA_IfcReference_AttributeIdentifier_IS_OPTIONAL
+#define SCHEMA_IfcReference_HAS_InstanceName
+#define SCHEMA_IfcReference_InstanceName_IS_OPTIONAL
+#define SCHEMA_IfcReference_HAS_ListPositions
+#define SCHEMA_IfcReference_ListPositions_IS_OPTIONAL
+#define SCHEMA_IfcReference_HAS_InnerReference
+#define SCHEMA_IfcReference_InnerReference_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReferent
+#define SCHEMA_IfcReferent_HAS_PredefinedType
+#define SCHEMA_IfcReferent_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRegularTimeSeries
+#define SCHEMA_IfcRegularTimeSeries_HAS_TimeStep
+#define SCHEMA_IfcRegularTimeSeries_HAS_Values
+#define SCHEMA_HAS_IfcReinforcedSoil
+#define SCHEMA_IfcReinforcedSoil_HAS_PredefinedType
+#define SCHEMA_IfcReinforcedSoil_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcementBarProperties
+#define SCHEMA_IfcReinforcementBarProperties_HAS_TotalCrossSectionArea
+#define SCHEMA_IfcReinforcementBarProperties_HAS_SteelGrade
+#define SCHEMA_IfcReinforcementBarProperties_HAS_BarSurface
+#define SCHEMA_IfcReinforcementBarProperties_BarSurface_IS_OPTIONAL
+#define SCHEMA_IfcReinforcementBarProperties_HAS_EffectiveDepth
+#define SCHEMA_IfcReinforcementBarProperties_EffectiveDepth_IS_OPTIONAL
+#define SCHEMA_IfcReinforcementBarProperties_HAS_NominalBarDiameter
+#define SCHEMA_IfcReinforcementBarProperties_NominalBarDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcementBarProperties_HAS_BarCount
+#define SCHEMA_IfcReinforcementBarProperties_BarCount_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcementDefinitionProperties
+#define SCHEMA_IfcReinforcementDefinitionProperties_HAS_DefinitionType
+#define SCHEMA_IfcReinforcementDefinitionProperties_DefinitionType_IS_OPTIONAL
+#define SCHEMA_IfcReinforcementDefinitionProperties_HAS_ReinforcementSectionDefinitions
+#define SCHEMA_HAS_IfcReinforcingBar
+#define SCHEMA_IfcReinforcingBar_HAS_NominalDiameter
+#define SCHEMA_IfcReinforcingBar_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBar_HAS_CrossSectionArea
+#define SCHEMA_IfcReinforcingBar_CrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBar_HAS_BarLength
+#define SCHEMA_IfcReinforcingBar_BarLength_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBar_HAS_PredefinedType
+#define SCHEMA_IfcReinforcingBar_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBar_HAS_BarSurface
+#define SCHEMA_IfcReinforcingBar_BarSurface_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcingBarType
+#define SCHEMA_IfcReinforcingBarType_HAS_PredefinedType
+#define SCHEMA_IfcReinforcingBarType_HAS_NominalDiameter
+#define SCHEMA_IfcReinforcingBarType_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBarType_HAS_CrossSectionArea
+#define SCHEMA_IfcReinforcingBarType_CrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBarType_HAS_BarLength
+#define SCHEMA_IfcReinforcingBarType_BarLength_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBarType_HAS_BarSurface
+#define SCHEMA_IfcReinforcingBarType_BarSurface_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBarType_HAS_BendingShapeCode
+#define SCHEMA_IfcReinforcingBarType_BendingShapeCode_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingBarType_HAS_BendingParameters
+#define SCHEMA_IfcReinforcingBarType_BendingParameters_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcingElement
+#define SCHEMA_IfcReinforcingElement_HAS_SteelGrade
+#define SCHEMA_IfcReinforcingElement_SteelGrade_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcingElementType
+#define SCHEMA_HAS_IfcReinforcingMesh
+#define SCHEMA_IfcReinforcingMesh_HAS_MeshLength
+#define SCHEMA_IfcReinforcingMesh_MeshLength_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_MeshWidth
+#define SCHEMA_IfcReinforcingMesh_MeshWidth_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_LongitudinalBarNominalDiameter
+#define SCHEMA_IfcReinforcingMesh_LongitudinalBarNominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_TransverseBarNominalDiameter
+#define SCHEMA_IfcReinforcingMesh_TransverseBarNominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_LongitudinalBarCrossSectionArea
+#define SCHEMA_IfcReinforcingMesh_LongitudinalBarCrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_TransverseBarCrossSectionArea
+#define SCHEMA_IfcReinforcingMesh_TransverseBarCrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_LongitudinalBarSpacing
+#define SCHEMA_IfcReinforcingMesh_LongitudinalBarSpacing_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_TransverseBarSpacing
+#define SCHEMA_IfcReinforcingMesh_TransverseBarSpacing_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMesh_HAS_PredefinedType
+#define SCHEMA_IfcReinforcingMesh_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcReinforcingMeshType
+#define SCHEMA_IfcReinforcingMeshType_HAS_PredefinedType
+#define SCHEMA_IfcReinforcingMeshType_HAS_MeshLength
+#define SCHEMA_IfcReinforcingMeshType_MeshLength_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_MeshWidth
+#define SCHEMA_IfcReinforcingMeshType_MeshWidth_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_LongitudinalBarNominalDiameter
+#define SCHEMA_IfcReinforcingMeshType_LongitudinalBarNominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_TransverseBarNominalDiameter
+#define SCHEMA_IfcReinforcingMeshType_TransverseBarNominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_LongitudinalBarCrossSectionArea
+#define SCHEMA_IfcReinforcingMeshType_LongitudinalBarCrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_TransverseBarCrossSectionArea
+#define SCHEMA_IfcReinforcingMeshType_TransverseBarCrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_LongitudinalBarSpacing
+#define SCHEMA_IfcReinforcingMeshType_LongitudinalBarSpacing_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_TransverseBarSpacing
+#define SCHEMA_IfcReinforcingMeshType_TransverseBarSpacing_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_BendingShapeCode
+#define SCHEMA_IfcReinforcingMeshType_BendingShapeCode_IS_OPTIONAL
+#define SCHEMA_IfcReinforcingMeshType_HAS_BendingParameters
+#define SCHEMA_IfcReinforcingMeshType_BendingParameters_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelAdheresToElement
+#define SCHEMA_IfcRelAdheresToElement_HAS_RelatingElement
+#define SCHEMA_IfcRelAdheresToElement_HAS_RelatedSurfaceFeatures
+#define SCHEMA_HAS_IfcRelAggregates
+#define SCHEMA_IfcRelAggregates_HAS_RelatingObject
+#define SCHEMA_IfcRelAggregates_HAS_RelatedObjects
+#define SCHEMA_HAS_IfcRelAssigns
+#define SCHEMA_IfcRelAssigns_HAS_RelatedObjects
+#define SCHEMA_IfcRelAssigns_HAS_RelatedObjectsType
+#define SCHEMA_IfcRelAssigns_RelatedObjectsType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelAssignsToActor
+#define SCHEMA_IfcRelAssignsToActor_HAS_RelatingActor
+#define SCHEMA_IfcRelAssignsToActor_HAS_ActingRole
+#define SCHEMA_IfcRelAssignsToActor_ActingRole_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelAssignsToControl
+#define SCHEMA_IfcRelAssignsToControl_HAS_RelatingControl
+#define SCHEMA_HAS_IfcRelAssignsToGroup
+#define SCHEMA_IfcRelAssignsToGroup_HAS_RelatingGroup
+#define SCHEMA_HAS_IfcRelAssignsToGroupByFactor
+#define SCHEMA_IfcRelAssignsToGroupByFactor_HAS_Factor
+#define SCHEMA_HAS_IfcRelAssignsToProcess
+#define SCHEMA_IfcRelAssignsToProcess_HAS_RelatingProcess
+#define SCHEMA_IfcRelAssignsToProcess_HAS_QuantityInProcess
+#define SCHEMA_IfcRelAssignsToProcess_QuantityInProcess_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelAssignsToProduct
+#define SCHEMA_IfcRelAssignsToProduct_HAS_RelatingProduct
+#define SCHEMA_HAS_IfcRelAssignsToResource
+#define SCHEMA_IfcRelAssignsToResource_HAS_RelatingResource
+#define SCHEMA_HAS_IfcRelAssociates
+#define SCHEMA_IfcRelAssociates_HAS_RelatedObjects
+#define SCHEMA_HAS_IfcRelAssociatesApproval
+#define SCHEMA_IfcRelAssociatesApproval_HAS_RelatingApproval
+#define SCHEMA_HAS_IfcRelAssociatesClassification
+#define SCHEMA_IfcRelAssociatesClassification_HAS_RelatingClassification
+#define SCHEMA_HAS_IfcRelAssociatesConstraint
+#define SCHEMA_IfcRelAssociatesConstraint_HAS_Intent
+#define SCHEMA_IfcRelAssociatesConstraint_Intent_IS_OPTIONAL
+#define SCHEMA_IfcRelAssociatesConstraint_HAS_RelatingConstraint
+#define SCHEMA_HAS_IfcRelAssociatesDocument
+#define SCHEMA_IfcRelAssociatesDocument_HAS_RelatingDocument
+#define SCHEMA_HAS_IfcRelAssociatesLibrary
+#define SCHEMA_IfcRelAssociatesLibrary_HAS_RelatingLibrary
+#define SCHEMA_HAS_IfcRelAssociatesMaterial
+#define SCHEMA_IfcRelAssociatesMaterial_HAS_RelatingMaterial
+#define SCHEMA_HAS_IfcRelAssociatesProfileDef
+#define SCHEMA_IfcRelAssociatesProfileDef_HAS_RelatingProfileDef
+#define SCHEMA_HAS_IfcRelConnects
+#define SCHEMA_HAS_IfcRelConnectsElements
+#define SCHEMA_IfcRelConnectsElements_HAS_ConnectionGeometry
+#define SCHEMA_IfcRelConnectsElements_ConnectionGeometry_IS_OPTIONAL
+#define SCHEMA_IfcRelConnectsElements_HAS_RelatingElement
+#define SCHEMA_IfcRelConnectsElements_HAS_RelatedElement
+#define SCHEMA_HAS_IfcRelConnectsPathElements
+#define SCHEMA_IfcRelConnectsPathElements_HAS_RelatingPriorities
+#define SCHEMA_IfcRelConnectsPathElements_HAS_RelatedPriorities
+#define SCHEMA_IfcRelConnectsPathElements_HAS_RelatedConnectionType
+#define SCHEMA_IfcRelConnectsPathElements_HAS_RelatingConnectionType
+#define SCHEMA_HAS_IfcRelConnectsPortToElement
+#define SCHEMA_IfcRelConnectsPortToElement_HAS_RelatingPort
+#define SCHEMA_IfcRelConnectsPortToElement_HAS_RelatedElement
+#define SCHEMA_HAS_IfcRelConnectsPorts
+#define SCHEMA_IfcRelConnectsPorts_HAS_RelatingPort
+#define SCHEMA_IfcRelConnectsPorts_HAS_RelatedPort
+#define SCHEMA_IfcRelConnectsPorts_HAS_RealizingElement
+#define SCHEMA_IfcRelConnectsPorts_RealizingElement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelConnectsStructuralActivity
+#define SCHEMA_IfcRelConnectsStructuralActivity_HAS_RelatingElement
+#define SCHEMA_IfcRelConnectsStructuralActivity_HAS_RelatedStructuralActivity
+#define SCHEMA_HAS_IfcRelConnectsStructuralMember
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_RelatingStructuralMember
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_RelatedStructuralConnection
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_AppliedCondition
+#define SCHEMA_IfcRelConnectsStructuralMember_AppliedCondition_IS_OPTIONAL
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_AdditionalConditions
+#define SCHEMA_IfcRelConnectsStructuralMember_AdditionalConditions_IS_OPTIONAL
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_SupportedLength
+#define SCHEMA_IfcRelConnectsStructuralMember_SupportedLength_IS_OPTIONAL
+#define SCHEMA_IfcRelConnectsStructuralMember_HAS_ConditionCoordinateSystem
+#define SCHEMA_IfcRelConnectsStructuralMember_ConditionCoordinateSystem_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelConnectsWithEccentricity
+#define SCHEMA_IfcRelConnectsWithEccentricity_HAS_ConnectionConstraint
+#define SCHEMA_HAS_IfcRelConnectsWithRealizingElements
+#define SCHEMA_IfcRelConnectsWithRealizingElements_HAS_RealizingElements
+#define SCHEMA_IfcRelConnectsWithRealizingElements_HAS_ConnectionType
+#define SCHEMA_IfcRelConnectsWithRealizingElements_ConnectionType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelContainedInSpatialStructure
+#define SCHEMA_IfcRelContainedInSpatialStructure_HAS_RelatedElements
+#define SCHEMA_IfcRelContainedInSpatialStructure_HAS_RelatingStructure
+#define SCHEMA_HAS_IfcRelCoversBldgElements
+#define SCHEMA_IfcRelCoversBldgElements_HAS_RelatingBuildingElement
+#define SCHEMA_IfcRelCoversBldgElements_HAS_RelatedCoverings
+#define SCHEMA_HAS_IfcRelCoversSpaces
+#define SCHEMA_IfcRelCoversSpaces_HAS_RelatingSpace
+#define SCHEMA_IfcRelCoversSpaces_HAS_RelatedCoverings
+#define SCHEMA_HAS_IfcRelDeclares
+#define SCHEMA_IfcRelDeclares_HAS_RelatingContext
+#define SCHEMA_IfcRelDeclares_HAS_RelatedDefinitions
+#define SCHEMA_HAS_IfcRelDecomposes
+#define SCHEMA_HAS_IfcRelDefines
+#define SCHEMA_HAS_IfcRelDefinesByObject
+#define SCHEMA_IfcRelDefinesByObject_HAS_RelatedObjects
+#define SCHEMA_IfcRelDefinesByObject_HAS_RelatingObject
+#define SCHEMA_HAS_IfcRelDefinesByProperties
+#define SCHEMA_IfcRelDefinesByProperties_HAS_RelatedObjects
+#define SCHEMA_IfcRelDefinesByProperties_HAS_RelatingPropertyDefinition
+#define SCHEMA_HAS_IfcRelDefinesByTemplate
+#define SCHEMA_IfcRelDefinesByTemplate_HAS_RelatedPropertySets
+#define SCHEMA_IfcRelDefinesByTemplate_HAS_RelatingTemplate
+#define SCHEMA_HAS_IfcRelDefinesByType
+#define SCHEMA_IfcRelDefinesByType_HAS_RelatedObjects
+#define SCHEMA_IfcRelDefinesByType_HAS_RelatingType
+#define SCHEMA_HAS_IfcRelFillsElement
+#define SCHEMA_IfcRelFillsElement_HAS_RelatingOpeningElement
+#define SCHEMA_IfcRelFillsElement_HAS_RelatedBuildingElement
+#define SCHEMA_HAS_IfcRelFlowControlElements
+#define SCHEMA_IfcRelFlowControlElements_HAS_RelatedControlElements
+#define SCHEMA_IfcRelFlowControlElements_HAS_RelatingFlowElement
+#define SCHEMA_HAS_IfcRelInterferesElements
+#define SCHEMA_IfcRelInterferesElements_HAS_RelatingElement
+#define SCHEMA_IfcRelInterferesElements_HAS_RelatedElement
+#define SCHEMA_IfcRelInterferesElements_HAS_InterferenceGeometry
+#define SCHEMA_IfcRelInterferesElements_InterferenceGeometry_IS_OPTIONAL
+#define SCHEMA_IfcRelInterferesElements_HAS_InterferenceType
+#define SCHEMA_IfcRelInterferesElements_InterferenceType_IS_OPTIONAL
+#define SCHEMA_IfcRelInterferesElements_HAS_ImpliedOrder
+#define SCHEMA_IfcRelInterferesElements_HAS_InterferenceSpace
+#define SCHEMA_IfcRelInterferesElements_InterferenceSpace_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelNests
+#define SCHEMA_IfcRelNests_HAS_RelatingObject
+#define SCHEMA_IfcRelNests_HAS_RelatedObjects
+#define SCHEMA_HAS_IfcRelPositions
+#define SCHEMA_IfcRelPositions_HAS_RelatingPositioningElement
+#define SCHEMA_IfcRelPositions_HAS_RelatedProducts
+#define SCHEMA_HAS_IfcRelProjectsElement
+#define SCHEMA_IfcRelProjectsElement_HAS_RelatingElement
+#define SCHEMA_IfcRelProjectsElement_HAS_RelatedFeatureElement
+#define SCHEMA_HAS_IfcRelReferencedInSpatialStructure
+#define SCHEMA_IfcRelReferencedInSpatialStructure_HAS_RelatedElements
+#define SCHEMA_IfcRelReferencedInSpatialStructure_HAS_RelatingStructure
+#define SCHEMA_HAS_IfcRelSequence
+#define SCHEMA_IfcRelSequence_HAS_RelatingProcess
+#define SCHEMA_IfcRelSequence_HAS_RelatedProcess
+#define SCHEMA_IfcRelSequence_HAS_TimeLag
+#define SCHEMA_IfcRelSequence_TimeLag_IS_OPTIONAL
+#define SCHEMA_IfcRelSequence_HAS_SequenceType
+#define SCHEMA_IfcRelSequence_SequenceType_IS_OPTIONAL
+#define SCHEMA_IfcRelSequence_HAS_UserDefinedSequenceType
+#define SCHEMA_IfcRelSequence_UserDefinedSequenceType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRelServicesBuildings
+#define SCHEMA_IfcRelServicesBuildings_HAS_RelatingSystem
+#define SCHEMA_IfcRelServicesBuildings_HAS_RelatedBuildings
+#define SCHEMA_HAS_IfcRelSpaceBoundary
+#define SCHEMA_IfcRelSpaceBoundary_HAS_RelatingSpace
+#define SCHEMA_IfcRelSpaceBoundary_HAS_RelatedBuildingElement
+#define SCHEMA_IfcRelSpaceBoundary_HAS_ConnectionGeometry
+#define SCHEMA_IfcRelSpaceBoundary_ConnectionGeometry_IS_OPTIONAL
+#define SCHEMA_IfcRelSpaceBoundary_HAS_PhysicalOrVirtualBoundary
+#define SCHEMA_IfcRelSpaceBoundary_HAS_InternalOrExternalBoundary
+#define SCHEMA_HAS_IfcRelSpaceBoundary1stLevel
+#define SCHEMA_IfcRelSpaceBoundary1stLevel_HAS_ParentBoundary
+#define SCHEMA_IfcRelSpaceBoundary1stLevel_ParentBoundary_IS_OPTIONAL
+#define SCHEMA_IfcRelSpaceBoundary1stLevel_HAS_InnerBoundaries
+#define SCHEMA_HAS_IfcRelSpaceBoundary2ndLevel
+#define SCHEMA_IfcRelSpaceBoundary2ndLevel_HAS_CorrespondingBoundary
+#define SCHEMA_IfcRelSpaceBoundary2ndLevel_CorrespondingBoundary_IS_OPTIONAL
+#define SCHEMA_IfcRelSpaceBoundary2ndLevel_HAS_Corresponds
+#define SCHEMA_HAS_IfcRelVoidsElement
+#define SCHEMA_IfcRelVoidsElement_HAS_RelatingBuildingElement
+#define SCHEMA_IfcRelVoidsElement_HAS_RelatedOpeningElement
+#define SCHEMA_HAS_IfcRelationship
+#define SCHEMA_HAS_IfcReparametrisedCompositeCurveSegment
+#define SCHEMA_IfcReparametrisedCompositeCurveSegment_HAS_ParamLength
+#define SCHEMA_HAS_IfcRepresentation
+#define SCHEMA_IfcRepresentation_HAS_ContextOfItems
+#define SCHEMA_IfcRepresentation_HAS_RepresentationIdentifier
+#define SCHEMA_IfcRepresentation_RepresentationIdentifier_IS_OPTIONAL
+#define SCHEMA_IfcRepresentation_HAS_RepresentationType
+#define SCHEMA_IfcRepresentation_RepresentationType_IS_OPTIONAL
+#define SCHEMA_IfcRepresentation_HAS_Items
+#define SCHEMA_IfcRepresentation_HAS_RepresentationMap
+#define SCHEMA_IfcRepresentation_HAS_LayerAssignments
+#define SCHEMA_IfcRepresentation_HAS_OfProductRepresentation
+#define SCHEMA_HAS_IfcRepresentationContext
+#define SCHEMA_IfcRepresentationContext_HAS_ContextIdentifier
+#define SCHEMA_IfcRepresentationContext_ContextIdentifier_IS_OPTIONAL
+#define SCHEMA_IfcRepresentationContext_HAS_ContextType
+#define SCHEMA_IfcRepresentationContext_ContextType_IS_OPTIONAL
+#define SCHEMA_IfcRepresentationContext_HAS_RepresentationsInContext
+#define SCHEMA_HAS_IfcRepresentationItem
+#define SCHEMA_IfcRepresentationItem_HAS_LayerAssignment
+#define SCHEMA_IfcRepresentationItem_HAS_StyledByItem
+#define SCHEMA_HAS_IfcRepresentationMap
+#define SCHEMA_IfcRepresentationMap_HAS_MappingOrigin
+#define SCHEMA_IfcRepresentationMap_HAS_MappedRepresentation
+#define SCHEMA_IfcRepresentationMap_HAS_HasShapeAspects
+#define SCHEMA_IfcRepresentationMap_HAS_MapUsage
+#define SCHEMA_HAS_IfcResource
+#define SCHEMA_IfcResource_HAS_Identification
+#define SCHEMA_IfcResource_Identification_IS_OPTIONAL
+#define SCHEMA_IfcResource_HAS_LongDescription
+#define SCHEMA_IfcResource_LongDescription_IS_OPTIONAL
+#define SCHEMA_IfcResource_HAS_ResourceOf
+#define SCHEMA_HAS_IfcResourceApprovalRelationship
+#define SCHEMA_IfcResourceApprovalRelationship_HAS_RelatedResourceObjects
+#define SCHEMA_IfcResourceApprovalRelationship_HAS_RelatingApproval
+#define SCHEMA_HAS_IfcResourceConstraintRelationship
+#define SCHEMA_IfcResourceConstraintRelationship_HAS_RelatingConstraint
+#define SCHEMA_IfcResourceConstraintRelationship_HAS_RelatedResourceObjects
+#define SCHEMA_HAS_IfcResourceLevelRelationship
+#define SCHEMA_IfcResourceLevelRelationship_HAS_Name
+#define SCHEMA_IfcResourceLevelRelationship_Name_IS_OPTIONAL
+#define SCHEMA_IfcResourceLevelRelationship_HAS_Description
+#define SCHEMA_IfcResourceLevelRelationship_Description_IS_OPTIONAL
+#define SCHEMA_HAS_IfcResourceTime
+#define SCHEMA_IfcResourceTime_HAS_ScheduleWork
+#define SCHEMA_IfcResourceTime_ScheduleWork_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ScheduleUsage
+#define SCHEMA_IfcResourceTime_ScheduleUsage_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ScheduleStart
+#define SCHEMA_IfcResourceTime_ScheduleStart_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ScheduleFinish
+#define SCHEMA_IfcResourceTime_ScheduleFinish_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ScheduleContour
+#define SCHEMA_IfcResourceTime_ScheduleContour_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_LevelingDelay
+#define SCHEMA_IfcResourceTime_LevelingDelay_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_IsOverAllocated
+#define SCHEMA_IfcResourceTime_IsOverAllocated_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_StatusTime
+#define SCHEMA_IfcResourceTime_StatusTime_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ActualWork
+#define SCHEMA_IfcResourceTime_ActualWork_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ActualUsage
+#define SCHEMA_IfcResourceTime_ActualUsage_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ActualStart
+#define SCHEMA_IfcResourceTime_ActualStart_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_ActualFinish
+#define SCHEMA_IfcResourceTime_ActualFinish_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_RemainingWork
+#define SCHEMA_IfcResourceTime_RemainingWork_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_RemainingUsage
+#define SCHEMA_IfcResourceTime_RemainingUsage_IS_OPTIONAL
+#define SCHEMA_IfcResourceTime_HAS_Completion
+#define SCHEMA_IfcResourceTime_Completion_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRevolvedAreaSolid
+#define SCHEMA_IfcRevolvedAreaSolid_HAS_Axis
+#define SCHEMA_IfcRevolvedAreaSolid_HAS_Angle
+#define SCHEMA_HAS_IfcRevolvedAreaSolidTapered
+#define SCHEMA_IfcRevolvedAreaSolidTapered_HAS_EndSweptArea
+#define SCHEMA_HAS_IfcRightCircularCone
+#define SCHEMA_IfcRightCircularCone_HAS_Height
+#define SCHEMA_IfcRightCircularCone_HAS_BottomRadius
+#define SCHEMA_HAS_IfcRightCircularCylinder
+#define SCHEMA_IfcRightCircularCylinder_HAS_Height
+#define SCHEMA_IfcRightCircularCylinder_HAS_Radius
+#define SCHEMA_HAS_IfcRigidOperation
+#define SCHEMA_IfcRigidOperation_HAS_FirstCoordinate
+#define SCHEMA_IfcRigidOperation_HAS_SecondCoordinate
+#define SCHEMA_IfcRigidOperation_HAS_Height
+#define SCHEMA_IfcRigidOperation_Height_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRoad
+#define SCHEMA_IfcRoad_HAS_PredefinedType
+#define SCHEMA_IfcRoad_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRoadPart
+#define SCHEMA_IfcRoadPart_HAS_PredefinedType
+#define SCHEMA_IfcRoadPart_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRoof
+#define SCHEMA_IfcRoof_HAS_PredefinedType
+#define SCHEMA_IfcRoof_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRoofType
+#define SCHEMA_IfcRoofType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcRoot
+#define SCHEMA_IfcRoot_HAS_GlobalId
+#define SCHEMA_IfcRoot_HAS_OwnerHistory
+#define SCHEMA_IfcRoot_OwnerHistory_IS_OPTIONAL
+#define SCHEMA_IfcRoot_HAS_Name
+#define SCHEMA_IfcRoot_Name_IS_OPTIONAL
+#define SCHEMA_IfcRoot_HAS_Description
+#define SCHEMA_IfcRoot_Description_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRoundedRectangleProfileDef
+#define SCHEMA_IfcRoundedRectangleProfileDef_HAS_RoundingRadius
+#define SCHEMA_HAS_IfcSIUnit
+#define SCHEMA_IfcSIUnit_HAS_Prefix
+#define SCHEMA_IfcSIUnit_Prefix_IS_OPTIONAL
+#define SCHEMA_IfcSIUnit_HAS_Name
+#define SCHEMA_HAS_IfcSanitaryTerminal
+#define SCHEMA_IfcSanitaryTerminal_HAS_PredefinedType
+#define SCHEMA_IfcSanitaryTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSanitaryTerminalType
+#define SCHEMA_IfcSanitaryTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSchedulingTime
+#define SCHEMA_IfcSchedulingTime_HAS_Name
+#define SCHEMA_IfcSchedulingTime_Name_IS_OPTIONAL
+#define SCHEMA_IfcSchedulingTime_HAS_DataOrigin
+#define SCHEMA_IfcSchedulingTime_DataOrigin_IS_OPTIONAL
+#define SCHEMA_IfcSchedulingTime_HAS_UserDefinedDataOrigin
+#define SCHEMA_IfcSchedulingTime_UserDefinedDataOrigin_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSeamCurve
+#define SCHEMA_HAS_IfcSecondOrderPolynomialSpiral
+#define SCHEMA_IfcSecondOrderPolynomialSpiral_HAS_QuadraticTerm
+#define SCHEMA_IfcSecondOrderPolynomialSpiral_HAS_LinearTerm
+#define SCHEMA_IfcSecondOrderPolynomialSpiral_LinearTerm_IS_OPTIONAL
+#define SCHEMA_IfcSecondOrderPolynomialSpiral_HAS_ConstantTerm
+#define SCHEMA_IfcSecondOrderPolynomialSpiral_ConstantTerm_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSectionProperties
+#define SCHEMA_IfcSectionProperties_HAS_SectionType
+#define SCHEMA_IfcSectionProperties_HAS_StartProfile
+#define SCHEMA_IfcSectionProperties_HAS_EndProfile
+#define SCHEMA_IfcSectionProperties_EndProfile_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSectionReinforcementProperties
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_LongitudinalStartPosition
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_LongitudinalEndPosition
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_TransversePosition
+#define SCHEMA_IfcSectionReinforcementProperties_TransversePosition_IS_OPTIONAL
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_ReinforcementRole
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_SectionDefinition
+#define SCHEMA_IfcSectionReinforcementProperties_HAS_CrossSectionReinforcementDefinitions
+#define SCHEMA_HAS_IfcSectionedSolid
+#define SCHEMA_IfcSectionedSolid_HAS_Directrix
+#define SCHEMA_IfcSectionedSolid_HAS_CrossSections
+#define SCHEMA_HAS_IfcSectionedSolidHorizontal
+#define SCHEMA_IfcSectionedSolidHorizontal_HAS_CrossSectionPositions
+#define SCHEMA_HAS_IfcSectionedSpine
+#define SCHEMA_IfcSectionedSpine_HAS_SpineCurve
+#define SCHEMA_IfcSectionedSpine_HAS_CrossSections
+#define SCHEMA_IfcSectionedSpine_HAS_CrossSectionPositions
+#define SCHEMA_HAS_IfcSectionedSurface
+#define SCHEMA_IfcSectionedSurface_HAS_Directrix
+#define SCHEMA_IfcSectionedSurface_HAS_CrossSectionPositions
+#define SCHEMA_IfcSectionedSurface_HAS_CrossSections
+#define SCHEMA_HAS_IfcSegment
+#define SCHEMA_IfcSegment_HAS_Transition
+#define SCHEMA_IfcSegment_HAS_UsingCurves
+#define SCHEMA_HAS_IfcSegmentedReferenceCurve
+#define SCHEMA_IfcSegmentedReferenceCurve_HAS_BaseCurve
+#define SCHEMA_IfcSegmentedReferenceCurve_HAS_EndPoint
+#define SCHEMA_IfcSegmentedReferenceCurve_EndPoint_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSensor
+#define SCHEMA_IfcSensor_HAS_PredefinedType
+#define SCHEMA_IfcSensor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSensorType
+#define SCHEMA_IfcSensorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSeventhOrderPolynomialSpiral
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_SepticTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_SexticTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_SexticTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_QuinticTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_QuinticTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_QuarticTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_QuarticTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_CubicTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_CubicTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_QuadraticTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_QuadraticTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_LinearTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_LinearTerm_IS_OPTIONAL
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_HAS_ConstantTerm
+#define SCHEMA_IfcSeventhOrderPolynomialSpiral_ConstantTerm_IS_OPTIONAL
+#define SCHEMA_HAS_IfcShadingDevice
+#define SCHEMA_IfcShadingDevice_HAS_PredefinedType
+#define SCHEMA_IfcShadingDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcShadingDeviceType
+#define SCHEMA_IfcShadingDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcShapeAspect
+#define SCHEMA_IfcShapeAspect_HAS_ShapeRepresentations
+#define SCHEMA_IfcShapeAspect_HAS_Name
+#define SCHEMA_IfcShapeAspect_Name_IS_OPTIONAL
+#define SCHEMA_IfcShapeAspect_HAS_Description
+#define SCHEMA_IfcShapeAspect_Description_IS_OPTIONAL
+#define SCHEMA_IfcShapeAspect_HAS_ProductDefinitional
+#define SCHEMA_IfcShapeAspect_HAS_PartOfProductDefinitionShape
+#define SCHEMA_IfcShapeAspect_PartOfProductDefinitionShape_IS_OPTIONAL
+#define SCHEMA_IfcShapeAspect_HAS_HasExternalReferences
+#define SCHEMA_HAS_IfcShapeModel
+#define SCHEMA_IfcShapeModel_HAS_OfShapeAspect
+#define SCHEMA_HAS_IfcShapeRepresentation
+#define SCHEMA_HAS_IfcShellBasedSurfaceModel
+#define SCHEMA_IfcShellBasedSurfaceModel_HAS_SbsmBoundary
+#define SCHEMA_HAS_IfcSign
+#define SCHEMA_IfcSign_HAS_PredefinedType
+#define SCHEMA_IfcSign_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSignType
+#define SCHEMA_IfcSignType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSignal
+#define SCHEMA_IfcSignal_HAS_PredefinedType
+#define SCHEMA_IfcSignal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSignalType
+#define SCHEMA_IfcSignalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSimpleProperty
+#define SCHEMA_HAS_IfcSimplePropertyTemplate
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_TemplateType
+#define SCHEMA_IfcSimplePropertyTemplate_TemplateType_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_PrimaryMeasureType
+#define SCHEMA_IfcSimplePropertyTemplate_PrimaryMeasureType_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_SecondaryMeasureType
+#define SCHEMA_IfcSimplePropertyTemplate_SecondaryMeasureType_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_Enumerators
+#define SCHEMA_IfcSimplePropertyTemplate_Enumerators_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_PrimaryUnit
+#define SCHEMA_IfcSimplePropertyTemplate_PrimaryUnit_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_SecondaryUnit
+#define SCHEMA_IfcSimplePropertyTemplate_SecondaryUnit_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_Expression
+#define SCHEMA_IfcSimplePropertyTemplate_Expression_IS_OPTIONAL
+#define SCHEMA_IfcSimplePropertyTemplate_HAS_AccessState
+#define SCHEMA_IfcSimplePropertyTemplate_AccessState_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSineSpiral
+#define SCHEMA_IfcSineSpiral_HAS_SineTerm
+#define SCHEMA_IfcSineSpiral_HAS_LinearTerm
+#define SCHEMA_IfcSineSpiral_LinearTerm_IS_OPTIONAL
+#define SCHEMA_IfcSineSpiral_HAS_ConstantTerm
+#define SCHEMA_IfcSineSpiral_ConstantTerm_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSite
+#define SCHEMA_IfcSite_HAS_RefLatitude
+#define SCHEMA_IfcSite_RefLatitude_IS_OPTIONAL
+#define SCHEMA_IfcSite_HAS_RefLongitude
+#define SCHEMA_IfcSite_RefLongitude_IS_OPTIONAL
+#define SCHEMA_IfcSite_HAS_RefElevation
+#define SCHEMA_IfcSite_RefElevation_IS_OPTIONAL
+#define SCHEMA_IfcSite_HAS_LandTitleNumber
+#define SCHEMA_IfcSite_LandTitleNumber_IS_OPTIONAL
+#define SCHEMA_IfcSite_HAS_SiteAddress
+#define SCHEMA_IfcSite_SiteAddress_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSlab
+#define SCHEMA_IfcSlab_HAS_PredefinedType
+#define SCHEMA_IfcSlab_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSlabType
+#define SCHEMA_IfcSlabType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSlippageConnectionCondition
+#define SCHEMA_IfcSlippageConnectionCondition_HAS_SlippageX
+#define SCHEMA_IfcSlippageConnectionCondition_SlippageX_IS_OPTIONAL
+#define SCHEMA_IfcSlippageConnectionCondition_HAS_SlippageY
+#define SCHEMA_IfcSlippageConnectionCondition_SlippageY_IS_OPTIONAL
+#define SCHEMA_IfcSlippageConnectionCondition_HAS_SlippageZ
+#define SCHEMA_IfcSlippageConnectionCondition_SlippageZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSolarDevice
+#define SCHEMA_IfcSolarDevice_HAS_PredefinedType
+#define SCHEMA_IfcSolarDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSolarDeviceType
+#define SCHEMA_IfcSolarDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSolidModel
+#define SCHEMA_HAS_IfcSpace
+#define SCHEMA_IfcSpace_HAS_PredefinedType
+#define SCHEMA_IfcSpace_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcSpace_HAS_ElevationWithFlooring
+#define SCHEMA_IfcSpace_ElevationWithFlooring_IS_OPTIONAL
+#define SCHEMA_IfcSpace_HAS_HasCoverings
+#define SCHEMA_IfcSpace_HAS_BoundedBy
+#define SCHEMA_HAS_IfcSpaceHeater
+#define SCHEMA_IfcSpaceHeater_HAS_PredefinedType
+#define SCHEMA_IfcSpaceHeater_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSpaceHeaterType
+#define SCHEMA_IfcSpaceHeaterType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSpaceType
+#define SCHEMA_IfcSpaceType_HAS_PredefinedType
+#define SCHEMA_IfcSpaceType_HAS_LongName
+#define SCHEMA_IfcSpaceType_LongName_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSpatialElement
+#define SCHEMA_IfcSpatialElement_HAS_LongName
+#define SCHEMA_IfcSpatialElement_LongName_IS_OPTIONAL
+#define SCHEMA_IfcSpatialElement_HAS_ContainsElements
+#define SCHEMA_IfcSpatialElement_HAS_ServicedBySystems
+#define SCHEMA_IfcSpatialElement_HAS_ReferencesElements
+#define SCHEMA_IfcSpatialElement_HAS_IsInterferedByElements
+#define SCHEMA_IfcSpatialElement_HAS_InterferesElements
+#define SCHEMA_HAS_IfcSpatialElementType
+#define SCHEMA_IfcSpatialElementType_HAS_ElementType
+#define SCHEMA_IfcSpatialElementType_ElementType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSpatialStructureElement
+#define SCHEMA_IfcSpatialStructureElement_HAS_CompositionType
+#define SCHEMA_IfcSpatialStructureElement_CompositionType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSpatialStructureElementType
+#define SCHEMA_HAS_IfcSpatialZone
+#define SCHEMA_IfcSpatialZone_HAS_PredefinedType
+#define SCHEMA_IfcSpatialZone_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSpatialZoneType
+#define SCHEMA_IfcSpatialZoneType_HAS_PredefinedType
+#define SCHEMA_IfcSpatialZoneType_HAS_LongName
+#define SCHEMA_IfcSpatialZoneType_LongName_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSphere
+#define SCHEMA_IfcSphere_HAS_Radius
+#define SCHEMA_HAS_IfcSphericalSurface
+#define SCHEMA_IfcSphericalSurface_HAS_Radius
+#define SCHEMA_HAS_IfcSpiral
+#define SCHEMA_IfcSpiral_HAS_Position
+#define SCHEMA_HAS_IfcStackTerminal
+#define SCHEMA_IfcStackTerminal_HAS_PredefinedType
+#define SCHEMA_IfcStackTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStackTerminalType
+#define SCHEMA_IfcStackTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStair
+#define SCHEMA_IfcStair_HAS_PredefinedType
+#define SCHEMA_IfcStair_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStairFlight
+#define SCHEMA_IfcStairFlight_HAS_NumberOfRisers
+#define SCHEMA_IfcStairFlight_NumberOfRisers_IS_OPTIONAL
+#define SCHEMA_IfcStairFlight_HAS_NumberOfTreads
+#define SCHEMA_IfcStairFlight_NumberOfTreads_IS_OPTIONAL
+#define SCHEMA_IfcStairFlight_HAS_RiserHeight
+#define SCHEMA_IfcStairFlight_RiserHeight_IS_OPTIONAL
+#define SCHEMA_IfcStairFlight_HAS_TreadLength
+#define SCHEMA_IfcStairFlight_TreadLength_IS_OPTIONAL
+#define SCHEMA_IfcStairFlight_HAS_PredefinedType
+#define SCHEMA_IfcStairFlight_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStairFlightType
+#define SCHEMA_IfcStairFlightType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStairType
+#define SCHEMA_IfcStairType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStructuralAction
+#define SCHEMA_IfcStructuralAction_HAS_DestabilizingLoad
+#define SCHEMA_IfcStructuralAction_DestabilizingLoad_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralActivity
+#define SCHEMA_IfcStructuralActivity_HAS_AppliedLoad
+#define SCHEMA_IfcStructuralActivity_HAS_GlobalOrLocal
+#define SCHEMA_IfcStructuralActivity_HAS_AssignedToStructuralItem
+#define SCHEMA_HAS_IfcStructuralAnalysisModel
+#define SCHEMA_IfcStructuralAnalysisModel_HAS_PredefinedType
+#define SCHEMA_IfcStructuralAnalysisModel_HAS_OrientationOf2DPlane
+#define SCHEMA_IfcStructuralAnalysisModel_OrientationOf2DPlane_IS_OPTIONAL
+#define SCHEMA_IfcStructuralAnalysisModel_HAS_LoadedBy
+#define SCHEMA_IfcStructuralAnalysisModel_LoadedBy_IS_OPTIONAL
+#define SCHEMA_IfcStructuralAnalysisModel_HAS_HasResults
+#define SCHEMA_IfcStructuralAnalysisModel_HasResults_IS_OPTIONAL
+#define SCHEMA_IfcStructuralAnalysisModel_HAS_SharedPlacement
+#define SCHEMA_IfcStructuralAnalysisModel_SharedPlacement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralConnection
+#define SCHEMA_IfcStructuralConnection_HAS_AppliedCondition
+#define SCHEMA_IfcStructuralConnection_AppliedCondition_IS_OPTIONAL
+#define SCHEMA_IfcStructuralConnection_HAS_ConnectsStructuralMembers
+#define SCHEMA_HAS_IfcStructuralConnectionCondition
+#define SCHEMA_IfcStructuralConnectionCondition_HAS_Name
+#define SCHEMA_IfcStructuralConnectionCondition_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralCurveAction
+#define SCHEMA_IfcStructuralCurveAction_HAS_ProjectedOrTrue
+#define SCHEMA_IfcStructuralCurveAction_ProjectedOrTrue_IS_OPTIONAL
+#define SCHEMA_IfcStructuralCurveAction_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStructuralCurveConnection
+#define SCHEMA_IfcStructuralCurveConnection_HAS_AxisDirection
+#define SCHEMA_HAS_IfcStructuralCurveMember
+#define SCHEMA_IfcStructuralCurveMember_HAS_PredefinedType
+#define SCHEMA_IfcStructuralCurveMember_HAS_Axis
+#define SCHEMA_HAS_IfcStructuralCurveMemberVarying
+#define SCHEMA_HAS_IfcStructuralCurveReaction
+#define SCHEMA_IfcStructuralCurveReaction_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStructuralItem
+#define SCHEMA_IfcStructuralItem_HAS_AssignedStructuralActivity
+#define SCHEMA_HAS_IfcStructuralLinearAction
+#define SCHEMA_HAS_IfcStructuralLoad
+#define SCHEMA_IfcStructuralLoad_HAS_Name
+#define SCHEMA_IfcStructuralLoad_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadCase
+#define SCHEMA_IfcStructuralLoadCase_HAS_SelfWeightCoefficients
+#define SCHEMA_IfcStructuralLoadCase_SelfWeightCoefficients_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadConfiguration
+#define SCHEMA_IfcStructuralLoadConfiguration_HAS_Values
+#define SCHEMA_IfcStructuralLoadConfiguration_HAS_Locations
+#define SCHEMA_IfcStructuralLoadConfiguration_Locations_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadGroup
+#define SCHEMA_IfcStructuralLoadGroup_HAS_PredefinedType
+#define SCHEMA_IfcStructuralLoadGroup_HAS_ActionType
+#define SCHEMA_IfcStructuralLoadGroup_HAS_ActionSource
+#define SCHEMA_IfcStructuralLoadGroup_HAS_Coefficient
+#define SCHEMA_IfcStructuralLoadGroup_Coefficient_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadGroup_HAS_Purpose
+#define SCHEMA_IfcStructuralLoadGroup_Purpose_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadGroup_HAS_SourceOfResultGroup
+#define SCHEMA_IfcStructuralLoadGroup_HAS_LoadGroupFor
+#define SCHEMA_HAS_IfcStructuralLoadLinearForce
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearForceX
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearForceX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearForceY
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearForceY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearForceZ
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearForceZ_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearMomentX
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearMomentX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearMomentY
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearMomentY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadLinearForce_HAS_LinearMomentZ
+#define SCHEMA_IfcStructuralLoadLinearForce_LinearMomentZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadOrResult
+#define SCHEMA_HAS_IfcStructuralLoadPlanarForce
+#define SCHEMA_IfcStructuralLoadPlanarForce_HAS_PlanarForceX
+#define SCHEMA_IfcStructuralLoadPlanarForce_PlanarForceX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadPlanarForce_HAS_PlanarForceY
+#define SCHEMA_IfcStructuralLoadPlanarForce_PlanarForceY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadPlanarForce_HAS_PlanarForceZ
+#define SCHEMA_IfcStructuralLoadPlanarForce_PlanarForceZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadSingleDisplacement
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_DisplacementX
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_DisplacementX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_DisplacementY
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_DisplacementY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_DisplacementZ
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_DisplacementZ_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_RotationalDisplacementRX
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_RotationalDisplacementRX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_RotationalDisplacementRY
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_RotationalDisplacementRY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_HAS_RotationalDisplacementRZ
+#define SCHEMA_IfcStructuralLoadSingleDisplacement_RotationalDisplacementRZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadSingleDisplacementDistortion
+#define SCHEMA_IfcStructuralLoadSingleDisplacementDistortion_HAS_Distortion
+#define SCHEMA_IfcStructuralLoadSingleDisplacementDistortion_Distortion_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadSingleForce
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_ForceX
+#define SCHEMA_IfcStructuralLoadSingleForce_ForceX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_ForceY
+#define SCHEMA_IfcStructuralLoadSingleForce_ForceY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_ForceZ
+#define SCHEMA_IfcStructuralLoadSingleForce_ForceZ_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_MomentX
+#define SCHEMA_IfcStructuralLoadSingleForce_MomentX_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_MomentY
+#define SCHEMA_IfcStructuralLoadSingleForce_MomentY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadSingleForce_HAS_MomentZ
+#define SCHEMA_IfcStructuralLoadSingleForce_MomentZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadSingleForceWarping
+#define SCHEMA_IfcStructuralLoadSingleForceWarping_HAS_WarpingMoment
+#define SCHEMA_IfcStructuralLoadSingleForceWarping_WarpingMoment_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralLoadStatic
+#define SCHEMA_HAS_IfcStructuralLoadTemperature
+#define SCHEMA_IfcStructuralLoadTemperature_HAS_DeltaTConstant
+#define SCHEMA_IfcStructuralLoadTemperature_DeltaTConstant_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadTemperature_HAS_DeltaTY
+#define SCHEMA_IfcStructuralLoadTemperature_DeltaTY_IS_OPTIONAL
+#define SCHEMA_IfcStructuralLoadTemperature_HAS_DeltaTZ
+#define SCHEMA_IfcStructuralLoadTemperature_DeltaTZ_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralMember
+#define SCHEMA_IfcStructuralMember_HAS_ConnectedBy
+#define SCHEMA_HAS_IfcStructuralPlanarAction
+#define SCHEMA_HAS_IfcStructuralPointAction
+#define SCHEMA_HAS_IfcStructuralPointConnection
+#define SCHEMA_IfcStructuralPointConnection_HAS_ConditionCoordinateSystem
+#define SCHEMA_IfcStructuralPointConnection_ConditionCoordinateSystem_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralPointReaction
+#define SCHEMA_HAS_IfcStructuralReaction
+#define SCHEMA_HAS_IfcStructuralResultGroup
+#define SCHEMA_IfcStructuralResultGroup_HAS_TheoryType
+#define SCHEMA_IfcStructuralResultGroup_HAS_ResultForLoadGroup
+#define SCHEMA_IfcStructuralResultGroup_ResultForLoadGroup_IS_OPTIONAL
+#define SCHEMA_IfcStructuralResultGroup_HAS_IsLinear
+#define SCHEMA_IfcStructuralResultGroup_HAS_ResultGroupFor
+#define SCHEMA_HAS_IfcStructuralSurfaceAction
+#define SCHEMA_IfcStructuralSurfaceAction_HAS_ProjectedOrTrue
+#define SCHEMA_IfcStructuralSurfaceAction_ProjectedOrTrue_IS_OPTIONAL
+#define SCHEMA_IfcStructuralSurfaceAction_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStructuralSurfaceConnection
+#define SCHEMA_HAS_IfcStructuralSurfaceMember
+#define SCHEMA_IfcStructuralSurfaceMember_HAS_PredefinedType
+#define SCHEMA_IfcStructuralSurfaceMember_HAS_Thickness
+#define SCHEMA_IfcStructuralSurfaceMember_Thickness_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStructuralSurfaceMemberVarying
+#define SCHEMA_HAS_IfcStructuralSurfaceReaction
+#define SCHEMA_IfcStructuralSurfaceReaction_HAS_PredefinedType
+#define SCHEMA_HAS_IfcStyleModel
+#define SCHEMA_HAS_IfcStyledItem
+#define SCHEMA_IfcStyledItem_HAS_Item
+#define SCHEMA_IfcStyledItem_Item_IS_OPTIONAL
+#define SCHEMA_IfcStyledItem_HAS_Styles
+#define SCHEMA_IfcStyledItem_HAS_Name
+#define SCHEMA_IfcStyledItem_Name_IS_OPTIONAL
+#define SCHEMA_HAS_IfcStyledRepresentation
+#define SCHEMA_HAS_IfcSubContractResource
+#define SCHEMA_IfcSubContractResource_HAS_PredefinedType
+#define SCHEMA_IfcSubContractResource_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSubContractResourceType
+#define SCHEMA_IfcSubContractResourceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSubedge
+#define SCHEMA_IfcSubedge_HAS_ParentEdge
+#define SCHEMA_HAS_IfcSurface
+#define SCHEMA_HAS_IfcSurfaceCurve
+#define SCHEMA_IfcSurfaceCurve_HAS_Curve3D
+#define SCHEMA_IfcSurfaceCurve_HAS_AssociatedGeometry
+#define SCHEMA_IfcSurfaceCurve_HAS_MasterRepresentation
+#define SCHEMA_HAS_IfcSurfaceCurveSweptAreaSolid
+#define SCHEMA_IfcSurfaceCurveSweptAreaSolid_HAS_ReferenceSurface
+#define SCHEMA_HAS_IfcSurfaceFeature
+#define SCHEMA_IfcSurfaceFeature_HAS_PredefinedType
+#define SCHEMA_IfcSurfaceFeature_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceFeature_HAS_AdheresToElement
+#define SCHEMA_HAS_IfcSurfaceOfLinearExtrusion
+#define SCHEMA_IfcSurfaceOfLinearExtrusion_HAS_ExtrudedDirection
+#define SCHEMA_IfcSurfaceOfLinearExtrusion_HAS_Depth
+#define SCHEMA_HAS_IfcSurfaceOfRevolution
+#define SCHEMA_IfcSurfaceOfRevolution_HAS_AxisPosition
+#define SCHEMA_HAS_IfcSurfaceReinforcementArea
+#define SCHEMA_IfcSurfaceReinforcementArea_HAS_SurfaceReinforcement1
+#define SCHEMA_IfcSurfaceReinforcementArea_SurfaceReinforcement1_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceReinforcementArea_HAS_SurfaceReinforcement2
+#define SCHEMA_IfcSurfaceReinforcementArea_SurfaceReinforcement2_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceReinforcementArea_HAS_ShearReinforcement
+#define SCHEMA_IfcSurfaceReinforcementArea_ShearReinforcement_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSurfaceStyle
+#define SCHEMA_IfcSurfaceStyle_HAS_Side
+#define SCHEMA_IfcSurfaceStyle_HAS_Styles
+#define SCHEMA_HAS_IfcSurfaceStyleLighting
+#define SCHEMA_IfcSurfaceStyleLighting_HAS_DiffuseTransmissionColour
+#define SCHEMA_IfcSurfaceStyleLighting_HAS_DiffuseReflectionColour
+#define SCHEMA_IfcSurfaceStyleLighting_HAS_TransmissionColour
+#define SCHEMA_IfcSurfaceStyleLighting_HAS_ReflectanceColour
+#define SCHEMA_HAS_IfcSurfaceStyleRefraction
+#define SCHEMA_IfcSurfaceStyleRefraction_HAS_RefractionIndex
+#define SCHEMA_IfcSurfaceStyleRefraction_RefractionIndex_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRefraction_HAS_DispersionFactor
+#define SCHEMA_IfcSurfaceStyleRefraction_DispersionFactor_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSurfaceStyleRendering
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_DiffuseColour
+#define SCHEMA_IfcSurfaceStyleRendering_DiffuseColour_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_TransmissionColour
+#define SCHEMA_IfcSurfaceStyleRendering_TransmissionColour_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_DiffuseTransmissionColour
+#define SCHEMA_IfcSurfaceStyleRendering_DiffuseTransmissionColour_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_ReflectionColour
+#define SCHEMA_IfcSurfaceStyleRendering_ReflectionColour_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_SpecularColour
+#define SCHEMA_IfcSurfaceStyleRendering_SpecularColour_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_SpecularHighlight
+#define SCHEMA_IfcSurfaceStyleRendering_SpecularHighlight_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceStyleRendering_HAS_ReflectanceMethod
+#define SCHEMA_HAS_IfcSurfaceStyleShading
+#define SCHEMA_IfcSurfaceStyleShading_HAS_SurfaceColour
+#define SCHEMA_IfcSurfaceStyleShading_HAS_Transparency
+#define SCHEMA_IfcSurfaceStyleShading_Transparency_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSurfaceStyleWithTextures
+#define SCHEMA_IfcSurfaceStyleWithTextures_HAS_Textures
+#define SCHEMA_HAS_IfcSurfaceTexture
+#define SCHEMA_IfcSurfaceTexture_HAS_RepeatS
+#define SCHEMA_IfcSurfaceTexture_HAS_RepeatT
+#define SCHEMA_IfcSurfaceTexture_HAS_Mode
+#define SCHEMA_IfcSurfaceTexture_Mode_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceTexture_HAS_TextureTransform
+#define SCHEMA_IfcSurfaceTexture_TextureTransform_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceTexture_HAS_Parameter
+#define SCHEMA_IfcSurfaceTexture_Parameter_IS_OPTIONAL
+#define SCHEMA_IfcSurfaceTexture_HAS_IsMappedBy
+#define SCHEMA_IfcSurfaceTexture_HAS_UsedInStyles
+#define SCHEMA_HAS_IfcSweptAreaSolid
+#define SCHEMA_IfcSweptAreaSolid_HAS_SweptArea
+#define SCHEMA_IfcSweptAreaSolid_HAS_Position
+#define SCHEMA_IfcSweptAreaSolid_Position_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSweptDiskSolid
+#define SCHEMA_IfcSweptDiskSolid_HAS_Directrix
+#define SCHEMA_IfcSweptDiskSolid_HAS_Radius
+#define SCHEMA_IfcSweptDiskSolid_HAS_InnerRadius
+#define SCHEMA_IfcSweptDiskSolid_InnerRadius_IS_OPTIONAL
+#define SCHEMA_IfcSweptDiskSolid_HAS_StartParam
+#define SCHEMA_IfcSweptDiskSolid_StartParam_IS_OPTIONAL
+#define SCHEMA_IfcSweptDiskSolid_HAS_EndParam
+#define SCHEMA_IfcSweptDiskSolid_EndParam_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSweptDiskSolidPolygonal
+#define SCHEMA_IfcSweptDiskSolidPolygonal_HAS_FilletRadius
+#define SCHEMA_IfcSweptDiskSolidPolygonal_FilletRadius_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSweptSurface
+#define SCHEMA_IfcSweptSurface_HAS_SweptCurve
+#define SCHEMA_IfcSweptSurface_HAS_Position
+#define SCHEMA_IfcSweptSurface_Position_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSwitchingDevice
+#define SCHEMA_IfcSwitchingDevice_HAS_PredefinedType
+#define SCHEMA_IfcSwitchingDevice_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSwitchingDeviceType
+#define SCHEMA_IfcSwitchingDeviceType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcSystem
+#define SCHEMA_IfcSystem_HAS_ServicesBuildings
+#define SCHEMA_IfcSystem_HAS_ServicesFacilities
+#define SCHEMA_HAS_IfcSystemFurnitureElement
+#define SCHEMA_IfcSystemFurnitureElement_HAS_PredefinedType
+#define SCHEMA_IfcSystemFurnitureElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcSystemFurnitureElementType
+#define SCHEMA_IfcSystemFurnitureElementType_HAS_PredefinedType
+#define SCHEMA_IfcSystemFurnitureElementType_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTShapeProfileDef
+#define SCHEMA_IfcTShapeProfileDef_HAS_Depth
+#define SCHEMA_IfcTShapeProfileDef_HAS_FlangeWidth
+#define SCHEMA_IfcTShapeProfileDef_HAS_WebThickness
+#define SCHEMA_IfcTShapeProfileDef_HAS_FlangeThickness
+#define SCHEMA_IfcTShapeProfileDef_HAS_FilletRadius
+#define SCHEMA_IfcTShapeProfileDef_FilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcTShapeProfileDef_HAS_FlangeEdgeRadius
+#define SCHEMA_IfcTShapeProfileDef_FlangeEdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcTShapeProfileDef_HAS_WebEdgeRadius
+#define SCHEMA_IfcTShapeProfileDef_WebEdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcTShapeProfileDef_HAS_WebSlope
+#define SCHEMA_IfcTShapeProfileDef_WebSlope_IS_OPTIONAL
+#define SCHEMA_IfcTShapeProfileDef_HAS_FlangeSlope
+#define SCHEMA_IfcTShapeProfileDef_FlangeSlope_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTable
+#define SCHEMA_IfcTable_HAS_Name
+#define SCHEMA_IfcTable_Name_IS_OPTIONAL
+#define SCHEMA_IfcTable_HAS_Rows
+#define SCHEMA_IfcTable_Rows_IS_OPTIONAL
+#define SCHEMA_IfcTable_HAS_Columns
+#define SCHEMA_IfcTable_Columns_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTableColumn
+#define SCHEMA_IfcTableColumn_HAS_Identifier
+#define SCHEMA_IfcTableColumn_Identifier_IS_OPTIONAL
+#define SCHEMA_IfcTableColumn_HAS_Name
+#define SCHEMA_IfcTableColumn_Name_IS_OPTIONAL
+#define SCHEMA_IfcTableColumn_HAS_Description
+#define SCHEMA_IfcTableColumn_Description_IS_OPTIONAL
+#define SCHEMA_IfcTableColumn_HAS_Unit
+#define SCHEMA_IfcTableColumn_Unit_IS_OPTIONAL
+#define SCHEMA_IfcTableColumn_HAS_ReferencePath
+#define SCHEMA_IfcTableColumn_ReferencePath_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTableRow
+#define SCHEMA_IfcTableRow_HAS_RowCells
+#define SCHEMA_IfcTableRow_RowCells_IS_OPTIONAL
+#define SCHEMA_IfcTableRow_HAS_IsHeading
+#define SCHEMA_IfcTableRow_IsHeading_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTank
+#define SCHEMA_IfcTank_HAS_PredefinedType
+#define SCHEMA_IfcTank_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTankType
+#define SCHEMA_IfcTankType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTask
+#define SCHEMA_IfcTask_HAS_Status
+#define SCHEMA_IfcTask_Status_IS_OPTIONAL
+#define SCHEMA_IfcTask_HAS_WorkMethod
+#define SCHEMA_IfcTask_WorkMethod_IS_OPTIONAL
+#define SCHEMA_IfcTask_HAS_IsMilestone
+#define SCHEMA_IfcTask_HAS_Priority
+#define SCHEMA_IfcTask_Priority_IS_OPTIONAL
+#define SCHEMA_IfcTask_HAS_TaskTime
+#define SCHEMA_IfcTask_TaskTime_IS_OPTIONAL
+#define SCHEMA_IfcTask_HAS_PredefinedType
+#define SCHEMA_IfcTask_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTaskTime
+#define SCHEMA_IfcTaskTime_HAS_DurationType
+#define SCHEMA_IfcTaskTime_DurationType_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ScheduleDuration
+#define SCHEMA_IfcTaskTime_ScheduleDuration_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ScheduleStart
+#define SCHEMA_IfcTaskTime_ScheduleStart_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ScheduleFinish
+#define SCHEMA_IfcTaskTime_ScheduleFinish_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_EarlyStart
+#define SCHEMA_IfcTaskTime_EarlyStart_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_EarlyFinish
+#define SCHEMA_IfcTaskTime_EarlyFinish_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_LateStart
+#define SCHEMA_IfcTaskTime_LateStart_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_LateFinish
+#define SCHEMA_IfcTaskTime_LateFinish_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_FreeFloat
+#define SCHEMA_IfcTaskTime_FreeFloat_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_TotalFloat
+#define SCHEMA_IfcTaskTime_TotalFloat_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_IsCritical
+#define SCHEMA_IfcTaskTime_IsCritical_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_StatusTime
+#define SCHEMA_IfcTaskTime_StatusTime_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ActualDuration
+#define SCHEMA_IfcTaskTime_ActualDuration_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ActualStart
+#define SCHEMA_IfcTaskTime_ActualStart_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_ActualFinish
+#define SCHEMA_IfcTaskTime_ActualFinish_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_RemainingTime
+#define SCHEMA_IfcTaskTime_RemainingTime_IS_OPTIONAL
+#define SCHEMA_IfcTaskTime_HAS_Completion
+#define SCHEMA_IfcTaskTime_Completion_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTaskTimeRecurring
+#define SCHEMA_IfcTaskTimeRecurring_HAS_Recurrence
+#define SCHEMA_HAS_IfcTaskType
+#define SCHEMA_IfcTaskType_HAS_PredefinedType
+#define SCHEMA_IfcTaskType_HAS_WorkMethod
+#define SCHEMA_IfcTaskType_WorkMethod_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTelecomAddress
+#define SCHEMA_IfcTelecomAddress_HAS_TelephoneNumbers
+#define SCHEMA_IfcTelecomAddress_TelephoneNumbers_IS_OPTIONAL
+#define SCHEMA_IfcTelecomAddress_HAS_FacsimileNumbers
+#define SCHEMA_IfcTelecomAddress_FacsimileNumbers_IS_OPTIONAL
+#define SCHEMA_IfcTelecomAddress_HAS_PagerNumber
+#define SCHEMA_IfcTelecomAddress_PagerNumber_IS_OPTIONAL
+#define SCHEMA_IfcTelecomAddress_HAS_ElectronicMailAddresses
+#define SCHEMA_IfcTelecomAddress_ElectronicMailAddresses_IS_OPTIONAL
+#define SCHEMA_IfcTelecomAddress_HAS_WWWHomePageURL
+#define SCHEMA_IfcTelecomAddress_WWWHomePageURL_IS_OPTIONAL
+#define SCHEMA_IfcTelecomAddress_HAS_MessagingIDs
+#define SCHEMA_IfcTelecomAddress_MessagingIDs_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTendon
+#define SCHEMA_IfcTendon_HAS_PredefinedType
+#define SCHEMA_IfcTendon_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_NominalDiameter
+#define SCHEMA_IfcTendon_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_CrossSectionArea
+#define SCHEMA_IfcTendon_CrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_TensionForce
+#define SCHEMA_IfcTendon_TensionForce_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_PreStress
+#define SCHEMA_IfcTendon_PreStress_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_FrictionCoefficient
+#define SCHEMA_IfcTendon_FrictionCoefficient_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_AnchorageSlip
+#define SCHEMA_IfcTendon_AnchorageSlip_IS_OPTIONAL
+#define SCHEMA_IfcTendon_HAS_MinCurvatureRadius
+#define SCHEMA_IfcTendon_MinCurvatureRadius_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTendonAnchor
+#define SCHEMA_IfcTendonAnchor_HAS_PredefinedType
+#define SCHEMA_IfcTendonAnchor_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTendonAnchorType
+#define SCHEMA_IfcTendonAnchorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTendonConduit
+#define SCHEMA_IfcTendonConduit_HAS_PredefinedType
+#define SCHEMA_IfcTendonConduit_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTendonConduitType
+#define SCHEMA_IfcTendonConduitType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTendonType
+#define SCHEMA_IfcTendonType_HAS_PredefinedType
+#define SCHEMA_IfcTendonType_HAS_NominalDiameter
+#define SCHEMA_IfcTendonType_NominalDiameter_IS_OPTIONAL
+#define SCHEMA_IfcTendonType_HAS_CrossSectionArea
+#define SCHEMA_IfcTendonType_CrossSectionArea_IS_OPTIONAL
+#define SCHEMA_IfcTendonType_HAS_SheathDiameter
+#define SCHEMA_IfcTendonType_SheathDiameter_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTessellatedFaceSet
+#define SCHEMA_IfcTessellatedFaceSet_HAS_Coordinates
+#define SCHEMA_IfcTessellatedFaceSet_HAS_HasColours
+#define SCHEMA_IfcTessellatedFaceSet_HAS_HasTextures
+#define SCHEMA_HAS_IfcTessellatedItem
+#define SCHEMA_HAS_IfcTextLiteral
+#define SCHEMA_IfcTextLiteral_HAS_Literal
+#define SCHEMA_IfcTextLiteral_HAS_Placement
+#define SCHEMA_IfcTextLiteral_HAS_Path
+#define SCHEMA_HAS_IfcTextLiteralWithExtent
+#define SCHEMA_IfcTextLiteralWithExtent_HAS_Extent
+#define SCHEMA_IfcTextLiteralWithExtent_HAS_BoxAlignment
+#define SCHEMA_HAS_IfcTextStyle
+#define SCHEMA_IfcTextStyle_HAS_TextCharacterAppearance
+#define SCHEMA_IfcTextStyle_TextCharacterAppearance_IS_OPTIONAL
+#define SCHEMA_IfcTextStyle_HAS_TextStyle
+#define SCHEMA_IfcTextStyle_TextStyle_IS_OPTIONAL
+#define SCHEMA_IfcTextStyle_HAS_TextFontStyle
+#define SCHEMA_IfcTextStyle_HAS_ModelOrDraughting
+#define SCHEMA_IfcTextStyle_ModelOrDraughting_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTextStyleFontModel
+#define SCHEMA_IfcTextStyleFontModel_HAS_FontFamily
+#define SCHEMA_IfcTextStyleFontModel_HAS_FontStyle
+#define SCHEMA_IfcTextStyleFontModel_FontStyle_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleFontModel_HAS_FontVariant
+#define SCHEMA_IfcTextStyleFontModel_FontVariant_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleFontModel_HAS_FontWeight
+#define SCHEMA_IfcTextStyleFontModel_FontWeight_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleFontModel_HAS_FontSize
+#define SCHEMA_HAS_IfcTextStyleForDefinedFont
+#define SCHEMA_IfcTextStyleForDefinedFont_HAS_Colour
+#define SCHEMA_IfcTextStyleForDefinedFont_HAS_BackgroundColour
+#define SCHEMA_IfcTextStyleForDefinedFont_BackgroundColour_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTextStyleTextModel
+#define SCHEMA_IfcTextStyleTextModel_HAS_TextIndent
+#define SCHEMA_IfcTextStyleTextModel_TextIndent_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_TextAlign
+#define SCHEMA_IfcTextStyleTextModel_TextAlign_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_TextDecoration
+#define SCHEMA_IfcTextStyleTextModel_TextDecoration_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_LetterSpacing
+#define SCHEMA_IfcTextStyleTextModel_LetterSpacing_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_WordSpacing
+#define SCHEMA_IfcTextStyleTextModel_WordSpacing_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_TextTransform
+#define SCHEMA_IfcTextStyleTextModel_TextTransform_IS_OPTIONAL
+#define SCHEMA_IfcTextStyleTextModel_HAS_LineHeight
+#define SCHEMA_IfcTextStyleTextModel_LineHeight_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTextureCoordinate
+#define SCHEMA_IfcTextureCoordinate_HAS_Maps
+#define SCHEMA_HAS_IfcTextureCoordinateGenerator
+#define SCHEMA_IfcTextureCoordinateGenerator_HAS_Mode
+#define SCHEMA_IfcTextureCoordinateGenerator_HAS_Parameter
+#define SCHEMA_IfcTextureCoordinateGenerator_Parameter_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTextureCoordinateIndices
+#define SCHEMA_IfcTextureCoordinateIndices_HAS_TexCoordIndex
+#define SCHEMA_IfcTextureCoordinateIndices_HAS_TexCoordsOf
+#define SCHEMA_IfcTextureCoordinateIndices_HAS_ToTexMap
+#define SCHEMA_HAS_IfcTextureCoordinateIndicesWithVoids
+#define SCHEMA_IfcTextureCoordinateIndicesWithVoids_HAS_InnerTexCoordIndices
+#define SCHEMA_HAS_IfcTextureMap
+#define SCHEMA_IfcTextureMap_HAS_Vertices
+#define SCHEMA_IfcTextureMap_HAS_MappedTo
+#define SCHEMA_HAS_IfcTextureVertex
+#define SCHEMA_IfcTextureVertex_HAS_Coordinates
+#define SCHEMA_HAS_IfcTextureVertexList
+#define SCHEMA_IfcTextureVertexList_HAS_TexCoordsList
+#define SCHEMA_HAS_IfcThirdOrderPolynomialSpiral
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_HAS_CubicTerm
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_HAS_QuadraticTerm
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_QuadraticTerm_IS_OPTIONAL
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_HAS_LinearTerm
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_LinearTerm_IS_OPTIONAL
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_HAS_ConstantTerm
+#define SCHEMA_IfcThirdOrderPolynomialSpiral_ConstantTerm_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTimePeriod
+#define SCHEMA_IfcTimePeriod_HAS_StartTime
+#define SCHEMA_IfcTimePeriod_HAS_EndTime
+#define SCHEMA_HAS_IfcTimeSeries
+#define SCHEMA_IfcTimeSeries_HAS_Name
+#define SCHEMA_IfcTimeSeries_HAS_Description
+#define SCHEMA_IfcTimeSeries_Description_IS_OPTIONAL
+#define SCHEMA_IfcTimeSeries_HAS_StartTime
+#define SCHEMA_IfcTimeSeries_HAS_EndTime
+#define SCHEMA_IfcTimeSeries_HAS_TimeSeriesDataType
+#define SCHEMA_IfcTimeSeries_HAS_DataOrigin
+#define SCHEMA_IfcTimeSeries_HAS_UserDefinedDataOrigin
+#define SCHEMA_IfcTimeSeries_UserDefinedDataOrigin_IS_OPTIONAL
+#define SCHEMA_IfcTimeSeries_HAS_Unit
+#define SCHEMA_IfcTimeSeries_Unit_IS_OPTIONAL
+#define SCHEMA_IfcTimeSeries_HAS_HasExternalReference
+#define SCHEMA_HAS_IfcTimeSeriesValue
+#define SCHEMA_IfcTimeSeriesValue_HAS_ListValues
+#define SCHEMA_HAS_IfcTopologicalRepresentationItem
+#define SCHEMA_HAS_IfcTopologyRepresentation
+#define SCHEMA_HAS_IfcToroidalSurface
+#define SCHEMA_IfcToroidalSurface_HAS_MajorRadius
+#define SCHEMA_IfcToroidalSurface_HAS_MinorRadius
+#define SCHEMA_HAS_IfcTrackElement
+#define SCHEMA_IfcTrackElement_HAS_PredefinedType
+#define SCHEMA_IfcTrackElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTrackElementType
+#define SCHEMA_IfcTrackElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTransformer
+#define SCHEMA_IfcTransformer_HAS_PredefinedType
+#define SCHEMA_IfcTransformer_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTransformerType
+#define SCHEMA_IfcTransformerType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTransportElement
+#define SCHEMA_IfcTransportElement_HAS_PredefinedType
+#define SCHEMA_IfcTransportElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTransportElementType
+#define SCHEMA_IfcTransportElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTransportationDevice
+#define SCHEMA_HAS_IfcTransportationDeviceType
+#define SCHEMA_HAS_IfcTrapeziumProfileDef
+#define SCHEMA_IfcTrapeziumProfileDef_HAS_BottomXDim
+#define SCHEMA_IfcTrapeziumProfileDef_HAS_TopXDim
+#define SCHEMA_IfcTrapeziumProfileDef_HAS_YDim
+#define SCHEMA_IfcTrapeziumProfileDef_HAS_TopXOffset
+#define SCHEMA_HAS_IfcTriangulatedFaceSet
+#define SCHEMA_IfcTriangulatedFaceSet_HAS_Normals
+#define SCHEMA_IfcTriangulatedFaceSet_Normals_IS_OPTIONAL
+#define SCHEMA_IfcTriangulatedFaceSet_HAS_Closed
+#define SCHEMA_IfcTriangulatedFaceSet_Closed_IS_OPTIONAL
+#define SCHEMA_IfcTriangulatedFaceSet_HAS_CoordIndex
+#define SCHEMA_IfcTriangulatedFaceSet_HAS_PnIndex
+#define SCHEMA_IfcTriangulatedFaceSet_PnIndex_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTriangulatedIrregularNetwork
+#define SCHEMA_IfcTriangulatedIrregularNetwork_HAS_Flags
+#define SCHEMA_HAS_IfcTrimmedCurve
+#define SCHEMA_IfcTrimmedCurve_HAS_BasisCurve
+#define SCHEMA_IfcTrimmedCurve_HAS_Trim1
+#define SCHEMA_IfcTrimmedCurve_HAS_Trim2
+#define SCHEMA_IfcTrimmedCurve_HAS_SenseAgreement
+#define SCHEMA_IfcTrimmedCurve_HAS_MasterRepresentation
+#define SCHEMA_HAS_IfcTubeBundle
+#define SCHEMA_IfcTubeBundle_HAS_PredefinedType
+#define SCHEMA_IfcTubeBundle_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcTubeBundleType
+#define SCHEMA_IfcTubeBundleType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcTypeObject
+#define SCHEMA_IfcTypeObject_HAS_ApplicableOccurrence
+#define SCHEMA_IfcTypeObject_ApplicableOccurrence_IS_OPTIONAL
+#define SCHEMA_IfcTypeObject_HAS_HasPropertySets
+#define SCHEMA_IfcTypeObject_HasPropertySets_IS_OPTIONAL
+#define SCHEMA_IfcTypeObject_HAS_Types
+#define SCHEMA_HAS_IfcTypeProcess
+#define SCHEMA_IfcTypeProcess_HAS_Identification
+#define SCHEMA_IfcTypeProcess_Identification_IS_OPTIONAL
+#define SCHEMA_IfcTypeProcess_HAS_LongDescription
+#define SCHEMA_IfcTypeProcess_LongDescription_IS_OPTIONAL
+#define SCHEMA_IfcTypeProcess_HAS_ProcessType
+#define SCHEMA_IfcTypeProcess_ProcessType_IS_OPTIONAL
+#define SCHEMA_IfcTypeProcess_HAS_OperatesOn
+#define SCHEMA_HAS_IfcTypeProduct
+#define SCHEMA_IfcTypeProduct_HAS_RepresentationMaps
+#define SCHEMA_IfcTypeProduct_RepresentationMaps_IS_OPTIONAL
+#define SCHEMA_IfcTypeProduct_HAS_Tag
+#define SCHEMA_IfcTypeProduct_Tag_IS_OPTIONAL
+#define SCHEMA_IfcTypeProduct_HAS_ReferencedBy
+#define SCHEMA_HAS_IfcTypeResource
+#define SCHEMA_IfcTypeResource_HAS_Identification
+#define SCHEMA_IfcTypeResource_Identification_IS_OPTIONAL
+#define SCHEMA_IfcTypeResource_HAS_LongDescription
+#define SCHEMA_IfcTypeResource_LongDescription_IS_OPTIONAL
+#define SCHEMA_IfcTypeResource_HAS_ResourceType
+#define SCHEMA_IfcTypeResource_ResourceType_IS_OPTIONAL
+#define SCHEMA_IfcTypeResource_HAS_ResourceOf
+#define SCHEMA_HAS_IfcUShapeProfileDef
+#define SCHEMA_IfcUShapeProfileDef_HAS_Depth
+#define SCHEMA_IfcUShapeProfileDef_HAS_FlangeWidth
+#define SCHEMA_IfcUShapeProfileDef_HAS_WebThickness
+#define SCHEMA_IfcUShapeProfileDef_HAS_FlangeThickness
+#define SCHEMA_IfcUShapeProfileDef_HAS_FilletRadius
+#define SCHEMA_IfcUShapeProfileDef_FilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcUShapeProfileDef_HAS_EdgeRadius
+#define SCHEMA_IfcUShapeProfileDef_EdgeRadius_IS_OPTIONAL
+#define SCHEMA_IfcUShapeProfileDef_HAS_FlangeSlope
+#define SCHEMA_IfcUShapeProfileDef_FlangeSlope_IS_OPTIONAL
+#define SCHEMA_HAS_IfcUnitAssignment
+#define SCHEMA_IfcUnitAssignment_HAS_Units
+#define SCHEMA_HAS_IfcUnitaryControlElement
+#define SCHEMA_IfcUnitaryControlElement_HAS_PredefinedType
+#define SCHEMA_IfcUnitaryControlElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcUnitaryControlElementType
+#define SCHEMA_IfcUnitaryControlElementType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcUnitaryEquipment
+#define SCHEMA_IfcUnitaryEquipment_HAS_PredefinedType
+#define SCHEMA_IfcUnitaryEquipment_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcUnitaryEquipmentType
+#define SCHEMA_IfcUnitaryEquipmentType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcValve
+#define SCHEMA_IfcValve_HAS_PredefinedType
+#define SCHEMA_IfcValve_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcValveType
+#define SCHEMA_IfcValveType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcVector
+#define SCHEMA_IfcVector_HAS_Orientation
+#define SCHEMA_IfcVector_HAS_Magnitude
+#define SCHEMA_HAS_IfcVehicle
+#define SCHEMA_IfcVehicle_HAS_PredefinedType
+#define SCHEMA_IfcVehicle_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcVehicleType
+#define SCHEMA_IfcVehicleType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcVertex
+#define SCHEMA_HAS_IfcVertexLoop
+#define SCHEMA_IfcVertexLoop_HAS_LoopVertex
+#define SCHEMA_HAS_IfcVertexPoint
+#define SCHEMA_IfcVertexPoint_HAS_VertexGeometry
+#define SCHEMA_HAS_IfcVibrationDamper
+#define SCHEMA_IfcVibrationDamper_HAS_PredefinedType
+#define SCHEMA_IfcVibrationDamper_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcVibrationDamperType
+#define SCHEMA_IfcVibrationDamperType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcVibrationIsolator
+#define SCHEMA_IfcVibrationIsolator_HAS_PredefinedType
+#define SCHEMA_IfcVibrationIsolator_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcVibrationIsolatorType
+#define SCHEMA_IfcVibrationIsolatorType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcVirtualElement
+#define SCHEMA_IfcVirtualElement_HAS_PredefinedType
+#define SCHEMA_IfcVirtualElement_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcVirtualGridIntersection
+#define SCHEMA_IfcVirtualGridIntersection_HAS_IntersectingAxes
+#define SCHEMA_IfcVirtualGridIntersection_HAS_OffsetDistances
+#define SCHEMA_HAS_IfcVoidingFeature
+#define SCHEMA_IfcVoidingFeature_HAS_PredefinedType
+#define SCHEMA_IfcVoidingFeature_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWall
+#define SCHEMA_IfcWall_HAS_PredefinedType
+#define SCHEMA_IfcWall_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWallStandardCase
+#define SCHEMA_HAS_IfcWallType
+#define SCHEMA_IfcWallType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcWasteTerminal
+#define SCHEMA_IfcWasteTerminal_HAS_PredefinedType
+#define SCHEMA_IfcWasteTerminal_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWasteTerminalType
+#define SCHEMA_IfcWasteTerminalType_HAS_PredefinedType
+#define SCHEMA_HAS_IfcWellKnownText
+#define SCHEMA_IfcWellKnownText_HAS_WellKnownText
+#define SCHEMA_IfcWellKnownText_HAS_CoordinateReferenceSystem
+#define SCHEMA_HAS_IfcWindow
+#define SCHEMA_IfcWindow_HAS_OverallHeight
+#define SCHEMA_IfcWindow_OverallHeight_IS_OPTIONAL
+#define SCHEMA_IfcWindow_HAS_OverallWidth
+#define SCHEMA_IfcWindow_OverallWidth_IS_OPTIONAL
+#define SCHEMA_IfcWindow_HAS_PredefinedType
+#define SCHEMA_IfcWindow_PredefinedType_IS_OPTIONAL
+#define SCHEMA_IfcWindow_HAS_PartitioningType
+#define SCHEMA_IfcWindow_PartitioningType_IS_OPTIONAL
+#define SCHEMA_IfcWindow_HAS_UserDefinedPartitioningType
+#define SCHEMA_IfcWindow_UserDefinedPartitioningType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWindowLiningProperties
+#define SCHEMA_IfcWindowLiningProperties_HAS_LiningDepth
+#define SCHEMA_IfcWindowLiningProperties_LiningDepth_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_LiningThickness
+#define SCHEMA_IfcWindowLiningProperties_LiningThickness_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_TransomThickness
+#define SCHEMA_IfcWindowLiningProperties_TransomThickness_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_MullionThickness
+#define SCHEMA_IfcWindowLiningProperties_MullionThickness_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_FirstTransomOffset
+#define SCHEMA_IfcWindowLiningProperties_FirstTransomOffset_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_SecondTransomOffset
+#define SCHEMA_IfcWindowLiningProperties_SecondTransomOffset_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_FirstMullionOffset
+#define SCHEMA_IfcWindowLiningProperties_FirstMullionOffset_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_SecondMullionOffset
+#define SCHEMA_IfcWindowLiningProperties_SecondMullionOffset_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_ShapeAspectStyle
+#define SCHEMA_IfcWindowLiningProperties_ShapeAspectStyle_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_LiningOffset
+#define SCHEMA_IfcWindowLiningProperties_LiningOffset_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_LiningToPanelOffsetX
+#define SCHEMA_IfcWindowLiningProperties_LiningToPanelOffsetX_IS_OPTIONAL
+#define SCHEMA_IfcWindowLiningProperties_HAS_LiningToPanelOffsetY
+#define SCHEMA_IfcWindowLiningProperties_LiningToPanelOffsetY_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWindowPanelProperties
+#define SCHEMA_IfcWindowPanelProperties_HAS_OperationType
+#define SCHEMA_IfcWindowPanelProperties_HAS_PanelPosition
+#define SCHEMA_IfcWindowPanelProperties_HAS_FrameDepth
+#define SCHEMA_IfcWindowPanelProperties_FrameDepth_IS_OPTIONAL
+#define SCHEMA_IfcWindowPanelProperties_HAS_FrameThickness
+#define SCHEMA_IfcWindowPanelProperties_FrameThickness_IS_OPTIONAL
+#define SCHEMA_IfcWindowPanelProperties_HAS_ShapeAspectStyle
+#define SCHEMA_IfcWindowPanelProperties_ShapeAspectStyle_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWindowType
+#define SCHEMA_IfcWindowType_HAS_PredefinedType
+#define SCHEMA_IfcWindowType_HAS_PartitioningType
+#define SCHEMA_IfcWindowType_HAS_ParameterTakesPrecedence
+#define SCHEMA_IfcWindowType_ParameterTakesPrecedence_IS_OPTIONAL
+#define SCHEMA_IfcWindowType_HAS_UserDefinedPartitioningType
+#define SCHEMA_IfcWindowType_UserDefinedPartitioningType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWorkCalendar
+#define SCHEMA_IfcWorkCalendar_HAS_WorkingTimes
+#define SCHEMA_IfcWorkCalendar_WorkingTimes_IS_OPTIONAL
+#define SCHEMA_IfcWorkCalendar_HAS_ExceptionTimes
+#define SCHEMA_IfcWorkCalendar_ExceptionTimes_IS_OPTIONAL
+#define SCHEMA_IfcWorkCalendar_HAS_PredefinedType
+#define SCHEMA_IfcWorkCalendar_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWorkControl
+#define SCHEMA_IfcWorkControl_HAS_CreationDate
+#define SCHEMA_IfcWorkControl_HAS_Creators
+#define SCHEMA_IfcWorkControl_Creators_IS_OPTIONAL
+#define SCHEMA_IfcWorkControl_HAS_Purpose
+#define SCHEMA_IfcWorkControl_Purpose_IS_OPTIONAL
+#define SCHEMA_IfcWorkControl_HAS_Duration
+#define SCHEMA_IfcWorkControl_Duration_IS_OPTIONAL
+#define SCHEMA_IfcWorkControl_HAS_TotalFloat
+#define SCHEMA_IfcWorkControl_TotalFloat_IS_OPTIONAL
+#define SCHEMA_IfcWorkControl_HAS_StartTime
+#define SCHEMA_IfcWorkControl_HAS_FinishTime
+#define SCHEMA_IfcWorkControl_FinishTime_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWorkPlan
+#define SCHEMA_IfcWorkPlan_HAS_PredefinedType
+#define SCHEMA_IfcWorkPlan_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWorkSchedule
+#define SCHEMA_IfcWorkSchedule_HAS_PredefinedType
+#define SCHEMA_IfcWorkSchedule_PredefinedType_IS_OPTIONAL
+#define SCHEMA_HAS_IfcWorkTime
+#define SCHEMA_IfcWorkTime_HAS_RecurrencePattern
+#define SCHEMA_IfcWorkTime_RecurrencePattern_IS_OPTIONAL
+#define SCHEMA_IfcWorkTime_HAS_StartDate
+#define SCHEMA_IfcWorkTime_StartDate_IS_OPTIONAL
+#define SCHEMA_IfcWorkTime_HAS_FinishDate
+#define SCHEMA_IfcWorkTime_FinishDate_IS_OPTIONAL
+#define SCHEMA_HAS_IfcZShapeProfileDef
+#define SCHEMA_IfcZShapeProfileDef_HAS_Depth
+#define SCHEMA_IfcZShapeProfileDef_HAS_FlangeWidth
+#define SCHEMA_IfcZShapeProfileDef_HAS_WebThickness
+#define SCHEMA_IfcZShapeProfileDef_HAS_FlangeThickness
+#define SCHEMA_IfcZShapeProfileDef_HAS_FilletRadius
+#define SCHEMA_IfcZShapeProfileDef_FilletRadius_IS_OPTIONAL
+#define SCHEMA_IfcZShapeProfileDef_HAS_EdgeRadius
+#define SCHEMA_IfcZShapeProfileDef_EdgeRadius_IS_OPTIONAL
+#define SCHEMA_HAS_IfcZone
+#define SCHEMA_IfcZone_HAS_LongName
+#define SCHEMA_IfcZone_LongName_IS_OPTIONAL
+#define SCHEMA_HAS_IfcRepresentationContextSameWCS
+#define SCHEMA_HAS_IfcSingleProjectInstance
+#define SCHEMA_HAS_IfcAssociatedSurface
+#define SCHEMA_HAS_IfcBaseAxis
+#define SCHEMA_HAS_IfcBooleanChoose
+#define SCHEMA_HAS_IfcBuild2Axes
+#define SCHEMA_HAS_IfcBuildAxes
+#define SCHEMA_HAS_IfcConsecutiveSegments
+#define SCHEMA_HAS_IfcConstraintsParamBSpline
+#define SCHEMA_HAS_IfcConvertDirectionInto2D
+#define SCHEMA_HAS_IfcCorrectDimensions
+#define SCHEMA_HAS_IfcCorrectFillAreaStyle
+#define SCHEMA_HAS_IfcCorrectLocalPlacement
+#define SCHEMA_HAS_IfcCorrectUnitAssignment
+#define SCHEMA_HAS_IfcCrossProduct
+#define SCHEMA_HAS_IfcCurveDim
+#define SCHEMA_HAS_IfcCurveWeightsPositive
+#define SCHEMA_HAS_IfcDeriveDimensionalExponents
+#define SCHEMA_HAS_IfcDimensionsForSIUnit
+#define SCHEMA_HAS_IfcDotProduct
+#define SCHEMA_HAS_IfcFirstProjAxis
+#define SCHEMA_HAS_IfcGetBasisSurface
+#define SCHEMA_HAS_IfcListToArray
+#define SCHEMA_HAS_IfcLoopHeadToTail
+#define SCHEMA_HAS_IfcMakeArrayOfArray
+#define SCHEMA_HAS_IfcMlsTotalThickness
+#define SCHEMA_HAS_IfcNormalise
+#define SCHEMA_HAS_IfcOrthogonalComplement
+#define SCHEMA_HAS_IfcPathHeadToTail
+#define SCHEMA_HAS_IfcPointDim
+#define SCHEMA_HAS_IfcPointListDim
+#define SCHEMA_HAS_IfcSameAxis2Placement
+#define SCHEMA_HAS_IfcSameCartesianPoint
+#define SCHEMA_HAS_IfcSameDirection
+#define SCHEMA_HAS_IfcSameValidPrecision
+#define SCHEMA_HAS_IfcSameValue
+#define SCHEMA_HAS_IfcScalarTimesVector
+#define SCHEMA_HAS_IfcSecondProjAxis
+#define SCHEMA_HAS_IfcSegmentDim
+#define SCHEMA_HAS_IfcShapeRepresentationTypes
+#define SCHEMA_HAS_IfcSurfaceWeightsPositive
+#define SCHEMA_HAS_IfcTaperedSweptAreaProfiles
+#define SCHEMA_HAS_IfcTopologyRepresentationTypes
+#define SCHEMA_HAS_IfcUniqueDefinitionNames
+#define SCHEMA_HAS_IfcUniquePropertyName
+#define SCHEMA_HAS_IfcUniquePropertySetNames
+#define SCHEMA_HAS_IfcUniquePropertyTemplateNames
+#define SCHEMA_HAS_IfcUniqueQuantityNames
+#define SCHEMA_HAS_IfcVectorDifference
+#define SCHEMA_HAS_IfcVectorSum
diff --git a/src/ifcparse/Ifc4x3_add2-schema.cpp b/src/ifcparse/Ifc4x3_add2-schema.cpp
new file mode 100644
index 0000000000..ab711ee6ea
--- /dev/null
+++ b/src/ifcparse/Ifc4x3_add2-schema.cpp
@@ -0,0 +1,17085 @@
+/********************************************************************************
+ * *
+ * This file is part of IfcOpenShell. *
+ * *
+ * IfcOpenShell is free software: you can redistribute it and/or modify *
+ * it under the terms of the Lesser GNU General Public License as published by *
+ * the Free Software Foundation, either version 3.0 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * IfcOpenShell is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * Lesser GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the Lesser GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ ********************************************************************************/
+
+/********************************************************************************
+ * *
+ * This file has been generated from IFC4X3_ADD2.exp. Do not make modifications *
+ * but instead modify the python script that has been used to generate this. *
+ * *
+ ********************************************************************************/
+
+#include "../ifcparse/IfcSchema.h"
+#include "../ifcparse/Ifc4x3_add2.h"
+
+using namespace IfcParse;
+
+entity* IFC4X3_ADD2_IfcActionRequest_type = 0;
+entity* IFC4X3_ADD2_IfcActor_type = 0;
+entity* IFC4X3_ADD2_IfcActorRole_type = 0;
+entity* IFC4X3_ADD2_IfcActuator_type = 0;
+entity* IFC4X3_ADD2_IfcActuatorType_type = 0;
+entity* IFC4X3_ADD2_IfcAddress_type = 0;
+entity* IFC4X3_ADD2_IfcAdvancedBrep_type = 0;
+entity* IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type = 0;
+entity* IFC4X3_ADD2_IfcAdvancedFace_type = 0;
+entity* IFC4X3_ADD2_IfcAirTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcAirTerminalBox_type = 0;
+entity* IFC4X3_ADD2_IfcAirTerminalBoxType_type = 0;
+entity* IFC4X3_ADD2_IfcAirTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcAirToAirHeatRecovery_type = 0;
+entity* IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type = 0;
+entity* IFC4X3_ADD2_IfcAlarm_type = 0;
+entity* IFC4X3_ADD2_IfcAlarmType_type = 0;
+entity* IFC4X3_ADD2_IfcAlignment_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentCant_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentCantSegment_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentHorizontal_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentParameterSegment_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentSegment_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentVertical_type = 0;
+entity* IFC4X3_ADD2_IfcAlignmentVerticalSegment_type = 0;
+entity* IFC4X3_ADD2_IfcAnnotation_type = 0;
+entity* IFC4X3_ADD2_IfcAnnotationFillArea_type = 0;
+entity* IFC4X3_ADD2_IfcApplication_type = 0;
+entity* IFC4X3_ADD2_IfcAppliedValue_type = 0;
+entity* IFC4X3_ADD2_IfcApproval_type = 0;
+entity* IFC4X3_ADD2_IfcApprovalRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type = 0;
+entity* IFC4X3_ADD2_IfcAsset_type = 0;
+entity* IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcAudioVisualAppliance_type = 0;
+entity* IFC4X3_ADD2_IfcAudioVisualApplianceType_type = 0;
+entity* IFC4X3_ADD2_IfcAxis1Placement_type = 0;
+entity* IFC4X3_ADD2_IfcAxis2Placement2D_type = 0;
+entity* IFC4X3_ADD2_IfcAxis2Placement3D_type = 0;
+entity* IFC4X3_ADD2_IfcAxis2PlacementLinear_type = 0;
+entity* IFC4X3_ADD2_IfcBSplineCurve_type = 0;
+entity* IFC4X3_ADD2_IfcBSplineCurveWithKnots_type = 0;
+entity* IFC4X3_ADD2_IfcBSplineSurface_type = 0;
+entity* IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type = 0;
+entity* IFC4X3_ADD2_IfcBeam_type = 0;
+entity* IFC4X3_ADD2_IfcBeamType_type = 0;
+entity* IFC4X3_ADD2_IfcBearing_type = 0;
+entity* IFC4X3_ADD2_IfcBearingType_type = 0;
+entity* IFC4X3_ADD2_IfcBlobTexture_type = 0;
+entity* IFC4X3_ADD2_IfcBlock_type = 0;
+entity* IFC4X3_ADD2_IfcBoiler_type = 0;
+entity* IFC4X3_ADD2_IfcBoilerType_type = 0;
+entity* IFC4X3_ADD2_IfcBooleanClippingResult_type = 0;
+entity* IFC4X3_ADD2_IfcBooleanResult_type = 0;
+entity* IFC4X3_ADD2_IfcBorehole_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryCondition_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryCurve_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryEdgeCondition_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryFaceCondition_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryNodeCondition_type = 0;
+entity* IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type = 0;
+entity* IFC4X3_ADD2_IfcBoundedCurve_type = 0;
+entity* IFC4X3_ADD2_IfcBoundedSurface_type = 0;
+entity* IFC4X3_ADD2_IfcBoundingBox_type = 0;
+entity* IFC4X3_ADD2_IfcBoxedHalfSpace_type = 0;
+entity* IFC4X3_ADD2_IfcBridge_type = 0;
+entity* IFC4X3_ADD2_IfcBridgePart_type = 0;
+entity* IFC4X3_ADD2_IfcBuilding_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingElementPart_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingElementPartType_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingElementProxy_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingElementProxyType_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingStorey_type = 0;
+entity* IFC4X3_ADD2_IfcBuildingSystem_type = 0;
+entity* IFC4X3_ADD2_IfcBuiltElement_type = 0;
+entity* IFC4X3_ADD2_IfcBuiltElementType_type = 0;
+entity* IFC4X3_ADD2_IfcBuiltSystem_type = 0;
+entity* IFC4X3_ADD2_IfcBurner_type = 0;
+entity* IFC4X3_ADD2_IfcBurnerType_type = 0;
+entity* IFC4X3_ADD2_IfcCShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcCableCarrierFitting_type = 0;
+entity* IFC4X3_ADD2_IfcCableCarrierFittingType_type = 0;
+entity* IFC4X3_ADD2_IfcCableCarrierSegment_type = 0;
+entity* IFC4X3_ADD2_IfcCableCarrierSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcCableFitting_type = 0;
+entity* IFC4X3_ADD2_IfcCableFittingType_type = 0;
+entity* IFC4X3_ADD2_IfcCableSegment_type = 0;
+entity* IFC4X3_ADD2_IfcCableSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcCaissonFoundation_type = 0;
+entity* IFC4X3_ADD2_IfcCaissonFoundationType_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianPoint_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianPointList_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianPointList2D_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianPointList3D_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianTransformationOperator_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type = 0;
+entity* IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type = 0;
+entity* IFC4X3_ADD2_IfcCenterLineProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcChiller_type = 0;
+entity* IFC4X3_ADD2_IfcChillerType_type = 0;
+entity* IFC4X3_ADD2_IfcChimney_type = 0;
+entity* IFC4X3_ADD2_IfcChimneyType_type = 0;
+entity* IFC4X3_ADD2_IfcCircle_type = 0;
+entity* IFC4X3_ADD2_IfcCircleHollowProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcCircleProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcCivilElement_type = 0;
+entity* IFC4X3_ADD2_IfcCivilElementType_type = 0;
+entity* IFC4X3_ADD2_IfcClassification_type = 0;
+entity* IFC4X3_ADD2_IfcClassificationReference_type = 0;
+entity* IFC4X3_ADD2_IfcClosedShell_type = 0;
+entity* IFC4X3_ADD2_IfcClothoid_type = 0;
+entity* IFC4X3_ADD2_IfcCoil_type = 0;
+entity* IFC4X3_ADD2_IfcCoilType_type = 0;
+entity* IFC4X3_ADD2_IfcColourRgb_type = 0;
+entity* IFC4X3_ADD2_IfcColourRgbList_type = 0;
+entity* IFC4X3_ADD2_IfcColourSpecification_type = 0;
+entity* IFC4X3_ADD2_IfcColumn_type = 0;
+entity* IFC4X3_ADD2_IfcColumnType_type = 0;
+entity* IFC4X3_ADD2_IfcCommunicationsAppliance_type = 0;
+entity* IFC4X3_ADD2_IfcCommunicationsApplianceType_type = 0;
+entity* IFC4X3_ADD2_IfcComplexProperty_type = 0;
+entity* IFC4X3_ADD2_IfcComplexPropertyTemplate_type = 0;
+entity* IFC4X3_ADD2_IfcCompositeCurve_type = 0;
+entity* IFC4X3_ADD2_IfcCompositeCurveOnSurface_type = 0;
+entity* IFC4X3_ADD2_IfcCompositeCurveSegment_type = 0;
+entity* IFC4X3_ADD2_IfcCompositeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcCompressor_type = 0;
+entity* IFC4X3_ADD2_IfcCompressorType_type = 0;
+entity* IFC4X3_ADD2_IfcCondenser_type = 0;
+entity* IFC4X3_ADD2_IfcCondenserType_type = 0;
+entity* IFC4X3_ADD2_IfcConic_type = 0;
+entity* IFC4X3_ADD2_IfcConnectedFaceSet_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionCurveGeometry_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionGeometry_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionPointEccentricity_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionPointGeometry_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type = 0;
+entity* IFC4X3_ADD2_IfcConnectionVolumeGeometry_type = 0;
+entity* IFC4X3_ADD2_IfcConstraint_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionEquipmentResource_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionMaterialResource_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionMaterialResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionProductResource_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionProductResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionResource_type = 0;
+entity* IFC4X3_ADD2_IfcConstructionResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcContext_type = 0;
+entity* IFC4X3_ADD2_IfcContextDependentUnit_type = 0;
+entity* IFC4X3_ADD2_IfcControl_type = 0;
+entity* IFC4X3_ADD2_IfcController_type = 0;
+entity* IFC4X3_ADD2_IfcControllerType_type = 0;
+entity* IFC4X3_ADD2_IfcConversionBasedUnit_type = 0;
+entity* IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type = 0;
+entity* IFC4X3_ADD2_IfcConveyorSegment_type = 0;
+entity* IFC4X3_ADD2_IfcConveyorSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcCooledBeam_type = 0;
+entity* IFC4X3_ADD2_IfcCooledBeamType_type = 0;
+entity* IFC4X3_ADD2_IfcCoolingTower_type = 0;
+entity* IFC4X3_ADD2_IfcCoolingTowerType_type = 0;
+entity* IFC4X3_ADD2_IfcCoordinateOperation_type = 0;
+entity* IFC4X3_ADD2_IfcCoordinateReferenceSystem_type = 0;
+entity* IFC4X3_ADD2_IfcCosineSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcCostItem_type = 0;
+entity* IFC4X3_ADD2_IfcCostSchedule_type = 0;
+entity* IFC4X3_ADD2_IfcCostValue_type = 0;
+entity* IFC4X3_ADD2_IfcCourse_type = 0;
+entity* IFC4X3_ADD2_IfcCourseType_type = 0;
+entity* IFC4X3_ADD2_IfcCovering_type = 0;
+entity* IFC4X3_ADD2_IfcCoveringType_type = 0;
+entity* IFC4X3_ADD2_IfcCrewResource_type = 0;
+entity* IFC4X3_ADD2_IfcCrewResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcCsgPrimitive3D_type = 0;
+entity* IFC4X3_ADD2_IfcCsgSolid_type = 0;
+entity* IFC4X3_ADD2_IfcCurrencyRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcCurtainWall_type = 0;
+entity* IFC4X3_ADD2_IfcCurtainWallType_type = 0;
+entity* IFC4X3_ADD2_IfcCurve_type = 0;
+entity* IFC4X3_ADD2_IfcCurveBoundedPlane_type = 0;
+entity* IFC4X3_ADD2_IfcCurveBoundedSurface_type = 0;
+entity* IFC4X3_ADD2_IfcCurveSegment_type = 0;
+entity* IFC4X3_ADD2_IfcCurveStyle_type = 0;
+entity* IFC4X3_ADD2_IfcCurveStyleFont_type = 0;
+entity* IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type = 0;
+entity* IFC4X3_ADD2_IfcCurveStyleFontPattern_type = 0;
+entity* IFC4X3_ADD2_IfcCylindricalSurface_type = 0;
+entity* IFC4X3_ADD2_IfcDamper_type = 0;
+entity* IFC4X3_ADD2_IfcDamperType_type = 0;
+entity* IFC4X3_ADD2_IfcDeepFoundation_type = 0;
+entity* IFC4X3_ADD2_IfcDeepFoundationType_type = 0;
+entity* IFC4X3_ADD2_IfcDerivedProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcDerivedUnit_type = 0;
+entity* IFC4X3_ADD2_IfcDerivedUnitElement_type = 0;
+entity* IFC4X3_ADD2_IfcDimensionalExponents_type = 0;
+entity* IFC4X3_ADD2_IfcDirection_type = 0;
+entity* IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcDiscreteAccessory_type = 0;
+entity* IFC4X3_ADD2_IfcDiscreteAccessoryType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionBoard_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionBoardType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionChamberElement_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionChamberElementType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionCircuit_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionControlElement_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionControlElementType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionElement_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionElementType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionFlowElement_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionFlowElementType_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionPort_type = 0;
+entity* IFC4X3_ADD2_IfcDistributionSystem_type = 0;
+entity* IFC4X3_ADD2_IfcDocumentInformation_type = 0;
+entity* IFC4X3_ADD2_IfcDocumentInformationRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcDocumentReference_type = 0;
+entity* IFC4X3_ADD2_IfcDoor_type = 0;
+entity* IFC4X3_ADD2_IfcDoorLiningProperties_type = 0;
+entity* IFC4X3_ADD2_IfcDoorPanelProperties_type = 0;
+entity* IFC4X3_ADD2_IfcDoorType_type = 0;
+entity* IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type = 0;
+entity* IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type = 0;
+entity* IFC4X3_ADD2_IfcDuctFitting_type = 0;
+entity* IFC4X3_ADD2_IfcDuctFittingType_type = 0;
+entity* IFC4X3_ADD2_IfcDuctSegment_type = 0;
+entity* IFC4X3_ADD2_IfcDuctSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcDuctSilencer_type = 0;
+entity* IFC4X3_ADD2_IfcDuctSilencerType_type = 0;
+entity* IFC4X3_ADD2_IfcEarthworksCut_type = 0;
+entity* IFC4X3_ADD2_IfcEarthworksElement_type = 0;
+entity* IFC4X3_ADD2_IfcEarthworksFill_type = 0;
+entity* IFC4X3_ADD2_IfcEdge_type = 0;
+entity* IFC4X3_ADD2_IfcEdgeCurve_type = 0;
+entity* IFC4X3_ADD2_IfcEdgeLoop_type = 0;
+entity* IFC4X3_ADD2_IfcElectricAppliance_type = 0;
+entity* IFC4X3_ADD2_IfcElectricApplianceType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricDistributionBoard_type = 0;
+entity* IFC4X3_ADD2_IfcElectricDistributionBoardType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricFlowStorageDevice_type = 0;
+entity* IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type = 0;
+entity* IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricGenerator_type = 0;
+entity* IFC4X3_ADD2_IfcElectricGeneratorType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricMotor_type = 0;
+entity* IFC4X3_ADD2_IfcElectricMotorType_type = 0;
+entity* IFC4X3_ADD2_IfcElectricTimeControl_type = 0;
+entity* IFC4X3_ADD2_IfcElectricTimeControlType_type = 0;
+entity* IFC4X3_ADD2_IfcElement_type = 0;
+entity* IFC4X3_ADD2_IfcElementAssembly_type = 0;
+entity* IFC4X3_ADD2_IfcElementAssemblyType_type = 0;
+entity* IFC4X3_ADD2_IfcElementComponent_type = 0;
+entity* IFC4X3_ADD2_IfcElementComponentType_type = 0;
+entity* IFC4X3_ADD2_IfcElementQuantity_type = 0;
+entity* IFC4X3_ADD2_IfcElementType_type = 0;
+entity* IFC4X3_ADD2_IfcElementarySurface_type = 0;
+entity* IFC4X3_ADD2_IfcEllipse_type = 0;
+entity* IFC4X3_ADD2_IfcEllipseProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcEnergyConversionDevice_type = 0;
+entity* IFC4X3_ADD2_IfcEnergyConversionDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcEngine_type = 0;
+entity* IFC4X3_ADD2_IfcEngineType_type = 0;
+entity* IFC4X3_ADD2_IfcEvaporativeCooler_type = 0;
+entity* IFC4X3_ADD2_IfcEvaporativeCoolerType_type = 0;
+entity* IFC4X3_ADD2_IfcEvaporator_type = 0;
+entity* IFC4X3_ADD2_IfcEvaporatorType_type = 0;
+entity* IFC4X3_ADD2_IfcEvent_type = 0;
+entity* IFC4X3_ADD2_IfcEventTime_type = 0;
+entity* IFC4X3_ADD2_IfcEventType_type = 0;
+entity* IFC4X3_ADD2_IfcExtendedProperties_type = 0;
+entity* IFC4X3_ADD2_IfcExternalInformation_type = 0;
+entity* IFC4X3_ADD2_IfcExternalReference_type = 0;
+entity* IFC4X3_ADD2_IfcExternalReferenceRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcExternalSpatialElement_type = 0;
+entity* IFC4X3_ADD2_IfcExternalSpatialStructureElement_type = 0;
+entity* IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type = 0;
+entity* IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type = 0;
+entity* IFC4X3_ADD2_IfcExternallyDefinedTextFont_type = 0;
+entity* IFC4X3_ADD2_IfcExtrudedAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type = 0;
+entity* IFC4X3_ADD2_IfcFace_type = 0;
+entity* IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type = 0;
+entity* IFC4X3_ADD2_IfcFaceBound_type = 0;
+entity* IFC4X3_ADD2_IfcFaceOuterBound_type = 0;
+entity* IFC4X3_ADD2_IfcFaceSurface_type = 0;
+entity* IFC4X3_ADD2_IfcFacetedBrep_type = 0;
+entity* IFC4X3_ADD2_IfcFacetedBrepWithVoids_type = 0;
+entity* IFC4X3_ADD2_IfcFacility_type = 0;
+entity* IFC4X3_ADD2_IfcFacilityPart_type = 0;
+entity* IFC4X3_ADD2_IfcFacilityPartCommon_type = 0;
+entity* IFC4X3_ADD2_IfcFailureConnectionCondition_type = 0;
+entity* IFC4X3_ADD2_IfcFan_type = 0;
+entity* IFC4X3_ADD2_IfcFanType_type = 0;
+entity* IFC4X3_ADD2_IfcFastener_type = 0;
+entity* IFC4X3_ADD2_IfcFastenerType_type = 0;
+entity* IFC4X3_ADD2_IfcFeatureElement_type = 0;
+entity* IFC4X3_ADD2_IfcFeatureElementAddition_type = 0;
+entity* IFC4X3_ADD2_IfcFeatureElementSubtraction_type = 0;
+entity* IFC4X3_ADD2_IfcFillAreaStyle_type = 0;
+entity* IFC4X3_ADD2_IfcFillAreaStyleHatching_type = 0;
+entity* IFC4X3_ADD2_IfcFillAreaStyleTiles_type = 0;
+entity* IFC4X3_ADD2_IfcFilter_type = 0;
+entity* IFC4X3_ADD2_IfcFilterType_type = 0;
+entity* IFC4X3_ADD2_IfcFireSuppressionTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcFireSuppressionTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcFlowController_type = 0;
+entity* IFC4X3_ADD2_IfcFlowControllerType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowFitting_type = 0;
+entity* IFC4X3_ADD2_IfcFlowFittingType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowInstrument_type = 0;
+entity* IFC4X3_ADD2_IfcFlowInstrumentType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowMeter_type = 0;
+entity* IFC4X3_ADD2_IfcFlowMeterType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowMovingDevice_type = 0;
+entity* IFC4X3_ADD2_IfcFlowMovingDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowSegment_type = 0;
+entity* IFC4X3_ADD2_IfcFlowSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowStorageDevice_type = 0;
+entity* IFC4X3_ADD2_IfcFlowStorageDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcFlowTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcFlowTreatmentDevice_type = 0;
+entity* IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcFooting_type = 0;
+entity* IFC4X3_ADD2_IfcFootingType_type = 0;
+entity* IFC4X3_ADD2_IfcFurnishingElement_type = 0;
+entity* IFC4X3_ADD2_IfcFurnishingElementType_type = 0;
+entity* IFC4X3_ADD2_IfcFurniture_type = 0;
+entity* IFC4X3_ADD2_IfcFurnitureType_type = 0;
+entity* IFC4X3_ADD2_IfcGeographicCRS_type = 0;
+entity* IFC4X3_ADD2_IfcGeographicElement_type = 0;
+entity* IFC4X3_ADD2_IfcGeographicElementType_type = 0;
+entity* IFC4X3_ADD2_IfcGeometricCurveSet_type = 0;
+entity* IFC4X3_ADD2_IfcGeometricRepresentationContext_type = 0;
+entity* IFC4X3_ADD2_IfcGeometricRepresentationItem_type = 0;
+entity* IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type = 0;
+entity* IFC4X3_ADD2_IfcGeometricSet_type = 0;
+entity* IFC4X3_ADD2_IfcGeomodel_type = 0;
+entity* IFC4X3_ADD2_IfcGeoslice_type = 0;
+entity* IFC4X3_ADD2_IfcGeotechnicalAssembly_type = 0;
+entity* IFC4X3_ADD2_IfcGeotechnicalElement_type = 0;
+entity* IFC4X3_ADD2_IfcGeotechnicalStratum_type = 0;
+entity* IFC4X3_ADD2_IfcGradientCurve_type = 0;
+entity* IFC4X3_ADD2_IfcGrid_type = 0;
+entity* IFC4X3_ADD2_IfcGridAxis_type = 0;
+entity* IFC4X3_ADD2_IfcGridPlacement_type = 0;
+entity* IFC4X3_ADD2_IfcGroup_type = 0;
+entity* IFC4X3_ADD2_IfcHalfSpaceSolid_type = 0;
+entity* IFC4X3_ADD2_IfcHeatExchanger_type = 0;
+entity* IFC4X3_ADD2_IfcHeatExchangerType_type = 0;
+entity* IFC4X3_ADD2_IfcHumidifier_type = 0;
+entity* IFC4X3_ADD2_IfcHumidifierType_type = 0;
+entity* IFC4X3_ADD2_IfcIShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcImageTexture_type = 0;
+entity* IFC4X3_ADD2_IfcImpactProtectionDevice_type = 0;
+entity* IFC4X3_ADD2_IfcImpactProtectionDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedColourMap_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedPolyCurve_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedPolygonalFace_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedTextureMap_type = 0;
+entity* IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type = 0;
+entity* IFC4X3_ADD2_IfcInterceptor_type = 0;
+entity* IFC4X3_ADD2_IfcInterceptorType_type = 0;
+entity* IFC4X3_ADD2_IfcIntersectionCurve_type = 0;
+entity* IFC4X3_ADD2_IfcInventory_type = 0;
+entity* IFC4X3_ADD2_IfcIrregularTimeSeries_type = 0;
+entity* IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type = 0;
+entity* IFC4X3_ADD2_IfcJunctionBox_type = 0;
+entity* IFC4X3_ADD2_IfcJunctionBoxType_type = 0;
+entity* IFC4X3_ADD2_IfcKerb_type = 0;
+entity* IFC4X3_ADD2_IfcKerbType_type = 0;
+entity* IFC4X3_ADD2_IfcLShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcLaborResource_type = 0;
+entity* IFC4X3_ADD2_IfcLaborResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcLagTime_type = 0;
+entity* IFC4X3_ADD2_IfcLamp_type = 0;
+entity* IFC4X3_ADD2_IfcLampType_type = 0;
+entity* IFC4X3_ADD2_IfcLibraryInformation_type = 0;
+entity* IFC4X3_ADD2_IfcLibraryReference_type = 0;
+entity* IFC4X3_ADD2_IfcLightDistributionData_type = 0;
+entity* IFC4X3_ADD2_IfcLightFixture_type = 0;
+entity* IFC4X3_ADD2_IfcLightFixtureType_type = 0;
+entity* IFC4X3_ADD2_IfcLightIntensityDistribution_type = 0;
+entity* IFC4X3_ADD2_IfcLightSource_type = 0;
+entity* IFC4X3_ADD2_IfcLightSourceAmbient_type = 0;
+entity* IFC4X3_ADD2_IfcLightSourceDirectional_type = 0;
+entity* IFC4X3_ADD2_IfcLightSourceGoniometric_type = 0;
+entity* IFC4X3_ADD2_IfcLightSourcePositional_type = 0;
+entity* IFC4X3_ADD2_IfcLightSourceSpot_type = 0;
+entity* IFC4X3_ADD2_IfcLine_type = 0;
+entity* IFC4X3_ADD2_IfcLinearElement_type = 0;
+entity* IFC4X3_ADD2_IfcLinearPlacement_type = 0;
+entity* IFC4X3_ADD2_IfcLinearPositioningElement_type = 0;
+entity* IFC4X3_ADD2_IfcLiquidTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcLiquidTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcLocalPlacement_type = 0;
+entity* IFC4X3_ADD2_IfcLoop_type = 0;
+entity* IFC4X3_ADD2_IfcManifoldSolidBrep_type = 0;
+entity* IFC4X3_ADD2_IfcMapConversion_type = 0;
+entity* IFC4X3_ADD2_IfcMapConversionScaled_type = 0;
+entity* IFC4X3_ADD2_IfcMappedItem_type = 0;
+entity* IFC4X3_ADD2_IfcMarineFacility_type = 0;
+entity* IFC4X3_ADD2_IfcMarinePart_type = 0;
+entity* IFC4X3_ADD2_IfcMaterial_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialClassificationRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialConstituent_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialConstituentSet_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialLayer_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialLayerSet_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialLayerSetUsage_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialList_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProfile_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProfileSet_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProfileSetUsage_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialProperties_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcMaterialUsageDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcMeasureWithUnit_type = 0;
+entity* IFC4X3_ADD2_IfcMechanicalFastener_type = 0;
+entity* IFC4X3_ADD2_IfcMechanicalFastenerType_type = 0;
+entity* IFC4X3_ADD2_IfcMedicalDevice_type = 0;
+entity* IFC4X3_ADD2_IfcMedicalDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcMember_type = 0;
+entity* IFC4X3_ADD2_IfcMemberType_type = 0;
+entity* IFC4X3_ADD2_IfcMetric_type = 0;
+entity* IFC4X3_ADD2_IfcMirroredProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type = 0;
+entity* IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type = 0;
+entity* IFC4X3_ADD2_IfcMonetaryUnit_type = 0;
+entity* IFC4X3_ADD2_IfcMooringDevice_type = 0;
+entity* IFC4X3_ADD2_IfcMooringDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcMotorConnection_type = 0;
+entity* IFC4X3_ADD2_IfcMotorConnectionType_type = 0;
+entity* IFC4X3_ADD2_IfcNamedUnit_type = 0;
+entity* IFC4X3_ADD2_IfcNavigationElement_type = 0;
+entity* IFC4X3_ADD2_IfcNavigationElementType_type = 0;
+entity* IFC4X3_ADD2_IfcObject_type = 0;
+entity* IFC4X3_ADD2_IfcObjectDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcObjectPlacement_type = 0;
+entity* IFC4X3_ADD2_IfcObjective_type = 0;
+entity* IFC4X3_ADD2_IfcOccupant_type = 0;
+entity* IFC4X3_ADD2_IfcOffsetCurve_type = 0;
+entity* IFC4X3_ADD2_IfcOffsetCurve2D_type = 0;
+entity* IFC4X3_ADD2_IfcOffsetCurve3D_type = 0;
+entity* IFC4X3_ADD2_IfcOffsetCurveByDistances_type = 0;
+entity* IFC4X3_ADD2_IfcOpenCrossProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcOpenShell_type = 0;
+entity* IFC4X3_ADD2_IfcOpeningElement_type = 0;
+entity* IFC4X3_ADD2_IfcOrganization_type = 0;
+entity* IFC4X3_ADD2_IfcOrganizationRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcOrientedEdge_type = 0;
+entity* IFC4X3_ADD2_IfcOuterBoundaryCurve_type = 0;
+entity* IFC4X3_ADD2_IfcOutlet_type = 0;
+entity* IFC4X3_ADD2_IfcOutletType_type = 0;
+entity* IFC4X3_ADD2_IfcOwnerHistory_type = 0;
+entity* IFC4X3_ADD2_IfcParameterizedProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcPath_type = 0;
+entity* IFC4X3_ADD2_IfcPavement_type = 0;
+entity* IFC4X3_ADD2_IfcPavementType_type = 0;
+entity* IFC4X3_ADD2_IfcPcurve_type = 0;
+entity* IFC4X3_ADD2_IfcPerformanceHistory_type = 0;
+entity* IFC4X3_ADD2_IfcPermeableCoveringProperties_type = 0;
+entity* IFC4X3_ADD2_IfcPermit_type = 0;
+entity* IFC4X3_ADD2_IfcPerson_type = 0;
+entity* IFC4X3_ADD2_IfcPersonAndOrganization_type = 0;
+entity* IFC4X3_ADD2_IfcPhysicalComplexQuantity_type = 0;
+entity* IFC4X3_ADD2_IfcPhysicalQuantity_type = 0;
+entity* IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type = 0;
+entity* IFC4X3_ADD2_IfcPile_type = 0;
+entity* IFC4X3_ADD2_IfcPileType_type = 0;
+entity* IFC4X3_ADD2_IfcPipeFitting_type = 0;
+entity* IFC4X3_ADD2_IfcPipeFittingType_type = 0;
+entity* IFC4X3_ADD2_IfcPipeSegment_type = 0;
+entity* IFC4X3_ADD2_IfcPipeSegmentType_type = 0;
+entity* IFC4X3_ADD2_IfcPixelTexture_type = 0;
+entity* IFC4X3_ADD2_IfcPlacement_type = 0;
+entity* IFC4X3_ADD2_IfcPlanarBox_type = 0;
+entity* IFC4X3_ADD2_IfcPlanarExtent_type = 0;
+entity* IFC4X3_ADD2_IfcPlane_type = 0;
+entity* IFC4X3_ADD2_IfcPlate_type = 0;
+entity* IFC4X3_ADD2_IfcPlateType_type = 0;
+entity* IFC4X3_ADD2_IfcPoint_type = 0;
+entity* IFC4X3_ADD2_IfcPointByDistanceExpression_type = 0;
+entity* IFC4X3_ADD2_IfcPointOnCurve_type = 0;
+entity* IFC4X3_ADD2_IfcPointOnSurface_type = 0;
+entity* IFC4X3_ADD2_IfcPolyLoop_type = 0;
+entity* IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type = 0;
+entity* IFC4X3_ADD2_IfcPolygonalFaceSet_type = 0;
+entity* IFC4X3_ADD2_IfcPolyline_type = 0;
+entity* IFC4X3_ADD2_IfcPolynomialCurve_type = 0;
+entity* IFC4X3_ADD2_IfcPort_type = 0;
+entity* IFC4X3_ADD2_IfcPositioningElement_type = 0;
+entity* IFC4X3_ADD2_IfcPostalAddress_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedColour_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedCurveFont_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedItem_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedProperties_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedPropertySet_type = 0;
+entity* IFC4X3_ADD2_IfcPreDefinedTextFont_type = 0;
+entity* IFC4X3_ADD2_IfcPresentationItem_type = 0;
+entity* IFC4X3_ADD2_IfcPresentationLayerAssignment_type = 0;
+entity* IFC4X3_ADD2_IfcPresentationLayerWithStyle_type = 0;
+entity* IFC4X3_ADD2_IfcPresentationStyle_type = 0;
+entity* IFC4X3_ADD2_IfcProcedure_type = 0;
+entity* IFC4X3_ADD2_IfcProcedureType_type = 0;
+entity* IFC4X3_ADD2_IfcProcess_type = 0;
+entity* IFC4X3_ADD2_IfcProduct_type = 0;
+entity* IFC4X3_ADD2_IfcProductDefinitionShape_type = 0;
+entity* IFC4X3_ADD2_IfcProductRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcProfileProperties_type = 0;
+entity* IFC4X3_ADD2_IfcProject_type = 0;
+entity* IFC4X3_ADD2_IfcProjectLibrary_type = 0;
+entity* IFC4X3_ADD2_IfcProjectOrder_type = 0;
+entity* IFC4X3_ADD2_IfcProjectedCRS_type = 0;
+entity* IFC4X3_ADD2_IfcProjectionElement_type = 0;
+entity* IFC4X3_ADD2_IfcProperty_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyAbstraction_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyBoundedValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyDependencyRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyEnumeratedValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyEnumeration_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyListValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyReferenceValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertySet_type = 0;
+entity* IFC4X3_ADD2_IfcPropertySetDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcPropertySetTemplate_type = 0;
+entity* IFC4X3_ADD2_IfcPropertySingleValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyTableValue_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyTemplate_type = 0;
+entity* IFC4X3_ADD2_IfcPropertyTemplateDefinition_type = 0;
+entity* IFC4X3_ADD2_IfcProtectiveDevice_type = 0;
+entity* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type = 0;
+entity* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type = 0;
+entity* IFC4X3_ADD2_IfcProtectiveDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcPump_type = 0;
+entity* IFC4X3_ADD2_IfcPumpType_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityArea_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityCount_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityLength_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityNumber_type = 0;
+entity* IFC4X3_ADD2_IfcQuantitySet_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityTime_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityVolume_type = 0;
+entity* IFC4X3_ADD2_IfcQuantityWeight_type = 0;
+entity* IFC4X3_ADD2_IfcRail_type = 0;
+entity* IFC4X3_ADD2_IfcRailType_type = 0;
+entity* IFC4X3_ADD2_IfcRailing_type = 0;
+entity* IFC4X3_ADD2_IfcRailingType_type = 0;
+entity* IFC4X3_ADD2_IfcRailway_type = 0;
+entity* IFC4X3_ADD2_IfcRailwayPart_type = 0;
+entity* IFC4X3_ADD2_IfcRamp_type = 0;
+entity* IFC4X3_ADD2_IfcRampFlight_type = 0;
+entity* IFC4X3_ADD2_IfcRampFlightType_type = 0;
+entity* IFC4X3_ADD2_IfcRampType_type = 0;
+entity* IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type = 0;
+entity* IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type = 0;
+entity* IFC4X3_ADD2_IfcRectangleHollowProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcRectangleProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcRectangularPyramid_type = 0;
+entity* IFC4X3_ADD2_IfcRectangularTrimmedSurface_type = 0;
+entity* IFC4X3_ADD2_IfcRecurrencePattern_type = 0;
+entity* IFC4X3_ADD2_IfcReference_type = 0;
+entity* IFC4X3_ADD2_IfcReferent_type = 0;
+entity* IFC4X3_ADD2_IfcRegularTimeSeries_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcedSoil_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcementBarProperties_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingBar_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingBarType_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingElement_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingElementType_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingMesh_type = 0;
+entity* IFC4X3_ADD2_IfcReinforcingMeshType_type = 0;
+entity* IFC4X3_ADD2_IfcRelAdheresToElement_type = 0;
+entity* IFC4X3_ADD2_IfcRelAggregates_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssigns_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToActor_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToControl_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToGroup_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToProcess_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToProduct_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssignsToResource_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociates_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesApproval_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesClassification_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesConstraint_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesDocument_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesLibrary_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesMaterial_type = 0;
+entity* IFC4X3_ADD2_IfcRelAssociatesProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnects_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsPathElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsPortToElement_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsPorts_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsStructuralMember_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type = 0;
+entity* IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type = 0;
+entity* IFC4X3_ADD2_IfcRelCoversBldgElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelCoversSpaces_type = 0;
+entity* IFC4X3_ADD2_IfcRelDeclares_type = 0;
+entity* IFC4X3_ADD2_IfcRelDecomposes_type = 0;
+entity* IFC4X3_ADD2_IfcRelDefines_type = 0;
+entity* IFC4X3_ADD2_IfcRelDefinesByObject_type = 0;
+entity* IFC4X3_ADD2_IfcRelDefinesByProperties_type = 0;
+entity* IFC4X3_ADD2_IfcRelDefinesByTemplate_type = 0;
+entity* IFC4X3_ADD2_IfcRelDefinesByType_type = 0;
+entity* IFC4X3_ADD2_IfcRelFillsElement_type = 0;
+entity* IFC4X3_ADD2_IfcRelFlowControlElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelInterferesElements_type = 0;
+entity* IFC4X3_ADD2_IfcRelNests_type = 0;
+entity* IFC4X3_ADD2_IfcRelPositions_type = 0;
+entity* IFC4X3_ADD2_IfcRelProjectsElement_type = 0;
+entity* IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type = 0;
+entity* IFC4X3_ADD2_IfcRelSequence_type = 0;
+entity* IFC4X3_ADD2_IfcRelServicesBuildings_type = 0;
+entity* IFC4X3_ADD2_IfcRelSpaceBoundary_type = 0;
+entity* IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type = 0;
+entity* IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type = 0;
+entity* IFC4X3_ADD2_IfcRelVoidsElement_type = 0;
+entity* IFC4X3_ADD2_IfcRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type = 0;
+entity* IFC4X3_ADD2_IfcRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcRepresentationContext_type = 0;
+entity* IFC4X3_ADD2_IfcRepresentationItem_type = 0;
+entity* IFC4X3_ADD2_IfcRepresentationMap_type = 0;
+entity* IFC4X3_ADD2_IfcResource_type = 0;
+entity* IFC4X3_ADD2_IfcResourceApprovalRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcResourceConstraintRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcResourceLevelRelationship_type = 0;
+entity* IFC4X3_ADD2_IfcResourceTime_type = 0;
+entity* IFC4X3_ADD2_IfcRevolvedAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type = 0;
+entity* IFC4X3_ADD2_IfcRightCircularCone_type = 0;
+entity* IFC4X3_ADD2_IfcRightCircularCylinder_type = 0;
+entity* IFC4X3_ADD2_IfcRigidOperation_type = 0;
+entity* IFC4X3_ADD2_IfcRoad_type = 0;
+entity* IFC4X3_ADD2_IfcRoadPart_type = 0;
+entity* IFC4X3_ADD2_IfcRoof_type = 0;
+entity* IFC4X3_ADD2_IfcRoofType_type = 0;
+entity* IFC4X3_ADD2_IfcRoot_type = 0;
+entity* IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcSIUnit_type = 0;
+entity* IFC4X3_ADD2_IfcSanitaryTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcSanitaryTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcSchedulingTime_type = 0;
+entity* IFC4X3_ADD2_IfcSeamCurve_type = 0;
+entity* IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcSectionProperties_type = 0;
+entity* IFC4X3_ADD2_IfcSectionReinforcementProperties_type = 0;
+entity* IFC4X3_ADD2_IfcSectionedSolid_type = 0;
+entity* IFC4X3_ADD2_IfcSectionedSolidHorizontal_type = 0;
+entity* IFC4X3_ADD2_IfcSectionedSpine_type = 0;
+entity* IFC4X3_ADD2_IfcSectionedSurface_type = 0;
+entity* IFC4X3_ADD2_IfcSegment_type = 0;
+entity* IFC4X3_ADD2_IfcSegmentedReferenceCurve_type = 0;
+entity* IFC4X3_ADD2_IfcSensor_type = 0;
+entity* IFC4X3_ADD2_IfcSensorType_type = 0;
+entity* IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcShadingDevice_type = 0;
+entity* IFC4X3_ADD2_IfcShadingDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcShapeAspect_type = 0;
+entity* IFC4X3_ADD2_IfcShapeModel_type = 0;
+entity* IFC4X3_ADD2_IfcShapeRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcShellBasedSurfaceModel_type = 0;
+entity* IFC4X3_ADD2_IfcSign_type = 0;
+entity* IFC4X3_ADD2_IfcSignType_type = 0;
+entity* IFC4X3_ADD2_IfcSignal_type = 0;
+entity* IFC4X3_ADD2_IfcSignalType_type = 0;
+entity* IFC4X3_ADD2_IfcSimpleProperty_type = 0;
+entity* IFC4X3_ADD2_IfcSimplePropertyTemplate_type = 0;
+entity* IFC4X3_ADD2_IfcSineSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcSite_type = 0;
+entity* IFC4X3_ADD2_IfcSlab_type = 0;
+entity* IFC4X3_ADD2_IfcSlabType_type = 0;
+entity* IFC4X3_ADD2_IfcSlippageConnectionCondition_type = 0;
+entity* IFC4X3_ADD2_IfcSolarDevice_type = 0;
+entity* IFC4X3_ADD2_IfcSolarDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcSolidModel_type = 0;
+entity* IFC4X3_ADD2_IfcSpace_type = 0;
+entity* IFC4X3_ADD2_IfcSpaceHeater_type = 0;
+entity* IFC4X3_ADD2_IfcSpaceHeaterType_type = 0;
+entity* IFC4X3_ADD2_IfcSpaceType_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialElement_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialElementType_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialStructureElement_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialStructureElementType_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialZone_type = 0;
+entity* IFC4X3_ADD2_IfcSpatialZoneType_type = 0;
+entity* IFC4X3_ADD2_IfcSphere_type = 0;
+entity* IFC4X3_ADD2_IfcSphericalSurface_type = 0;
+entity* IFC4X3_ADD2_IfcSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcStackTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcStackTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcStair_type = 0;
+entity* IFC4X3_ADD2_IfcStairFlight_type = 0;
+entity* IFC4X3_ADD2_IfcStairFlightType_type = 0;
+entity* IFC4X3_ADD2_IfcStairType_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralActivity_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralAnalysisModel_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralConnection_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralConnectionCondition_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralCurveAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralCurveConnection_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralCurveMember_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralCurveReaction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralItem_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLinearAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoad_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadCase_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadConfiguration_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadGroup_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadLinearForce_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadOrResult_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadSingleForce_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadStatic_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralLoadTemperature_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralMember_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralPlanarAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralPointAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralPointConnection_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralPointReaction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralReaction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralResultGroup_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralSurfaceAction_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralSurfaceConnection_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralSurfaceMember_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type = 0;
+entity* IFC4X3_ADD2_IfcStructuralSurfaceReaction_type = 0;
+entity* IFC4X3_ADD2_IfcStyleModel_type = 0;
+entity* IFC4X3_ADD2_IfcStyledItem_type = 0;
+entity* IFC4X3_ADD2_IfcStyledRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcSubContractResource_type = 0;
+entity* IFC4X3_ADD2_IfcSubContractResourceType_type = 0;
+entity* IFC4X3_ADD2_IfcSubedge_type = 0;
+entity* IFC4X3_ADD2_IfcSurface_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceCurve_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceFeature_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceOfRevolution_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceReinforcementArea_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyle_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyleLighting_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyleRefraction_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyleRendering_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyleShading_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type = 0;
+entity* IFC4X3_ADD2_IfcSurfaceTexture_type = 0;
+entity* IFC4X3_ADD2_IfcSweptAreaSolid_type = 0;
+entity* IFC4X3_ADD2_IfcSweptDiskSolid_type = 0;
+entity* IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type = 0;
+entity* IFC4X3_ADD2_IfcSweptSurface_type = 0;
+entity* IFC4X3_ADD2_IfcSwitchingDevice_type = 0;
+entity* IFC4X3_ADD2_IfcSwitchingDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcSystem_type = 0;
+entity* IFC4X3_ADD2_IfcSystemFurnitureElement_type = 0;
+entity* IFC4X3_ADD2_IfcSystemFurnitureElementType_type = 0;
+entity* IFC4X3_ADD2_IfcTShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcTable_type = 0;
+entity* IFC4X3_ADD2_IfcTableColumn_type = 0;
+entity* IFC4X3_ADD2_IfcTableRow_type = 0;
+entity* IFC4X3_ADD2_IfcTank_type = 0;
+entity* IFC4X3_ADD2_IfcTankType_type = 0;
+entity* IFC4X3_ADD2_IfcTask_type = 0;
+entity* IFC4X3_ADD2_IfcTaskTime_type = 0;
+entity* IFC4X3_ADD2_IfcTaskTimeRecurring_type = 0;
+entity* IFC4X3_ADD2_IfcTaskType_type = 0;
+entity* IFC4X3_ADD2_IfcTelecomAddress_type = 0;
+entity* IFC4X3_ADD2_IfcTendon_type = 0;
+entity* IFC4X3_ADD2_IfcTendonAnchor_type = 0;
+entity* IFC4X3_ADD2_IfcTendonAnchorType_type = 0;
+entity* IFC4X3_ADD2_IfcTendonConduit_type = 0;
+entity* IFC4X3_ADD2_IfcTendonConduitType_type = 0;
+entity* IFC4X3_ADD2_IfcTendonType_type = 0;
+entity* IFC4X3_ADD2_IfcTessellatedFaceSet_type = 0;
+entity* IFC4X3_ADD2_IfcTessellatedItem_type = 0;
+entity* IFC4X3_ADD2_IfcTextLiteral_type = 0;
+entity* IFC4X3_ADD2_IfcTextLiteralWithExtent_type = 0;
+entity* IFC4X3_ADD2_IfcTextStyle_type = 0;
+entity* IFC4X3_ADD2_IfcTextStyleFontModel_type = 0;
+entity* IFC4X3_ADD2_IfcTextStyleForDefinedFont_type = 0;
+entity* IFC4X3_ADD2_IfcTextStyleTextModel_type = 0;
+entity* IFC4X3_ADD2_IfcTextureCoordinate_type = 0;
+entity* IFC4X3_ADD2_IfcTextureCoordinateGenerator_type = 0;
+entity* IFC4X3_ADD2_IfcTextureCoordinateIndices_type = 0;
+entity* IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type = 0;
+entity* IFC4X3_ADD2_IfcTextureMap_type = 0;
+entity* IFC4X3_ADD2_IfcTextureVertex_type = 0;
+entity* IFC4X3_ADD2_IfcTextureVertexList_type = 0;
+entity* IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type = 0;
+entity* IFC4X3_ADD2_IfcTimePeriod_type = 0;
+entity* IFC4X3_ADD2_IfcTimeSeries_type = 0;
+entity* IFC4X3_ADD2_IfcTimeSeriesValue_type = 0;
+entity* IFC4X3_ADD2_IfcTopologicalRepresentationItem_type = 0;
+entity* IFC4X3_ADD2_IfcTopologyRepresentation_type = 0;
+entity* IFC4X3_ADD2_IfcToroidalSurface_type = 0;
+entity* IFC4X3_ADD2_IfcTrackElement_type = 0;
+entity* IFC4X3_ADD2_IfcTrackElementType_type = 0;
+entity* IFC4X3_ADD2_IfcTransformer_type = 0;
+entity* IFC4X3_ADD2_IfcTransformerType_type = 0;
+entity* IFC4X3_ADD2_IfcTransportElement_type = 0;
+entity* IFC4X3_ADD2_IfcTransportElementType_type = 0;
+entity* IFC4X3_ADD2_IfcTransportationDevice_type = 0;
+entity* IFC4X3_ADD2_IfcTransportationDeviceType_type = 0;
+entity* IFC4X3_ADD2_IfcTrapeziumProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcTriangulatedFaceSet_type = 0;
+entity* IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type = 0;
+entity* IFC4X3_ADD2_IfcTrimmedCurve_type = 0;
+entity* IFC4X3_ADD2_IfcTubeBundle_type = 0;
+entity* IFC4X3_ADD2_IfcTubeBundleType_type = 0;
+entity* IFC4X3_ADD2_IfcTypeObject_type = 0;
+entity* IFC4X3_ADD2_IfcTypeProcess_type = 0;
+entity* IFC4X3_ADD2_IfcTypeProduct_type = 0;
+entity* IFC4X3_ADD2_IfcTypeResource_type = 0;
+entity* IFC4X3_ADD2_IfcUShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcUnitAssignment_type = 0;
+entity* IFC4X3_ADD2_IfcUnitaryControlElement_type = 0;
+entity* IFC4X3_ADD2_IfcUnitaryControlElementType_type = 0;
+entity* IFC4X3_ADD2_IfcUnitaryEquipment_type = 0;
+entity* IFC4X3_ADD2_IfcUnitaryEquipmentType_type = 0;
+entity* IFC4X3_ADD2_IfcValve_type = 0;
+entity* IFC4X3_ADD2_IfcValveType_type = 0;
+entity* IFC4X3_ADD2_IfcVector_type = 0;
+entity* IFC4X3_ADD2_IfcVehicle_type = 0;
+entity* IFC4X3_ADD2_IfcVehicleType_type = 0;
+entity* IFC4X3_ADD2_IfcVertex_type = 0;
+entity* IFC4X3_ADD2_IfcVertexLoop_type = 0;
+entity* IFC4X3_ADD2_IfcVertexPoint_type = 0;
+entity* IFC4X3_ADD2_IfcVibrationDamper_type = 0;
+entity* IFC4X3_ADD2_IfcVibrationDamperType_type = 0;
+entity* IFC4X3_ADD2_IfcVibrationIsolator_type = 0;
+entity* IFC4X3_ADD2_IfcVibrationIsolatorType_type = 0;
+entity* IFC4X3_ADD2_IfcVirtualElement_type = 0;
+entity* IFC4X3_ADD2_IfcVirtualGridIntersection_type = 0;
+entity* IFC4X3_ADD2_IfcVoidingFeature_type = 0;
+entity* IFC4X3_ADD2_IfcWall_type = 0;
+entity* IFC4X3_ADD2_IfcWallStandardCase_type = 0;
+entity* IFC4X3_ADD2_IfcWallType_type = 0;
+entity* IFC4X3_ADD2_IfcWasteTerminal_type = 0;
+entity* IFC4X3_ADD2_IfcWasteTerminalType_type = 0;
+entity* IFC4X3_ADD2_IfcWellKnownText_type = 0;
+entity* IFC4X3_ADD2_IfcWindow_type = 0;
+entity* IFC4X3_ADD2_IfcWindowLiningProperties_type = 0;
+entity* IFC4X3_ADD2_IfcWindowPanelProperties_type = 0;
+entity* IFC4X3_ADD2_IfcWindowType_type = 0;
+entity* IFC4X3_ADD2_IfcWorkCalendar_type = 0;
+entity* IFC4X3_ADD2_IfcWorkControl_type = 0;
+entity* IFC4X3_ADD2_IfcWorkPlan_type = 0;
+entity* IFC4X3_ADD2_IfcWorkSchedule_type = 0;
+entity* IFC4X3_ADD2_IfcWorkTime_type = 0;
+entity* IFC4X3_ADD2_IfcZShapeProfileDef_type = 0;
+entity* IFC4X3_ADD2_IfcZone_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAccelerationMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAngularVelocityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcArcIndex_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAreaDensityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcAreaMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcBinary_type = 0;
+type_declaration* IFC4X3_ADD2_IfcBoolean_type = 0;
+type_declaration* IFC4X3_ADD2_IfcBoxAlignment_type = 0;
+type_declaration* IFC4X3_ADD2_IfcCardinalPointReference_type = 0;
+type_declaration* IFC4X3_ADD2_IfcComplexNumber_type = 0;
+type_declaration* IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcContextDependentMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcCountMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcCurvatureMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDate_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDateTime_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDayInMonthNumber_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDayInWeekNumber_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDescriptiveMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDimensionCount_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDoseEquivalentMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDuration_type = 0;
+type_declaration* IFC4X3_ADD2_IfcDynamicViscosityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricChargeMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricConductanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricCurrentMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricResistanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcElectricVoltageMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcEnergyMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcFontStyle_type = 0;
+type_declaration* IFC4X3_ADD2_IfcFontVariant_type = 0;
+type_declaration* IFC4X3_ADD2_IfcFontWeight_type = 0;
+type_declaration* IFC4X3_ADD2_IfcForceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcFrequencyMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcGloballyUniqueId_type = 0;
+type_declaration* IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcHeatingValueMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcIdentifier_type = 0;
+type_declaration* IFC4X3_ADD2_IfcIlluminanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcInductanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcInteger_type = 0;
+type_declaration* IFC4X3_ADD2_IfcIntegerCountRateMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcIonConcentrationMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcKinematicViscosityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLabel_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLanguageId_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLengthMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLineIndex_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLinearForceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLinearMomentMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLinearStiffnessMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLinearVelocityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLogical_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLuminousFluxMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcLuminousIntensityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMagneticFluxMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMassDensityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMassFlowRateMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMassMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMassPerLengthMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMolecularWeightMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMonetaryMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcMonthInYearNumber_type = 0;
+type_declaration* IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcNormalisedRatioMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcNumericMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPHMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcParameterValue_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPlanarForceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPlaneAngleMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPositiveInteger_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPositiveLengthMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPositiveRatioMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPowerMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPresentableText_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPressureMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcPropertySetDefinitionSet_type = 0;
+type_declaration* IFC4X3_ADD2_IfcRadioActivityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcRatioMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcReal_type = 0;
+type_declaration* IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcRotationalMassMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSectionModulusMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcShearModulusMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSolidAngleMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSoundPowerMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSoundPressureMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSpecularExponent_type = 0;
+type_declaration* IFC4X3_ADD2_IfcSpecularRoughness_type = 0;
+type_declaration* IFC4X3_ADD2_IfcStrippedOptional_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTemperatureGradientMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcText_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTextAlignment_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTextDecoration_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTextFontName_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTextTransformation_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermalConductivityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermalResistanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTime_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTimeMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTimeStamp_type = 0;
+type_declaration* IFC4X3_ADD2_IfcTorqueMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcURIReference_type = 0;
+type_declaration* IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcVolumeMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcWarpingConstantMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcWarpingMomentMeasure_type = 0;
+type_declaration* IFC4X3_ADD2_IfcWellKnownTextLiteral_type = 0;
+select_type* IFC4X3_ADD2_IfcActorSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcAppliedValueSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcAxis2Placement_type = 0;
+select_type* IFC4X3_ADD2_IfcBendingParameterSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcBooleanOperand_type = 0;
+select_type* IFC4X3_ADD2_IfcClassificationReferenceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcClassificationSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcColour_type = 0;
+select_type* IFC4X3_ADD2_IfcColourOrFactor_type = 0;
+select_type* IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcCsgSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcCurveMeasureSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcCurveOnSurface_type = 0;
+select_type* IFC4X3_ADD2_IfcCurveOrEdgeCurve_type = 0;
+select_type* IFC4X3_ADD2_IfcCurveStyleFontSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcDefinitionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcDerivedMeasureValue_type = 0;
+select_type* IFC4X3_ADD2_IfcDocumentSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcFillStyleSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcGeometricSetSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcHatchLineDistanceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcInterferenceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcLayeredItem_type = 0;
+select_type* IFC4X3_ADD2_IfcLibrarySelect_type = 0;
+select_type* IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcMaterialSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcMeasureValue_type = 0;
+select_type* IFC4X3_ADD2_IfcMetricValueSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcObjectReferenceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcPointOrVertexPoint_type = 0;
+select_type* IFC4X3_ADD2_IfcProcessSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcProductRepresentationSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcProductSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcResourceObjectSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcResourceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcRotationalStiffnessSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcSegmentIndexSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcShell_type = 0;
+select_type* IFC4X3_ADD2_IfcSimpleValue_type = 0;
+select_type* IFC4X3_ADD2_IfcSizeSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcSolidOrShell_type = 0;
+select_type* IFC4X3_ADD2_IfcSpaceBoundarySelect_type = 0;
+select_type* IFC4X3_ADD2_IfcSpatialReferenceSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcSpecularHighlightSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type = 0;
+select_type* IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcTextFontSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcTimeOrRatioSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcTrimmingSelect_type = 0;
+select_type* IFC4X3_ADD2_IfcUnit_type = 0;
+select_type* IFC4X3_ADD2_IfcValue_type = 0;
+select_type* IFC4X3_ADD2_IfcVectorOrDirection_type = 0;
+select_type* IFC4X3_ADD2_IfcWarpingStiffnessSelect_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcActionRequestTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcActionSourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcActionTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcActuatorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAddressTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAirTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAlarmTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAlignmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAnnotationTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcArithmeticOperatorEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAssemblyPlaceEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBSplineCurveForm_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBSplineSurfaceForm_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBeamTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBearingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBenchmarkEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBoilerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBooleanOperator_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBridgePartTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBridgeTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcBurnerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCableFittingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCableSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcChangeActionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcChillerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcChimneyTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCoilTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcColumnTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCompressorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCondenserTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConnectionTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConstraintEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcControllerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCooledBeamTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCostItemTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCostScheduleTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCourseTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCoveringTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCrewResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCurtainWallTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcCurveInterpolationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDamperTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDataOriginEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDerivedUnitEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDirectionSenseEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDistributionPortTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDistributionSystemEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDocumentStatusEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDoorPanelOperationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDoorPanelPositionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDoorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDoorTypeOperationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDuctFittingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricMotorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcElementCompositionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEngineTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEvaporatorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEventTriggerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcEventTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFacilityUsageEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFanTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFastenerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFilterTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFlowDirectionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFlowMeterTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFootingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcFurnitureTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcGeographicElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcGeometricProjectionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcGlobalOrLocalEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcGridTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcHumidifierTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcInterceptorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcInternalOrExternalEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcInventoryTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcKerbTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcKnotType_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLaborResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLampTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLayerSetDirectionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLightDistributionCurveEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLightEmissionSourceEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLightFixtureTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLoadGroupTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcLogicalOperatorEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMarinePartTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMemberTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcNavigationElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcObjectiveEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcOccupantTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcOpeningElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcOutletTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPavementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPermitTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPileConstructionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPileTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPipeFittingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPlateTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProcedureTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProfileTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProjectOrderTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProjectionElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcPumpTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRailTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRailingTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRailwayPartTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRailwayTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRampFlightTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRampTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRecurrenceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReferentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReflectanceMethodEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRoadPartTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRoadTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRoleEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcRoofTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSIPrefix_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSIUnitName_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSectionTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSensorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSequenceEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSignTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSignalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSlabTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSpaceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStackTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStairFlightTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStairTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStateEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSurfaceSide_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTankTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTaskDurationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTaskTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTendonConduitTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTendonTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTextPath_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTrackElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTransformerTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTransitionCode_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTransportElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTrimmingPreference_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcTubeBundleTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcUnitEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcValveTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcVehicleTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcVirtualElementTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWallTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWindowPanelOperationEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWindowPanelPositionEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWindowTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWorkPlanTypeEnum_type = 0;
+enumeration_type* IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type = 0;
+
+class IFC4X3_ADD2_instance_factory : public IfcParse::instance_factory {
+ virtual IfcUtil::IfcBaseClass* operator()(IfcEntityInstanceData* data) const {
+ switch(data->type()->index_in_schema()) {
+ case 0: return new ::Ifc4x3_add2::IfcAbsorbedDoseMeasure(data);
+ case 1: return new ::Ifc4x3_add2::IfcAccelerationMeasure(data);
+ case 2: return new ::Ifc4x3_add2::IfcActionRequest(data);
+ case 3: return new ::Ifc4x3_add2::IfcActionRequestTypeEnum(data);
+ case 4: return new ::Ifc4x3_add2::IfcActionSourceTypeEnum(data);
+ case 5: return new ::Ifc4x3_add2::IfcActionTypeEnum(data);
+ case 6: return new ::Ifc4x3_add2::IfcActor(data);
+ case 7: return new ::Ifc4x3_add2::IfcActorRole(data);
+ case 9: return new ::Ifc4x3_add2::IfcActuator(data);
+ case 10: return new ::Ifc4x3_add2::IfcActuatorType(data);
+ case 11: return new ::Ifc4x3_add2::IfcActuatorTypeEnum(data);
+ case 12: return new ::Ifc4x3_add2::IfcAddress(data);
+ case 13: return new ::Ifc4x3_add2::IfcAddressTypeEnum(data);
+ case 14: return new ::Ifc4x3_add2::IfcAdvancedBrep(data);
+ case 15: return new ::Ifc4x3_add2::IfcAdvancedBrepWithVoids(data);
+ case 16: return new ::Ifc4x3_add2::IfcAdvancedFace(data);
+ case 17: return new ::Ifc4x3_add2::IfcAirTerminal(data);
+ case 18: return new ::Ifc4x3_add2::IfcAirTerminalBox(data);
+ case 19: return new ::Ifc4x3_add2::IfcAirTerminalBoxType(data);
+ case 20: return new ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum(data);
+ case 21: return new ::Ifc4x3_add2::IfcAirTerminalType(data);
+ case 22: return new ::Ifc4x3_add2::IfcAirTerminalTypeEnum(data);
+ case 23: return new ::Ifc4x3_add2::IfcAirToAirHeatRecovery(data);
+ case 24: return new ::Ifc4x3_add2::IfcAirToAirHeatRecoveryType(data);
+ case 25: return new ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum(data);
+ case 26: return new ::Ifc4x3_add2::IfcAlarm(data);
+ case 27: return new ::Ifc4x3_add2::IfcAlarmType(data);
+ case 28: return new ::Ifc4x3_add2::IfcAlarmTypeEnum(data);
+ case 29: return new ::Ifc4x3_add2::IfcAlignment(data);
+ case 30: return new ::Ifc4x3_add2::IfcAlignmentCant(data);
+ case 31: return new ::Ifc4x3_add2::IfcAlignmentCantSegment(data);
+ case 32: return new ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum(data);
+ case 33: return new ::Ifc4x3_add2::IfcAlignmentHorizontal(data);
+ case 34: return new ::Ifc4x3_add2::IfcAlignmentHorizontalSegment(data);
+ case 35: return new ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum(data);
+ case 36: return new ::Ifc4x3_add2::IfcAlignmentParameterSegment(data);
+ case 37: return new ::Ifc4x3_add2::IfcAlignmentSegment(data);
+ case 38: return new ::Ifc4x3_add2::IfcAlignmentTypeEnum(data);
+ case 39: return new ::Ifc4x3_add2::IfcAlignmentVertical(data);
+ case 40: return new ::Ifc4x3_add2::IfcAlignmentVerticalSegment(data);
+ case 41: return new ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum(data);
+ case 42: return new ::Ifc4x3_add2::IfcAmountOfSubstanceMeasure(data);
+ case 43: return new ::Ifc4x3_add2::IfcAnalysisModelTypeEnum(data);
+ case 44: return new ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum(data);
+ case 45: return new ::Ifc4x3_add2::IfcAngularVelocityMeasure(data);
+ case 46: return new ::Ifc4x3_add2::IfcAnnotation(data);
+ case 47: return new ::Ifc4x3_add2::IfcAnnotationFillArea(data);
+ case 48: return new ::Ifc4x3_add2::IfcAnnotationTypeEnum(data);
+ case 49: return new ::Ifc4x3_add2::IfcApplication(data);
+ case 50: return new ::Ifc4x3_add2::IfcAppliedValue(data);
+ case 52: return new ::Ifc4x3_add2::IfcApproval(data);
+ case 53: return new ::Ifc4x3_add2::IfcApprovalRelationship(data);
+ case 54: return new ::Ifc4x3_add2::IfcArbitraryClosedProfileDef(data);
+ case 55: return new ::Ifc4x3_add2::IfcArbitraryOpenProfileDef(data);
+ case 56: return new ::Ifc4x3_add2::IfcArbitraryProfileDefWithVoids(data);
+ case 57: return new ::Ifc4x3_add2::IfcArcIndex(data);
+ case 58: return new ::Ifc4x3_add2::IfcAreaDensityMeasure(data);
+ case 59: return new ::Ifc4x3_add2::IfcAreaMeasure(data);
+ case 60: return new ::Ifc4x3_add2::IfcArithmeticOperatorEnum(data);
+ case 61: return new ::Ifc4x3_add2::IfcAssemblyPlaceEnum(data);
+ case 62: return new ::Ifc4x3_add2::IfcAsset(data);
+ case 63: return new ::Ifc4x3_add2::IfcAsymmetricIShapeProfileDef(data);
+ case 64: return new ::Ifc4x3_add2::IfcAudioVisualAppliance(data);
+ case 65: return new ::Ifc4x3_add2::IfcAudioVisualApplianceType(data);
+ case 66: return new ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum(data);
+ case 67: return new ::Ifc4x3_add2::IfcAxis1Placement(data);
+ case 69: return new ::Ifc4x3_add2::IfcAxis2Placement2D(data);
+ case 70: return new ::Ifc4x3_add2::IfcAxis2Placement3D(data);
+ case 71: return new ::Ifc4x3_add2::IfcAxis2PlacementLinear(data);
+ case 72: return new ::Ifc4x3_add2::IfcBeam(data);
+ case 73: return new ::Ifc4x3_add2::IfcBeamType(data);
+ case 74: return new ::Ifc4x3_add2::IfcBeamTypeEnum(data);
+ case 75: return new ::Ifc4x3_add2::IfcBearing(data);
+ case 76: return new ::Ifc4x3_add2::IfcBearingType(data);
+ case 77: return new ::Ifc4x3_add2::IfcBearingTypeEnum(data);
+ case 78: return new ::Ifc4x3_add2::IfcBenchmarkEnum(data);
+ case 80: return new ::Ifc4x3_add2::IfcBinary(data);
+ case 81: return new ::Ifc4x3_add2::IfcBlobTexture(data);
+ case 82: return new ::Ifc4x3_add2::IfcBlock(data);
+ case 83: return new ::Ifc4x3_add2::IfcBoiler(data);
+ case 84: return new ::Ifc4x3_add2::IfcBoilerType(data);
+ case 85: return new ::Ifc4x3_add2::IfcBoilerTypeEnum(data);
+ case 86: return new ::Ifc4x3_add2::IfcBoolean(data);
+ case 87: return new ::Ifc4x3_add2::IfcBooleanClippingResult(data);
+ case 89: return new ::Ifc4x3_add2::IfcBooleanOperator(data);
+ case 90: return new ::Ifc4x3_add2::IfcBooleanResult(data);
+ case 91: return new ::Ifc4x3_add2::IfcBorehole(data);
+ case 92: return new ::Ifc4x3_add2::IfcBoundaryCondition(data);
+ case 93: return new ::Ifc4x3_add2::IfcBoundaryCurve(data);
+ case 94: return new ::Ifc4x3_add2::IfcBoundaryEdgeCondition(data);
+ case 95: return new ::Ifc4x3_add2::IfcBoundaryFaceCondition(data);
+ case 96: return new ::Ifc4x3_add2::IfcBoundaryNodeCondition(data);
+ case 97: return new ::Ifc4x3_add2::IfcBoundaryNodeConditionWarping(data);
+ case 98: return new ::Ifc4x3_add2::IfcBoundedCurve(data);
+ case 99: return new ::Ifc4x3_add2::IfcBoundedSurface(data);
+ case 100: return new ::Ifc4x3_add2::IfcBoundingBox(data);
+ case 101: return new ::Ifc4x3_add2::IfcBoxAlignment(data);
+ case 102: return new ::Ifc4x3_add2::IfcBoxedHalfSpace(data);
+ case 103: return new ::Ifc4x3_add2::IfcBridge(data);
+ case 104: return new ::Ifc4x3_add2::IfcBridgePart(data);
+ case 105: return new ::Ifc4x3_add2::IfcBridgePartTypeEnum(data);
+ case 106: return new ::Ifc4x3_add2::IfcBridgeTypeEnum(data);
+ case 107: return new ::Ifc4x3_add2::IfcBSplineCurve(data);
+ case 108: return new ::Ifc4x3_add2::IfcBSplineCurveForm(data);
+ case 109: return new ::Ifc4x3_add2::IfcBSplineCurveWithKnots(data);
+ case 110: return new ::Ifc4x3_add2::IfcBSplineSurface(data);
+ case 111: return new ::Ifc4x3_add2::IfcBSplineSurfaceForm(data);
+ case 112: return new ::Ifc4x3_add2::IfcBSplineSurfaceWithKnots(data);
+ case 113: return new ::Ifc4x3_add2::IfcBuilding(data);
+ case 114: return new ::Ifc4x3_add2::IfcBuildingElementPart(data);
+ case 115: return new ::Ifc4x3_add2::IfcBuildingElementPartType(data);
+ case 116: return new ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum(data);
+ case 117: return new ::Ifc4x3_add2::IfcBuildingElementProxy(data);
+ case 118: return new ::Ifc4x3_add2::IfcBuildingElementProxyType(data);
+ case 119: return new ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum(data);
+ case 120: return new ::Ifc4x3_add2::IfcBuildingStorey(data);
+ case 121: return new ::Ifc4x3_add2::IfcBuildingSystem(data);
+ case 122: return new ::Ifc4x3_add2::IfcBuildingSystemTypeEnum(data);
+ case 123: return new ::Ifc4x3_add2::IfcBuiltElement(data);
+ case 124: return new ::Ifc4x3_add2::IfcBuiltElementType(data);
+ case 125: return new ::Ifc4x3_add2::IfcBuiltSystem(data);
+ case 126: return new ::Ifc4x3_add2::IfcBuiltSystemTypeEnum(data);
+ case 127: return new ::Ifc4x3_add2::IfcBurner(data);
+ case 128: return new ::Ifc4x3_add2::IfcBurnerType(data);
+ case 129: return new ::Ifc4x3_add2::IfcBurnerTypeEnum(data);
+ case 130: return new ::Ifc4x3_add2::IfcCableCarrierFitting(data);
+ case 131: return new ::Ifc4x3_add2::IfcCableCarrierFittingType(data);
+ case 132: return new ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum(data);
+ case 133: return new ::Ifc4x3_add2::IfcCableCarrierSegment(data);
+ case 134: return new ::Ifc4x3_add2::IfcCableCarrierSegmentType(data);
+ case 135: return new ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum(data);
+ case 136: return new ::Ifc4x3_add2::IfcCableFitting(data);
+ case 137: return new ::Ifc4x3_add2::IfcCableFittingType(data);
+ case 138: return new ::Ifc4x3_add2::IfcCableFittingTypeEnum(data);
+ case 139: return new ::Ifc4x3_add2::IfcCableSegment(data);
+ case 140: return new ::Ifc4x3_add2::IfcCableSegmentType(data);
+ case 141: return new ::Ifc4x3_add2::IfcCableSegmentTypeEnum(data);
+ case 142: return new ::Ifc4x3_add2::IfcCaissonFoundation(data);
+ case 143: return new ::Ifc4x3_add2::IfcCaissonFoundationType(data);
+ case 144: return new ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum(data);
+ case 145: return new ::Ifc4x3_add2::IfcCardinalPointReference(data);
+ case 146: return new ::Ifc4x3_add2::IfcCartesianPoint(data);
+ case 147: return new ::Ifc4x3_add2::IfcCartesianPointList(data);
+ case 148: return new ::Ifc4x3_add2::IfcCartesianPointList2D(data);
+ case 149: return new ::Ifc4x3_add2::IfcCartesianPointList3D(data);
+ case 150: return new ::Ifc4x3_add2::IfcCartesianTransformationOperator(data);
+ case 151: return new ::Ifc4x3_add2::IfcCartesianTransformationOperator2D(data);
+ case 152: return new ::Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform(data);
+ case 153: return new ::Ifc4x3_add2::IfcCartesianTransformationOperator3D(data);
+ case 154: return new ::Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform(data);
+ case 155: return new ::Ifc4x3_add2::IfcCenterLineProfileDef(data);
+ case 156: return new ::Ifc4x3_add2::IfcChangeActionEnum(data);
+ case 157: return new ::Ifc4x3_add2::IfcChiller(data);
+ case 158: return new ::Ifc4x3_add2::IfcChillerType(data);
+ case 159: return new ::Ifc4x3_add2::IfcChillerTypeEnum(data);
+ case 160: return new ::Ifc4x3_add2::IfcChimney(data);
+ case 161: return new ::Ifc4x3_add2::IfcChimneyType(data);
+ case 162: return new ::Ifc4x3_add2::IfcChimneyTypeEnum(data);
+ case 163: return new ::Ifc4x3_add2::IfcCircle(data);
+ case 164: return new ::Ifc4x3_add2::IfcCircleHollowProfileDef(data);
+ case 165: return new ::Ifc4x3_add2::IfcCircleProfileDef(data);
+ case 166: return new ::Ifc4x3_add2::IfcCivilElement(data);
+ case 167: return new ::Ifc4x3_add2::IfcCivilElementType(data);
+ case 168: return new ::Ifc4x3_add2::IfcClassification(data);
+ case 169: return new ::Ifc4x3_add2::IfcClassificationReference(data);
+ case 172: return new ::Ifc4x3_add2::IfcClosedShell(data);
+ case 173: return new ::Ifc4x3_add2::IfcClothoid(data);
+ case 174: return new ::Ifc4x3_add2::IfcCoil(data);
+ case 175: return new ::Ifc4x3_add2::IfcCoilType(data);
+ case 176: return new ::Ifc4x3_add2::IfcCoilTypeEnum(data);
+ case 179: return new ::Ifc4x3_add2::IfcColourRgb(data);
+ case 180: return new ::Ifc4x3_add2::IfcColourRgbList(data);
+ case 181: return new ::Ifc4x3_add2::IfcColourSpecification(data);
+ case 182: return new ::Ifc4x3_add2::IfcColumn(data);
+ case 183: return new ::Ifc4x3_add2::IfcColumnType(data);
+ case 184: return new ::Ifc4x3_add2::IfcColumnTypeEnum(data);
+ case 185: return new ::Ifc4x3_add2::IfcCommunicationsAppliance(data);
+ case 186: return new ::Ifc4x3_add2::IfcCommunicationsApplianceType(data);
+ case 187: return new ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum(data);
+ case 188: return new ::Ifc4x3_add2::IfcComplexNumber(data);
+ case 189: return new ::Ifc4x3_add2::IfcComplexProperty(data);
+ case 190: return new ::Ifc4x3_add2::IfcComplexPropertyTemplate(data);
+ case 191: return new ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum(data);
+ case 192: return new ::Ifc4x3_add2::IfcCompositeCurve(data);
+ case 193: return new ::Ifc4x3_add2::IfcCompositeCurveOnSurface(data);
+ case 194: return new ::Ifc4x3_add2::IfcCompositeCurveSegment(data);
+ case 195: return new ::Ifc4x3_add2::IfcCompositeProfileDef(data);
+ case 196: return new ::Ifc4x3_add2::IfcCompoundPlaneAngleMeasure(data);
+ case 197: return new ::Ifc4x3_add2::IfcCompressor(data);
+ case 198: return new ::Ifc4x3_add2::IfcCompressorType(data);
+ case 199: return new ::Ifc4x3_add2::IfcCompressorTypeEnum(data);
+ case 200: return new ::Ifc4x3_add2::IfcCondenser(data);
+ case 201: return new ::Ifc4x3_add2::IfcCondenserType(data);
+ case 202: return new ::Ifc4x3_add2::IfcCondenserTypeEnum(data);
+ case 203: return new ::Ifc4x3_add2::IfcConic(data);
+ case 204: return new ::Ifc4x3_add2::IfcConnectedFaceSet(data);
+ case 205: return new ::Ifc4x3_add2::IfcConnectionCurveGeometry(data);
+ case 206: return new ::Ifc4x3_add2::IfcConnectionGeometry(data);
+ case 207: return new ::Ifc4x3_add2::IfcConnectionPointEccentricity(data);
+ case 208: return new ::Ifc4x3_add2::IfcConnectionPointGeometry(data);
+ case 209: return new ::Ifc4x3_add2::IfcConnectionSurfaceGeometry(data);
+ case 210: return new ::Ifc4x3_add2::IfcConnectionTypeEnum(data);
+ case 211: return new ::Ifc4x3_add2::IfcConnectionVolumeGeometry(data);
+ case 212: return new ::Ifc4x3_add2::IfcConstraint(data);
+ case 213: return new ::Ifc4x3_add2::IfcConstraintEnum(data);
+ case 214: return new ::Ifc4x3_add2::IfcConstructionEquipmentResource(data);
+ case 215: return new ::Ifc4x3_add2::IfcConstructionEquipmentResourceType(data);
+ case 216: return new ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum(data);
+ case 217: return new ::Ifc4x3_add2::IfcConstructionMaterialResource(data);
+ case 218: return new ::Ifc4x3_add2::IfcConstructionMaterialResourceType(data);
+ case 219: return new ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum(data);
+ case 220: return new ::Ifc4x3_add2::IfcConstructionProductResource(data);
+ case 221: return new ::Ifc4x3_add2::IfcConstructionProductResourceType(data);
+ case 222: return new ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum(data);
+ case 223: return new ::Ifc4x3_add2::IfcConstructionResource(data);
+ case 224: return new ::Ifc4x3_add2::IfcConstructionResourceType(data);
+ case 225: return new ::Ifc4x3_add2::IfcContext(data);
+ case 226: return new ::Ifc4x3_add2::IfcContextDependentMeasure(data);
+ case 227: return new ::Ifc4x3_add2::IfcContextDependentUnit(data);
+ case 228: return new ::Ifc4x3_add2::IfcControl(data);
+ case 229: return new ::Ifc4x3_add2::IfcController(data);
+ case 230: return new ::Ifc4x3_add2::IfcControllerType(data);
+ case 231: return new ::Ifc4x3_add2::IfcControllerTypeEnum(data);
+ case 232: return new ::Ifc4x3_add2::IfcConversionBasedUnit(data);
+ case 233: return new ::Ifc4x3_add2::IfcConversionBasedUnitWithOffset(data);
+ case 234: return new ::Ifc4x3_add2::IfcConveyorSegment(data);
+ case 235: return new ::Ifc4x3_add2::IfcConveyorSegmentType(data);
+ case 236: return new ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum(data);
+ case 237: return new ::Ifc4x3_add2::IfcCooledBeam(data);
+ case 238: return new ::Ifc4x3_add2::IfcCooledBeamType(data);
+ case 239: return new ::Ifc4x3_add2::IfcCooledBeamTypeEnum(data);
+ case 240: return new ::Ifc4x3_add2::IfcCoolingTower(data);
+ case 241: return new ::Ifc4x3_add2::IfcCoolingTowerType(data);
+ case 242: return new ::Ifc4x3_add2::IfcCoolingTowerTypeEnum(data);
+ case 243: return new ::Ifc4x3_add2::IfcCoordinateOperation(data);
+ case 244: return new ::Ifc4x3_add2::IfcCoordinateReferenceSystem(data);
+ case 246: return new ::Ifc4x3_add2::IfcCosineSpiral(data);
+ case 247: return new ::Ifc4x3_add2::IfcCostItem(data);
+ case 248: return new ::Ifc4x3_add2::IfcCostItemTypeEnum(data);
+ case 249: return new ::Ifc4x3_add2::IfcCostSchedule(data);
+ case 250: return new ::Ifc4x3_add2::IfcCostScheduleTypeEnum(data);
+ case 251: return new ::Ifc4x3_add2::IfcCostValue(data);
+ case 252: return new ::Ifc4x3_add2::IfcCountMeasure(data);
+ case 253: return new ::Ifc4x3_add2::IfcCourse(data);
+ case 254: return new ::Ifc4x3_add2::IfcCourseType(data);
+ case 255: return new ::Ifc4x3_add2::IfcCourseTypeEnum(data);
+ case 256: return new ::Ifc4x3_add2::IfcCovering(data);
+ case 257: return new ::Ifc4x3_add2::IfcCoveringType(data);
+ case 258: return new ::Ifc4x3_add2::IfcCoveringTypeEnum(data);
+ case 259: return new ::Ifc4x3_add2::IfcCrewResource(data);
+ case 260: return new ::Ifc4x3_add2::IfcCrewResourceType(data);
+ case 261: return new ::Ifc4x3_add2::IfcCrewResourceTypeEnum(data);
+ case 262: return new ::Ifc4x3_add2::IfcCsgPrimitive3D(data);
+ case 264: return new ::Ifc4x3_add2::IfcCsgSolid(data);
+ case 265: return new ::Ifc4x3_add2::IfcCShapeProfileDef(data);
+ case 266: return new ::Ifc4x3_add2::IfcCurrencyRelationship(data);
+ case 267: return new ::Ifc4x3_add2::IfcCurtainWall(data);
+ case 268: return new ::Ifc4x3_add2::IfcCurtainWallType(data);
+ case 269: return new ::Ifc4x3_add2::IfcCurtainWallTypeEnum(data);
+ case 270: return new ::Ifc4x3_add2::IfcCurvatureMeasure(data);
+ case 271: return new ::Ifc4x3_add2::IfcCurve(data);
+ case 272: return new ::Ifc4x3_add2::IfcCurveBoundedPlane(data);
+ case 273: return new ::Ifc4x3_add2::IfcCurveBoundedSurface(data);
+ case 275: return new ::Ifc4x3_add2::IfcCurveInterpolationEnum(data);
+ case 279: return new ::Ifc4x3_add2::IfcCurveSegment(data);
+ case 280: return new ::Ifc4x3_add2::IfcCurveStyle(data);
+ case 281: return new ::Ifc4x3_add2::IfcCurveStyleFont(data);
+ case 282: return new ::Ifc4x3_add2::IfcCurveStyleFontAndScaling(data);
+ case 283: return new ::Ifc4x3_add2::IfcCurveStyleFontPattern(data);
+ case 285: return new ::Ifc4x3_add2::IfcCylindricalSurface(data);
+ case 286: return new ::Ifc4x3_add2::IfcDamper(data);
+ case 287: return new ::Ifc4x3_add2::IfcDamperType(data);
+ case 288: return new ::Ifc4x3_add2::IfcDamperTypeEnum(data);
+ case 289: return new ::Ifc4x3_add2::IfcDataOriginEnum(data);
+ case 290: return new ::Ifc4x3_add2::IfcDate(data);
+ case 291: return new ::Ifc4x3_add2::IfcDateTime(data);
+ case 292: return new ::Ifc4x3_add2::IfcDayInMonthNumber(data);
+ case 293: return new ::Ifc4x3_add2::IfcDayInWeekNumber(data);
+ case 294: return new ::Ifc4x3_add2::IfcDeepFoundation(data);
+ case 295: return new ::Ifc4x3_add2::IfcDeepFoundationType(data);
+ case 298: return new ::Ifc4x3_add2::IfcDerivedProfileDef(data);
+ case 299: return new ::Ifc4x3_add2::IfcDerivedUnit(data);
+ case 300: return new ::Ifc4x3_add2::IfcDerivedUnitElement(data);
+ case 301: return new ::Ifc4x3_add2::IfcDerivedUnitEnum(data);
+ case 302: return new ::Ifc4x3_add2::IfcDescriptiveMeasure(data);
+ case 303: return new ::Ifc4x3_add2::IfcDimensionalExponents(data);
+ case 304: return new ::Ifc4x3_add2::IfcDimensionCount(data);
+ case 305: return new ::Ifc4x3_add2::IfcDirection(data);
+ case 306: return new ::Ifc4x3_add2::IfcDirectionSenseEnum(data);
+ case 307: return new ::Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid(data);
+ case 308: return new ::Ifc4x3_add2::IfcDirectrixDerivedReferenceSweptAreaSolid(data);
+ case 309: return new ::Ifc4x3_add2::IfcDiscreteAccessory(data);
+ case 310: return new ::Ifc4x3_add2::IfcDiscreteAccessoryType(data);
+ case 311: return new ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum(data);
+ case 312: return new ::Ifc4x3_add2::IfcDistributionBoard(data);
+ case 313: return new ::Ifc4x3_add2::IfcDistributionBoardType(data);
+ case 314: return new ::Ifc4x3_add2::IfcDistributionBoardTypeEnum(data);
+ case 315: return new ::Ifc4x3_add2::IfcDistributionChamberElement(data);
+ case 316: return new ::Ifc4x3_add2::IfcDistributionChamberElementType(data);
+ case 317: return new ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum(data);
+ case 318: return new ::Ifc4x3_add2::IfcDistributionCircuit(data);
+ case 319: return new ::Ifc4x3_add2::IfcDistributionControlElement(data);
+ case 320: return new ::Ifc4x3_add2::IfcDistributionControlElementType(data);
+ case 321: return new ::Ifc4x3_add2::IfcDistributionElement(data);
+ case 322: return new ::Ifc4x3_add2::IfcDistributionElementType(data);
+ case 323: return new ::Ifc4x3_add2::IfcDistributionFlowElement(data);
+ case 324: return new ::Ifc4x3_add2::IfcDistributionFlowElementType(data);
+ case 325: return new ::Ifc4x3_add2::IfcDistributionPort(data);
+ case 326: return new ::Ifc4x3_add2::IfcDistributionPortTypeEnum(data);
+ case 327: return new ::Ifc4x3_add2::IfcDistributionSystem(data);
+ case 328: return new ::Ifc4x3_add2::IfcDistributionSystemEnum(data);
+ case 329: return new ::Ifc4x3_add2::IfcDocumentConfidentialityEnum(data);
+ case 330: return new ::Ifc4x3_add2::IfcDocumentInformation(data);
+ case 331: return new ::Ifc4x3_add2::IfcDocumentInformationRelationship(data);
+ case 332: return new ::Ifc4x3_add2::IfcDocumentReference(data);
+ case 334: return new ::Ifc4x3_add2::IfcDocumentStatusEnum(data);
+ case 335: return new ::Ifc4x3_add2::IfcDoor(data);
+ case 336: return new ::Ifc4x3_add2::IfcDoorLiningProperties(data);
+ case 337: return new ::Ifc4x3_add2::IfcDoorPanelOperationEnum(data);
+ case 338: return new ::Ifc4x3_add2::IfcDoorPanelPositionEnum(data);
+ case 339: return new ::Ifc4x3_add2::IfcDoorPanelProperties(data);
+ case 340: return new ::Ifc4x3_add2::IfcDoorType(data);
+ case 341: return new ::Ifc4x3_add2::IfcDoorTypeEnum(data);
+ case 342: return new ::Ifc4x3_add2::IfcDoorTypeOperationEnum(data);
+ case 343: return new ::Ifc4x3_add2::IfcDoseEquivalentMeasure(data);
+ case 344: return new ::Ifc4x3_add2::IfcDraughtingPreDefinedColour(data);
+ case 345: return new ::Ifc4x3_add2::IfcDraughtingPreDefinedCurveFont(data);
+ case 346: return new ::Ifc4x3_add2::IfcDuctFitting(data);
+ case 347: return new ::Ifc4x3_add2::IfcDuctFittingType(data);
+ case 348: return new ::Ifc4x3_add2::IfcDuctFittingTypeEnum(data);
+ case 349: return new ::Ifc4x3_add2::IfcDuctSegment(data);
+ case 350: return new ::Ifc4x3_add2::IfcDuctSegmentType(data);
+ case 351: return new ::Ifc4x3_add2::IfcDuctSegmentTypeEnum(data);
+ case 352: return new ::Ifc4x3_add2::IfcDuctSilencer(data);
+ case 353: return new ::Ifc4x3_add2::IfcDuctSilencerType(data);
+ case 354: return new ::Ifc4x3_add2::IfcDuctSilencerTypeEnum(data);
+ case 355: return new ::Ifc4x3_add2::IfcDuration(data);
+ case 356: return new ::Ifc4x3_add2::IfcDynamicViscosityMeasure(data);
+ case 357: return new ::Ifc4x3_add2::IfcEarthworksCut(data);
+ case 358: return new ::Ifc4x3_add2::IfcEarthworksCutTypeEnum(data);
+ case 359: return new ::Ifc4x3_add2::IfcEarthworksElement(data);
+ case 360: return new ::Ifc4x3_add2::IfcEarthworksFill(data);
+ case 361: return new ::Ifc4x3_add2::IfcEarthworksFillTypeEnum(data);
+ case 362: return new ::Ifc4x3_add2::IfcEdge(data);
+ case 363: return new ::Ifc4x3_add2::IfcEdgeCurve(data);
+ case 364: return new ::Ifc4x3_add2::IfcEdgeLoop(data);
+ case 365: return new ::Ifc4x3_add2::IfcElectricAppliance(data);
+ case 366: return new ::Ifc4x3_add2::IfcElectricApplianceType(data);
+ case 367: return new ::Ifc4x3_add2::IfcElectricApplianceTypeEnum(data);
+ case 368: return new ::Ifc4x3_add2::IfcElectricCapacitanceMeasure(data);
+ case 369: return new ::Ifc4x3_add2::IfcElectricChargeMeasure(data);
+ case 370: return new ::Ifc4x3_add2::IfcElectricConductanceMeasure(data);
+ case 371: return new ::Ifc4x3_add2::IfcElectricCurrentMeasure(data);
+ case 372: return new ::Ifc4x3_add2::IfcElectricDistributionBoard(data);
+ case 373: return new ::Ifc4x3_add2::IfcElectricDistributionBoardType(data);
+ case 374: return new ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum(data);
+ case 375: return new ::Ifc4x3_add2::IfcElectricFlowStorageDevice(data);
+ case 376: return new ::Ifc4x3_add2::IfcElectricFlowStorageDeviceType(data);
+ case 377: return new ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum(data);
+ case 378: return new ::Ifc4x3_add2::IfcElectricFlowTreatmentDevice(data);
+ case 379: return new ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType(data);
+ case 380: return new ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum(data);
+ case 381: return new ::Ifc4x3_add2::IfcElectricGenerator(data);
+ case 382: return new ::Ifc4x3_add2::IfcElectricGeneratorType(data);
+ case 383: return new ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum(data);
+ case 384: return new ::Ifc4x3_add2::IfcElectricMotor(data);
+ case 385: return new ::Ifc4x3_add2::IfcElectricMotorType(data);
+ case 386: return new ::Ifc4x3_add2::IfcElectricMotorTypeEnum(data);
+ case 387: return new ::Ifc4x3_add2::IfcElectricResistanceMeasure(data);
+ case 388: return new ::Ifc4x3_add2::IfcElectricTimeControl(data);
+ case 389: return new ::Ifc4x3_add2::IfcElectricTimeControlType(data);
+ case 390: return new ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum(data);
+ case 391: return new ::Ifc4x3_add2::IfcElectricVoltageMeasure(data);
+ case 392: return new ::Ifc4x3_add2::IfcElement(data);
+ case 393: return new ::Ifc4x3_add2::IfcElementarySurface(data);
+ case 394: return new ::Ifc4x3_add2::IfcElementAssembly(data);
+ case 395: return new ::Ifc4x3_add2::IfcElementAssemblyType(data);
+ case 396: return new ::Ifc4x3_add2::IfcElementAssemblyTypeEnum(data);
+ case 397: return new ::Ifc4x3_add2::IfcElementComponent(data);
+ case 398: return new ::Ifc4x3_add2::IfcElementComponentType(data);
+ case 399: return new ::Ifc4x3_add2::IfcElementCompositionEnum(data);
+ case 400: return new ::Ifc4x3_add2::IfcElementQuantity(data);
+ case 401: return new ::Ifc4x3_add2::IfcElementType(data);
+ case 402: return new ::Ifc4x3_add2::IfcEllipse(data);
+ case 403: return new ::Ifc4x3_add2::IfcEllipseProfileDef(data);
+ case 404: return new ::Ifc4x3_add2::IfcEnergyConversionDevice(data);
+ case 405: return new ::Ifc4x3_add2::IfcEnergyConversionDeviceType(data);
+ case 406: return new ::Ifc4x3_add2::IfcEnergyMeasure(data);
+ case 407: return new ::Ifc4x3_add2::IfcEngine(data);
+ case 408: return new ::Ifc4x3_add2::IfcEngineType(data);
+ case 409: return new ::Ifc4x3_add2::IfcEngineTypeEnum(data);
+ case 410: return new ::Ifc4x3_add2::IfcEvaporativeCooler(data);
+ case 411: return new ::Ifc4x3_add2::IfcEvaporativeCoolerType(data);
+ case 412: return new ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum(data);
+ case 413: return new ::Ifc4x3_add2::IfcEvaporator(data);
+ case 414: return new ::Ifc4x3_add2::IfcEvaporatorType(data);
+ case 415: return new ::Ifc4x3_add2::IfcEvaporatorTypeEnum(data);
+ case 416: return new ::Ifc4x3_add2::IfcEvent(data);
+ case 417: return new ::Ifc4x3_add2::IfcEventTime(data);
+ case 418: return new ::Ifc4x3_add2::IfcEventTriggerTypeEnum(data);
+ case 419: return new ::Ifc4x3_add2::IfcEventType(data);
+ case 420: return new ::Ifc4x3_add2::IfcEventTypeEnum(data);
+ case 421: return new ::Ifc4x3_add2::IfcExtendedProperties(data);
+ case 422: return new ::Ifc4x3_add2::IfcExternalInformation(data);
+ case 423: return new ::Ifc4x3_add2::IfcExternallyDefinedHatchStyle(data);
+ case 424: return new ::Ifc4x3_add2::IfcExternallyDefinedSurfaceStyle(data);
+ case 425: return new ::Ifc4x3_add2::IfcExternallyDefinedTextFont(data);
+ case 426: return new ::Ifc4x3_add2::IfcExternalReference(data);
+ case 427: return new ::Ifc4x3_add2::IfcExternalReferenceRelationship(data);
+ case 428: return new ::Ifc4x3_add2::IfcExternalSpatialElement(data);
+ case 429: return new ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum(data);
+ case 430: return new ::Ifc4x3_add2::IfcExternalSpatialStructureElement(data);
+ case 431: return new ::Ifc4x3_add2::IfcExtrudedAreaSolid(data);
+ case 432: return new ::Ifc4x3_add2::IfcExtrudedAreaSolidTapered(data);
+ case 433: return new ::Ifc4x3_add2::IfcFace(data);
+ case 434: return new ::Ifc4x3_add2::IfcFaceBasedSurfaceModel(data);
+ case 435: return new ::Ifc4x3_add2::IfcFaceBound(data);
+ case 436: return new ::Ifc4x3_add2::IfcFaceOuterBound(data);
+ case 437: return new ::Ifc4x3_add2::IfcFaceSurface(data);
+ case 438: return new ::Ifc4x3_add2::IfcFacetedBrep(data);
+ case 439: return new ::Ifc4x3_add2::IfcFacetedBrepWithVoids(data);
+ case 440: return new ::Ifc4x3_add2::IfcFacility(data);
+ case 441: return new ::Ifc4x3_add2::IfcFacilityPart(data);
+ case 442: return new ::Ifc4x3_add2::IfcFacilityPartCommon(data);
+ case 443: return new ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum(data);
+ case 444: return new ::Ifc4x3_add2::IfcFacilityUsageEnum(data);
+ case 445: return new ::Ifc4x3_add2::IfcFailureConnectionCondition(data);
+ case 446: return new ::Ifc4x3_add2::IfcFan(data);
+ case 447: return new ::Ifc4x3_add2::IfcFanType(data);
+ case 448: return new ::Ifc4x3_add2::IfcFanTypeEnum(data);
+ case 449: return new ::Ifc4x3_add2::IfcFastener(data);
+ case 450: return new ::Ifc4x3_add2::IfcFastenerType(data);
+ case 451: return new ::Ifc4x3_add2::IfcFastenerTypeEnum(data);
+ case 452: return new ::Ifc4x3_add2::IfcFeatureElement(data);
+ case 453: return new ::Ifc4x3_add2::IfcFeatureElementAddition(data);
+ case 454: return new ::Ifc4x3_add2::IfcFeatureElementSubtraction(data);
+ case 455: return new ::Ifc4x3_add2::IfcFillAreaStyle(data);
+ case 456: return new ::Ifc4x3_add2::IfcFillAreaStyleHatching(data);
+ case 457: return new ::Ifc4x3_add2::IfcFillAreaStyleTiles(data);
+ case 459: return new ::Ifc4x3_add2::IfcFilter(data);
+ case 460: return new ::Ifc4x3_add2::IfcFilterType(data);
+ case 461: return new ::Ifc4x3_add2::IfcFilterTypeEnum(data);
+ case 462: return new ::Ifc4x3_add2::IfcFireSuppressionTerminal(data);
+ case 463: return new ::Ifc4x3_add2::IfcFireSuppressionTerminalType(data);
+ case 464: return new ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum(data);
+ case 465: return new ::Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid(data);
+ case 466: return new ::Ifc4x3_add2::IfcFlowController(data);
+ case 467: return new ::Ifc4x3_add2::IfcFlowControllerType(data);
+ case 468: return new ::Ifc4x3_add2::IfcFlowDirectionEnum(data);
+ case 469: return new ::Ifc4x3_add2::IfcFlowFitting(data);
+ case 470: return new ::Ifc4x3_add2::IfcFlowFittingType(data);
+ case 471: return new ::Ifc4x3_add2::IfcFlowInstrument(data);
+ case 472: return new ::Ifc4x3_add2::IfcFlowInstrumentType(data);
+ case 473: return new ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum(data);
+ case 474: return new ::Ifc4x3_add2::IfcFlowMeter(data);
+ case 475: return new ::Ifc4x3_add2::IfcFlowMeterType(data);
+ case 476: return new ::Ifc4x3_add2::IfcFlowMeterTypeEnum(data);
+ case 477: return new ::Ifc4x3_add2::IfcFlowMovingDevice(data);
+ case 478: return new ::Ifc4x3_add2::IfcFlowMovingDeviceType(data);
+ case 479: return new ::Ifc4x3_add2::IfcFlowSegment(data);
+ case 480: return new ::Ifc4x3_add2::IfcFlowSegmentType(data);
+ case 481: return new ::Ifc4x3_add2::IfcFlowStorageDevice(data);
+ case 482: return new ::Ifc4x3_add2::IfcFlowStorageDeviceType(data);
+ case 483: return new ::Ifc4x3_add2::IfcFlowTerminal(data);
+ case 484: return new ::Ifc4x3_add2::IfcFlowTerminalType(data);
+ case 485: return new ::Ifc4x3_add2::IfcFlowTreatmentDevice(data);
+ case 486: return new ::Ifc4x3_add2::IfcFlowTreatmentDeviceType(data);
+ case 487: return new ::Ifc4x3_add2::IfcFontStyle(data);
+ case 488: return new ::Ifc4x3_add2::IfcFontVariant(data);
+ case 489: return new ::Ifc4x3_add2::IfcFontWeight(data);
+ case 490: return new ::Ifc4x3_add2::IfcFooting(data);
+ case 491: return new ::Ifc4x3_add2::IfcFootingType(data);
+ case 492: return new ::Ifc4x3_add2::IfcFootingTypeEnum(data);
+ case 493: return new ::Ifc4x3_add2::IfcForceMeasure(data);
+ case 494: return new ::Ifc4x3_add2::IfcFrequencyMeasure(data);
+ case 495: return new ::Ifc4x3_add2::IfcFurnishingElement(data);
+ case 496: return new ::Ifc4x3_add2::IfcFurnishingElementType(data);
+ case 497: return new ::Ifc4x3_add2::IfcFurniture(data);
+ case 498: return new ::Ifc4x3_add2::IfcFurnitureType(data);
+ case 499: return new ::Ifc4x3_add2::IfcFurnitureTypeEnum(data);
+ case 500: return new ::Ifc4x3_add2::IfcGeographicCRS(data);
+ case 501: return new ::Ifc4x3_add2::IfcGeographicElement(data);
+ case 502: return new ::Ifc4x3_add2::IfcGeographicElementType(data);
+ case 503: return new ::Ifc4x3_add2::IfcGeographicElementTypeEnum(data);
+ case 504: return new ::Ifc4x3_add2::IfcGeometricCurveSet(data);
+ case 505: return new ::Ifc4x3_add2::IfcGeometricProjectionEnum(data);
+ case 506: return new ::Ifc4x3_add2::IfcGeometricRepresentationContext(data);
+ case 507: return new ::Ifc4x3_add2::IfcGeometricRepresentationItem(data);
+ case 508: return new ::Ifc4x3_add2::IfcGeometricRepresentationSubContext(data);
+ case 509: return new ::Ifc4x3_add2::IfcGeometricSet(data);
+ case 511: return new ::Ifc4x3_add2::IfcGeomodel(data);
+ case 512: return new ::Ifc4x3_add2::IfcGeoslice(data);
+ case 513: return new ::Ifc4x3_add2::IfcGeotechnicalAssembly(data);
+ case 514: return new ::Ifc4x3_add2::IfcGeotechnicalElement(data);
+ case 515: return new ::Ifc4x3_add2::IfcGeotechnicalStratum(data);
+ case 516: return new ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum(data);
+ case 517: return new ::Ifc4x3_add2::IfcGloballyUniqueId(data);
+ case 518: return new ::Ifc4x3_add2::IfcGlobalOrLocalEnum(data);
+ case 519: return new ::Ifc4x3_add2::IfcGradientCurve(data);
+ case 520: return new ::Ifc4x3_add2::IfcGrid(data);
+ case 521: return new ::Ifc4x3_add2::IfcGridAxis(data);
+ case 522: return new ::Ifc4x3_add2::IfcGridPlacement(data);
+ case 524: return new ::Ifc4x3_add2::IfcGridTypeEnum(data);
+ case 525: return new ::Ifc4x3_add2::IfcGroup(data);
+ case 526: return new ::Ifc4x3_add2::IfcHalfSpaceSolid(data);
+ case 528: return new ::Ifc4x3_add2::IfcHeatExchanger(data);
+ case 529: return new ::Ifc4x3_add2::IfcHeatExchangerType(data);
+ case 530: return new ::Ifc4x3_add2::IfcHeatExchangerTypeEnum(data);
+ case 531: return new ::Ifc4x3_add2::IfcHeatFluxDensityMeasure(data);
+ case 532: return new ::Ifc4x3_add2::IfcHeatingValueMeasure(data);
+ case 533: return new ::Ifc4x3_add2::IfcHumidifier(data);
+ case 534: return new ::Ifc4x3_add2::IfcHumidifierType(data);
+ case 535: return new ::Ifc4x3_add2::IfcHumidifierTypeEnum(data);
+ case 536: return new ::Ifc4x3_add2::IfcIdentifier(data);
+ case 537: return new ::Ifc4x3_add2::IfcIlluminanceMeasure(data);
+ case 538: return new ::Ifc4x3_add2::IfcImageTexture(data);
+ case 539: return new ::Ifc4x3_add2::IfcImpactProtectionDevice(data);
+ case 540: return new ::Ifc4x3_add2::IfcImpactProtectionDeviceType(data);
+ case 541: return new ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum(data);
+ case 542: return new ::Ifc4x3_add2::IfcIndexedColourMap(data);
+ case 543: return new ::Ifc4x3_add2::IfcIndexedPolyCurve(data);
+ case 544: return new ::Ifc4x3_add2::IfcIndexedPolygonalFace(data);
+ case 545: return new ::Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids(data);
+ case 546: return new ::Ifc4x3_add2::IfcIndexedPolygonalTextureMap(data);
+ case 547: return new ::Ifc4x3_add2::IfcIndexedTextureMap(data);
+ case 548: return new ::Ifc4x3_add2::IfcIndexedTriangleTextureMap(data);
+ case 549: return new ::Ifc4x3_add2::IfcInductanceMeasure(data);
+ case 550: return new ::Ifc4x3_add2::IfcInteger(data);
+ case 551: return new ::Ifc4x3_add2::IfcIntegerCountRateMeasure(data);
+ case 552: return new ::Ifc4x3_add2::IfcInterceptor(data);
+ case 553: return new ::Ifc4x3_add2::IfcInterceptorType(data);
+ case 554: return new ::Ifc4x3_add2::IfcInterceptorTypeEnum(data);
+ case 556: return new ::Ifc4x3_add2::IfcInternalOrExternalEnum(data);
+ case 557: return new ::Ifc4x3_add2::IfcIntersectionCurve(data);
+ case 558: return new ::Ifc4x3_add2::IfcInventory(data);
+ case 559: return new ::Ifc4x3_add2::IfcInventoryTypeEnum(data);
+ case 560: return new ::Ifc4x3_add2::IfcIonConcentrationMeasure(data);
+ case 561: return new ::Ifc4x3_add2::IfcIrregularTimeSeries(data);
+ case 562: return new ::Ifc4x3_add2::IfcIrregularTimeSeriesValue(data);
+ case 563: return new ::Ifc4x3_add2::IfcIShapeProfileDef(data);
+ case 564: return new ::Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure(data);
+ case 565: return new ::Ifc4x3_add2::IfcJunctionBox(data);
+ case 566: return new ::Ifc4x3_add2::IfcJunctionBoxType(data);
+ case 567: return new ::Ifc4x3_add2::IfcJunctionBoxTypeEnum(data);
+ case 568: return new ::Ifc4x3_add2::IfcKerb(data);
+ case 569: return new ::Ifc4x3_add2::IfcKerbType(data);
+ case 570: return new ::Ifc4x3_add2::IfcKerbTypeEnum(data);
+ case 571: return new ::Ifc4x3_add2::IfcKinematicViscosityMeasure(data);
+ case 572: return new ::Ifc4x3_add2::IfcKnotType(data);
+ case 573: return new ::Ifc4x3_add2::IfcLabel(data);
+ case 574: return new ::Ifc4x3_add2::IfcLaborResource(data);
+ case 575: return new ::Ifc4x3_add2::IfcLaborResourceType(data);
+ case 576: return new ::Ifc4x3_add2::IfcLaborResourceTypeEnum(data);
+ case 577: return new ::Ifc4x3_add2::IfcLagTime(data);
+ case 578: return new ::Ifc4x3_add2::IfcLamp(data);
+ case 579: return new ::Ifc4x3_add2::IfcLampType(data);
+ case 580: return new ::Ifc4x3_add2::IfcLampTypeEnum(data);
+ case 581: return new ::Ifc4x3_add2::IfcLanguageId(data);
+ case 583: return new ::Ifc4x3_add2::IfcLayerSetDirectionEnum(data);
+ case 584: return new ::Ifc4x3_add2::IfcLengthMeasure(data);
+ case 585: return new ::Ifc4x3_add2::IfcLibraryInformation(data);
+ case 586: return new ::Ifc4x3_add2::IfcLibraryReference(data);
+ case 588: return new ::Ifc4x3_add2::IfcLightDistributionCurveEnum(data);
+ case 589: return new ::Ifc4x3_add2::IfcLightDistributionData(data);
+ case 591: return new ::Ifc4x3_add2::IfcLightEmissionSourceEnum(data);
+ case 592: return new ::Ifc4x3_add2::IfcLightFixture(data);
+ case 593: return new ::Ifc4x3_add2::IfcLightFixtureType(data);
+ case 594: return new ::Ifc4x3_add2::IfcLightFixtureTypeEnum(data);
+ case 595: return new ::Ifc4x3_add2::IfcLightIntensityDistribution(data);
+ case 596: return new ::Ifc4x3_add2::IfcLightSource(data);
+ case 597: return new ::Ifc4x3_add2::IfcLightSourceAmbient(data);
+ case 598: return new ::Ifc4x3_add2::IfcLightSourceDirectional(data);
+ case 599: return new ::Ifc4x3_add2::IfcLightSourceGoniometric(data);
+ case 600: return new ::Ifc4x3_add2::IfcLightSourcePositional(data);
+ case 601: return new ::Ifc4x3_add2::IfcLightSourceSpot(data);
+ case 602: return new ::Ifc4x3_add2::IfcLine(data);
+ case 603: return new ::Ifc4x3_add2::IfcLinearElement(data);
+ case 604: return new ::Ifc4x3_add2::IfcLinearForceMeasure(data);
+ case 605: return new ::Ifc4x3_add2::IfcLinearMomentMeasure(data);
+ case 606: return new ::Ifc4x3_add2::IfcLinearPlacement(data);
+ case 607: return new ::Ifc4x3_add2::IfcLinearPositioningElement(data);
+ case 608: return new ::Ifc4x3_add2::IfcLinearStiffnessMeasure(data);
+ case 609: return new ::Ifc4x3_add2::IfcLinearVelocityMeasure(data);
+ case 610: return new ::Ifc4x3_add2::IfcLineIndex(data);
+ case 611: return new ::Ifc4x3_add2::IfcLiquidTerminal(data);
+ case 612: return new ::Ifc4x3_add2::IfcLiquidTerminalType(data);
+ case 613: return new ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum(data);
+ case 614: return new ::Ifc4x3_add2::IfcLoadGroupTypeEnum(data);
+ case 615: return new ::Ifc4x3_add2::IfcLocalPlacement(data);
+ case 616: return new ::Ifc4x3_add2::IfcLogical(data);
+ case 617: return new ::Ifc4x3_add2::IfcLogicalOperatorEnum(data);
+ case 618: return new ::Ifc4x3_add2::IfcLoop(data);
+ case 619: return new ::Ifc4x3_add2::IfcLShapeProfileDef(data);
+ case 620: return new ::Ifc4x3_add2::IfcLuminousFluxMeasure(data);
+ case 621: return new ::Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure(data);
+ case 622: return new ::Ifc4x3_add2::IfcLuminousIntensityMeasure(data);
+ case 623: return new ::Ifc4x3_add2::IfcMagneticFluxDensityMeasure(data);
+ case 624: return new ::Ifc4x3_add2::IfcMagneticFluxMeasure(data);
+ case 625: return new ::Ifc4x3_add2::IfcManifoldSolidBrep(data);
+ case 626: return new ::Ifc4x3_add2::IfcMapConversion(data);
+ case 627: return new ::Ifc4x3_add2::IfcMapConversionScaled(data);
+ case 628: return new ::Ifc4x3_add2::IfcMappedItem(data);
+ case 629: return new ::Ifc4x3_add2::IfcMarineFacility(data);
+ case 630: return new ::Ifc4x3_add2::IfcMarineFacilityTypeEnum(data);
+ case 631: return new ::Ifc4x3_add2::IfcMarinePart(data);
+ case 632: return new ::Ifc4x3_add2::IfcMarinePartTypeEnum(data);
+ case 633: return new ::Ifc4x3_add2::IfcMassDensityMeasure(data);
+ case 634: return new ::Ifc4x3_add2::IfcMassFlowRateMeasure(data);
+ case 635: return new ::Ifc4x3_add2::IfcMassMeasure(data);
+ case 636: return new ::Ifc4x3_add2::IfcMassPerLengthMeasure(data);
+ case 637: return new ::Ifc4x3_add2::IfcMaterial(data);
+ case 638: return new ::Ifc4x3_add2::IfcMaterialClassificationRelationship(data);
+ case 639: return new ::Ifc4x3_add2::IfcMaterialConstituent(data);
+ case 640: return new ::Ifc4x3_add2::IfcMaterialConstituentSet(data);
+ case 641: return new ::Ifc4x3_add2::IfcMaterialDefinition(data);
+ case 642: return new ::Ifc4x3_add2::IfcMaterialDefinitionRepresentation(data);
+ case 643: return new ::Ifc4x3_add2::IfcMaterialLayer(data);
+ case 644: return new ::Ifc4x3_add2::IfcMaterialLayerSet(data);
+ case 645: return new ::Ifc4x3_add2::IfcMaterialLayerSetUsage(data);
+ case 646: return new ::Ifc4x3_add2::IfcMaterialLayerWithOffsets(data);
+ case 647: return new ::Ifc4x3_add2::IfcMaterialList(data);
+ case 648: return new ::Ifc4x3_add2::IfcMaterialProfile(data);
+ case 649: return new ::Ifc4x3_add2::IfcMaterialProfileSet(data);
+ case 650: return new ::Ifc4x3_add2::IfcMaterialProfileSetUsage(data);
+ case 651: return new ::Ifc4x3_add2::IfcMaterialProfileSetUsageTapering(data);
+ case 652: return new ::Ifc4x3_add2::IfcMaterialProfileWithOffsets(data);
+ case 653: return new ::Ifc4x3_add2::IfcMaterialProperties(data);
+ case 654: return new ::Ifc4x3_add2::IfcMaterialRelationship(data);
+ case 656: return new ::Ifc4x3_add2::IfcMaterialUsageDefinition(data);
+ case 658: return new ::Ifc4x3_add2::IfcMeasureWithUnit(data);
+ case 659: return new ::Ifc4x3_add2::IfcMechanicalFastener(data);
+ case 660: return new ::Ifc4x3_add2::IfcMechanicalFastenerType(data);
+ case 661: return new ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum(data);
+ case 662: return new ::Ifc4x3_add2::IfcMedicalDevice(data);
+ case 663: return new ::Ifc4x3_add2::IfcMedicalDeviceType(data);
+ case 664: return new ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum(data);
+ case 665: return new ::Ifc4x3_add2::IfcMember(data);
+ case 666: return new ::Ifc4x3_add2::IfcMemberType(data);
+ case 667: return new ::Ifc4x3_add2::IfcMemberTypeEnum(data);
+ case 668: return new ::Ifc4x3_add2::IfcMetric(data);
+ case 670: return new ::Ifc4x3_add2::IfcMirroredProfileDef(data);
+ case 671: return new ::Ifc4x3_add2::IfcMobileTelecommunicationsAppliance(data);
+ case 672: return new ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType(data);
+ case 673: return new ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum(data);
+ case 674: return new ::Ifc4x3_add2::IfcModulusOfElasticityMeasure(data);
+ case 675: return new ::Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure(data);
+ case 676: return new ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure(data);
+ case 678: return new ::Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure(data);
+ case 681: return new ::Ifc4x3_add2::IfcMoistureDiffusivityMeasure(data);
+ case 682: return new ::Ifc4x3_add2::IfcMolecularWeightMeasure(data);
+ case 683: return new ::Ifc4x3_add2::IfcMomentOfInertiaMeasure(data);
+ case 684: return new ::Ifc4x3_add2::IfcMonetaryMeasure(data);
+ case 685: return new ::Ifc4x3_add2::IfcMonetaryUnit(data);
+ case 686: return new ::Ifc4x3_add2::IfcMonthInYearNumber(data);
+ case 687: return new ::Ifc4x3_add2::IfcMooringDevice(data);
+ case 688: return new ::Ifc4x3_add2::IfcMooringDeviceType(data);
+ case 689: return new ::Ifc4x3_add2::IfcMooringDeviceTypeEnum(data);
+ case 690: return new ::Ifc4x3_add2::IfcMotorConnection(data);
+ case 691: return new ::Ifc4x3_add2::IfcMotorConnectionType(data);
+ case 692: return new ::Ifc4x3_add2::IfcMotorConnectionTypeEnum(data);
+ case 693: return new ::Ifc4x3_add2::IfcNamedUnit(data);
+ case 694: return new ::Ifc4x3_add2::IfcNavigationElement(data);
+ case 695: return new ::Ifc4x3_add2::IfcNavigationElementType(data);
+ case 696: return new ::Ifc4x3_add2::IfcNavigationElementTypeEnum(data);
+ case 697: return new ::Ifc4x3_add2::IfcNonNegativeLengthMeasure(data);
+ case 698: return new ::Ifc4x3_add2::IfcNormalisedRatioMeasure(data);
+ case 699: return new ::Ifc4x3_add2::IfcNumericMeasure(data);
+ case 700: return new ::Ifc4x3_add2::IfcObject(data);
+ case 701: return new ::Ifc4x3_add2::IfcObjectDefinition(data);
+ case 702: return new ::Ifc4x3_add2::IfcObjective(data);
+ case 703: return new ::Ifc4x3_add2::IfcObjectiveEnum(data);
+ case 704: return new ::Ifc4x3_add2::IfcObjectPlacement(data);
+ case 706: return new ::Ifc4x3_add2::IfcOccupant(data);
+ case 707: return new ::Ifc4x3_add2::IfcOccupantTypeEnum(data);
+ case 708: return new ::Ifc4x3_add2::IfcOffsetCurve(data);
+ case 709: return new ::Ifc4x3_add2::IfcOffsetCurve2D(data);
+ case 710: return new ::Ifc4x3_add2::IfcOffsetCurve3D(data);
+ case 711: return new ::Ifc4x3_add2::IfcOffsetCurveByDistances(data);
+ case 712: return new ::Ifc4x3_add2::IfcOpenCrossProfileDef(data);
+ case 713: return new ::Ifc4x3_add2::IfcOpeningElement(data);
+ case 714: return new ::Ifc4x3_add2::IfcOpeningElementTypeEnum(data);
+ case 715: return new ::Ifc4x3_add2::IfcOpenShell(data);
+ case 716: return new ::Ifc4x3_add2::IfcOrganization(data);
+ case 717: return new ::Ifc4x3_add2::IfcOrganizationRelationship(data);
+ case 718: return new ::Ifc4x3_add2::IfcOrientedEdge(data);
+ case 719: return new ::Ifc4x3_add2::IfcOuterBoundaryCurve(data);
+ case 720: return new ::Ifc4x3_add2::IfcOutlet(data);
+ case 721: return new ::Ifc4x3_add2::IfcOutletType(data);
+ case 722: return new ::Ifc4x3_add2::IfcOutletTypeEnum(data);
+ case 723: return new ::Ifc4x3_add2::IfcOwnerHistory(data);
+ case 724: return new ::Ifc4x3_add2::IfcParameterizedProfileDef(data);
+ case 725: return new ::Ifc4x3_add2::IfcParameterValue(data);
+ case 726: return new ::Ifc4x3_add2::IfcPath(data);
+ case 727: return new ::Ifc4x3_add2::IfcPavement(data);
+ case 728: return new ::Ifc4x3_add2::IfcPavementType(data);
+ case 729: return new ::Ifc4x3_add2::IfcPavementTypeEnum(data);
+ case 730: return new ::Ifc4x3_add2::IfcPcurve(data);
+ case 731: return new ::Ifc4x3_add2::IfcPerformanceHistory(data);
+ case 732: return new ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum(data);
+ case 733: return new ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum(data);
+ case 734: return new ::Ifc4x3_add2::IfcPermeableCoveringProperties(data);
+ case 735: return new ::Ifc4x3_add2::IfcPermit(data);
+ case 736: return new ::Ifc4x3_add2::IfcPermitTypeEnum(data);
+ case 737: return new ::Ifc4x3_add2::IfcPerson(data);
+ case 738: return new ::Ifc4x3_add2::IfcPersonAndOrganization(data);
+ case 739: return new ::Ifc4x3_add2::IfcPHMeasure(data);
+ case 740: return new ::Ifc4x3_add2::IfcPhysicalComplexQuantity(data);
+ case 741: return new ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum(data);
+ case 742: return new ::Ifc4x3_add2::IfcPhysicalQuantity(data);
+ case 743: return new ::Ifc4x3_add2::IfcPhysicalSimpleQuantity(data);
+ case 744: return new ::Ifc4x3_add2::IfcPile(data);
+ case 745: return new ::Ifc4x3_add2::IfcPileConstructionEnum(data);
+ case 746: return new ::Ifc4x3_add2::IfcPileType(data);
+ case 747: return new ::Ifc4x3_add2::IfcPileTypeEnum(data);
+ case 748: return new ::Ifc4x3_add2::IfcPipeFitting(data);
+ case 749: return new ::Ifc4x3_add2::IfcPipeFittingType(data);
+ case 750: return new ::Ifc4x3_add2::IfcPipeFittingTypeEnum(data);
+ case 751: return new ::Ifc4x3_add2::IfcPipeSegment(data);
+ case 752: return new ::Ifc4x3_add2::IfcPipeSegmentType(data);
+ case 753: return new ::Ifc4x3_add2::IfcPipeSegmentTypeEnum(data);
+ case 754: return new ::Ifc4x3_add2::IfcPixelTexture(data);
+ case 755: return new ::Ifc4x3_add2::IfcPlacement(data);
+ case 756: return new ::Ifc4x3_add2::IfcPlanarBox(data);
+ case 757: return new ::Ifc4x3_add2::IfcPlanarExtent(data);
+ case 758: return new ::Ifc4x3_add2::IfcPlanarForceMeasure(data);
+ case 759: return new ::Ifc4x3_add2::IfcPlane(data);
+ case 760: return new ::Ifc4x3_add2::IfcPlaneAngleMeasure(data);
+ case 761: return new ::Ifc4x3_add2::IfcPlate(data);
+ case 762: return new ::Ifc4x3_add2::IfcPlateType(data);
+ case 763: return new ::Ifc4x3_add2::IfcPlateTypeEnum(data);
+ case 764: return new ::Ifc4x3_add2::IfcPoint(data);
+ case 765: return new ::Ifc4x3_add2::IfcPointByDistanceExpression(data);
+ case 766: return new ::Ifc4x3_add2::IfcPointOnCurve(data);
+ case 767: return new ::Ifc4x3_add2::IfcPointOnSurface(data);
+ case 769: return new ::Ifc4x3_add2::IfcPolygonalBoundedHalfSpace(data);
+ case 770: return new ::Ifc4x3_add2::IfcPolygonalFaceSet(data);
+ case 771: return new ::Ifc4x3_add2::IfcPolyline(data);
+ case 772: return new ::Ifc4x3_add2::IfcPolyLoop(data);
+ case 773: return new ::Ifc4x3_add2::IfcPolynomialCurve(data);
+ case 774: return new ::Ifc4x3_add2::IfcPort(data);
+ case 775: return new ::Ifc4x3_add2::IfcPositioningElement(data);
+ case 776: return new ::Ifc4x3_add2::IfcPositiveInteger(data);
+ case 777: return new ::Ifc4x3_add2::IfcPositiveLengthMeasure(data);
+ case 778: return new ::Ifc4x3_add2::IfcPositivePlaneAngleMeasure(data);
+ case 779: return new ::Ifc4x3_add2::IfcPositiveRatioMeasure(data);
+ case 780: return new ::Ifc4x3_add2::IfcPostalAddress(data);
+ case 781: return new ::Ifc4x3_add2::IfcPowerMeasure(data);
+ case 782: return new ::Ifc4x3_add2::IfcPreDefinedColour(data);
+ case 783: return new ::Ifc4x3_add2::IfcPreDefinedCurveFont(data);
+ case 784: return new ::Ifc4x3_add2::IfcPreDefinedItem(data);
+ case 785: return new ::Ifc4x3_add2::IfcPreDefinedProperties(data);
+ case 786: return new ::Ifc4x3_add2::IfcPreDefinedPropertySet(data);
+ case 787: return new ::Ifc4x3_add2::IfcPreDefinedTextFont(data);
+ case 788: return new ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation(data);
+ case 789: return new ::Ifc4x3_add2::IfcPresentableText(data);
+ case 790: return new ::Ifc4x3_add2::IfcPresentationItem(data);
+ case 791: return new ::Ifc4x3_add2::IfcPresentationLayerAssignment(data);
+ case 792: return new ::Ifc4x3_add2::IfcPresentationLayerWithStyle(data);
+ case 793: return new ::Ifc4x3_add2::IfcPresentationStyle(data);
+ case 794: return new ::Ifc4x3_add2::IfcPressureMeasure(data);
+ case 795: return new ::Ifc4x3_add2::IfcProcedure(data);
+ case 796: return new ::Ifc4x3_add2::IfcProcedureType(data);
+ case 797: return new ::Ifc4x3_add2::IfcProcedureTypeEnum(data);
+ case 798: return new ::Ifc4x3_add2::IfcProcess(data);
+ case 800: return new ::Ifc4x3_add2::IfcProduct(data);
+ case 801: return new ::Ifc4x3_add2::IfcProductDefinitionShape(data);
+ case 802: return new ::Ifc4x3_add2::IfcProductRepresentation(data);
+ case 805: return new ::Ifc4x3_add2::IfcProfileDef(data);
+ case 806: return new ::Ifc4x3_add2::IfcProfileProperties(data);
+ case 807: return new ::Ifc4x3_add2::IfcProfileTypeEnum(data);
+ case 808: return new ::Ifc4x3_add2::IfcProject(data);
+ case 809: return new ::Ifc4x3_add2::IfcProjectedCRS(data);
+ case 810: return new ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum(data);
+ case 811: return new ::Ifc4x3_add2::IfcProjectionElement(data);
+ case 812: return new ::Ifc4x3_add2::IfcProjectionElementTypeEnum(data);
+ case 813: return new ::Ifc4x3_add2::IfcProjectLibrary(data);
+ case 814: return new ::Ifc4x3_add2::IfcProjectOrder(data);
+ case 815: return new ::Ifc4x3_add2::IfcProjectOrderTypeEnum(data);
+ case 816: return new ::Ifc4x3_add2::IfcProperty(data);
+ case 817: return new ::Ifc4x3_add2::IfcPropertyAbstraction(data);
+ case 818: return new ::Ifc4x3_add2::IfcPropertyBoundedValue(data);
+ case 819: return new ::Ifc4x3_add2::IfcPropertyDefinition(data);
+ case 820: return new ::Ifc4x3_add2::IfcPropertyDependencyRelationship(data);
+ case 821: return new ::Ifc4x3_add2::IfcPropertyEnumeratedValue(data);
+ case 822: return new ::Ifc4x3_add2::IfcPropertyEnumeration(data);
+ case 823: return new ::Ifc4x3_add2::IfcPropertyListValue(data);
+ case 824: return new ::Ifc4x3_add2::IfcPropertyReferenceValue(data);
+ case 825: return new ::Ifc4x3_add2::IfcPropertySet(data);
+ case 826: return new ::Ifc4x3_add2::IfcPropertySetDefinition(data);
+ case 828: return new ::Ifc4x3_add2::IfcPropertySetDefinitionSet(data);
+ case 829: return new ::Ifc4x3_add2::IfcPropertySetTemplate(data);
+ case 830: return new ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum(data);
+ case 831: return new ::Ifc4x3_add2::IfcPropertySingleValue(data);
+ case 832: return new ::Ifc4x3_add2::IfcPropertyTableValue(data);
+ case 833: return new ::Ifc4x3_add2::IfcPropertyTemplate(data);
+ case 834: return new ::Ifc4x3_add2::IfcPropertyTemplateDefinition(data);
+ case 835: return new ::Ifc4x3_add2::IfcProtectiveDevice(data);
+ case 836: return new ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit(data);
+ case 837: return new ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType(data);
+ case 838: return new ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum(data);
+ case 839: return new ::Ifc4x3_add2::IfcProtectiveDeviceType(data);
+ case 840: return new ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum(data);
+ case 841: return new ::Ifc4x3_add2::IfcPump(data);
+ case 842: return new ::Ifc4x3_add2::IfcPumpType(data);
+ case 843: return new ::Ifc4x3_add2::IfcPumpTypeEnum(data);
+ case 844: return new ::Ifc4x3_add2::IfcQuantityArea(data);
+ case 845: return new ::Ifc4x3_add2::IfcQuantityCount(data);
+ case 846: return new ::Ifc4x3_add2::IfcQuantityLength(data);
+ case 847: return new ::Ifc4x3_add2::IfcQuantityNumber(data);
+ case 848: return new ::Ifc4x3_add2::IfcQuantitySet(data);
+ case 849: return new ::Ifc4x3_add2::IfcQuantityTime(data);
+ case 850: return new ::Ifc4x3_add2::IfcQuantityVolume(data);
+ case 851: return new ::Ifc4x3_add2::IfcQuantityWeight(data);
+ case 852: return new ::Ifc4x3_add2::IfcRadioActivityMeasure(data);
+ case 853: return new ::Ifc4x3_add2::IfcRail(data);
+ case 854: return new ::Ifc4x3_add2::IfcRailing(data);
+ case 855: return new ::Ifc4x3_add2::IfcRailingType(data);
+ case 856: return new ::Ifc4x3_add2::IfcRailingTypeEnum(data);
+ case 857: return new ::Ifc4x3_add2::IfcRailType(data);
+ case 858: return new ::Ifc4x3_add2::IfcRailTypeEnum(data);
+ case 859: return new ::Ifc4x3_add2::IfcRailway(data);
+ case 860: return new ::Ifc4x3_add2::IfcRailwayPart(data);
+ case 861: return new ::Ifc4x3_add2::IfcRailwayPartTypeEnum(data);
+ case 862: return new ::Ifc4x3_add2::IfcRailwayTypeEnum(data);
+ case 863: return new ::Ifc4x3_add2::IfcRamp(data);
+ case 864: return new ::Ifc4x3_add2::IfcRampFlight(data);
+ case 865: return new ::Ifc4x3_add2::IfcRampFlightType(data);
+ case 866: return new ::Ifc4x3_add2::IfcRampFlightTypeEnum(data);
+ case 867: return new ::Ifc4x3_add2::IfcRampType(data);
+ case 868: return new ::Ifc4x3_add2::IfcRampTypeEnum(data);
+ case 869: return new ::Ifc4x3_add2::IfcRatioMeasure(data);
+ case 870: return new ::Ifc4x3_add2::IfcRationalBSplineCurveWithKnots(data);
+ case 871: return new ::Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots(data);
+ case 872: return new ::Ifc4x3_add2::IfcReal(data);
+ case 873: return new ::Ifc4x3_add2::IfcRectangleHollowProfileDef(data);
+ case 874: return new ::Ifc4x3_add2::IfcRectangleProfileDef(data);
+ case 875: return new ::Ifc4x3_add2::IfcRectangularPyramid(data);
+ case 876: return new ::Ifc4x3_add2::IfcRectangularTrimmedSurface(data);
+ case 877: return new ::Ifc4x3_add2::IfcRecurrencePattern(data);
+ case 878: return new ::Ifc4x3_add2::IfcRecurrenceTypeEnum(data);
+ case 879: return new ::Ifc4x3_add2::IfcReference(data);
+ case 880: return new ::Ifc4x3_add2::IfcReferent(data);
+ case 881: return new ::Ifc4x3_add2::IfcReferentTypeEnum(data);
+ case 882: return new ::Ifc4x3_add2::IfcReflectanceMethodEnum(data);
+ case 883: return new ::Ifc4x3_add2::IfcRegularTimeSeries(data);
+ case 884: return new ::Ifc4x3_add2::IfcReinforcedSoil(data);
+ case 885: return new ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum(data);
+ case 886: return new ::Ifc4x3_add2::IfcReinforcementBarProperties(data);
+ case 887: return new ::Ifc4x3_add2::IfcReinforcementDefinitionProperties(data);
+ case 888: return new ::Ifc4x3_add2::IfcReinforcingBar(data);
+ case 889: return new ::Ifc4x3_add2::IfcReinforcingBarRoleEnum(data);
+ case 890: return new ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum(data);
+ case 891: return new ::Ifc4x3_add2::IfcReinforcingBarType(data);
+ case 892: return new ::Ifc4x3_add2::IfcReinforcingBarTypeEnum(data);
+ case 893: return new ::Ifc4x3_add2::IfcReinforcingElement(data);
+ case 894: return new ::Ifc4x3_add2::IfcReinforcingElementType(data);
+ case 895: return new ::Ifc4x3_add2::IfcReinforcingMesh(data);
+ case 896: return new ::Ifc4x3_add2::IfcReinforcingMeshType(data);
+ case 897: return new ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum(data);
+ case 898: return new ::Ifc4x3_add2::IfcRelAdheresToElement(data);
+ case 899: return new ::Ifc4x3_add2::IfcRelAggregates(data);
+ case 900: return new ::Ifc4x3_add2::IfcRelAssigns(data);
+ case 901: return new ::Ifc4x3_add2::IfcRelAssignsToActor(data);
+ case 902: return new ::Ifc4x3_add2::IfcRelAssignsToControl(data);
+ case 903: return new ::Ifc4x3_add2::IfcRelAssignsToGroup(data);
+ case 904: return new ::Ifc4x3_add2::IfcRelAssignsToGroupByFactor(data);
+ case 905: return new ::Ifc4x3_add2::IfcRelAssignsToProcess(data);
+ case 906: return new ::Ifc4x3_add2::IfcRelAssignsToProduct(data);
+ case 907: return new ::Ifc4x3_add2::IfcRelAssignsToResource(data);
+ case 908: return new ::Ifc4x3_add2::IfcRelAssociates(data);
+ case 909: return new ::Ifc4x3_add2::IfcRelAssociatesApproval(data);
+ case 910: return new ::Ifc4x3_add2::IfcRelAssociatesClassification(data);
+ case 911: return new ::Ifc4x3_add2::IfcRelAssociatesConstraint(data);
+ case 912: return new ::Ifc4x3_add2::IfcRelAssociatesDocument(data);
+ case 913: return new ::Ifc4x3_add2::IfcRelAssociatesLibrary(data);
+ case 914: return new ::Ifc4x3_add2::IfcRelAssociatesMaterial(data);
+ case 915: return new ::Ifc4x3_add2::IfcRelAssociatesProfileDef(data);
+ case 916: return new ::Ifc4x3_add2::IfcRelationship(data);
+ case 917: return new ::Ifc4x3_add2::IfcRelConnects(data);
+ case 918: return new ::Ifc4x3_add2::IfcRelConnectsElements(data);
+ case 919: return new ::Ifc4x3_add2::IfcRelConnectsPathElements(data);
+ case 920: return new ::Ifc4x3_add2::IfcRelConnectsPorts(data);
+ case 921: return new ::Ifc4x3_add2::IfcRelConnectsPortToElement(data);
+ case 922: return new ::Ifc4x3_add2::IfcRelConnectsStructuralActivity(data);
+ case 923: return new ::Ifc4x3_add2::IfcRelConnectsStructuralMember(data);
+ case 924: return new ::Ifc4x3_add2::IfcRelConnectsWithEccentricity(data);
+ case 925: return new ::Ifc4x3_add2::IfcRelConnectsWithRealizingElements(data);
+ case 926: return new ::Ifc4x3_add2::IfcRelContainedInSpatialStructure(data);
+ case 927: return new ::Ifc4x3_add2::IfcRelCoversBldgElements(data);
+ case 928: return new ::Ifc4x3_add2::IfcRelCoversSpaces(data);
+ case 929: return new ::Ifc4x3_add2::IfcRelDeclares(data);
+ case 930: return new ::Ifc4x3_add2::IfcRelDecomposes(data);
+ case 931: return new ::Ifc4x3_add2::IfcRelDefines(data);
+ case 932: return new ::Ifc4x3_add2::IfcRelDefinesByObject(data);
+ case 933: return new ::Ifc4x3_add2::IfcRelDefinesByProperties(data);
+ case 934: return new ::Ifc4x3_add2::IfcRelDefinesByTemplate(data);
+ case 935: return new ::Ifc4x3_add2::IfcRelDefinesByType(data);
+ case 936: return new ::Ifc4x3_add2::IfcRelFillsElement(data);
+ case 937: return new ::Ifc4x3_add2::IfcRelFlowControlElements(data);
+ case 938: return new ::Ifc4x3_add2::IfcRelInterferesElements(data);
+ case 939: return new ::Ifc4x3_add2::IfcRelNests(data);
+ case 940: return new ::Ifc4x3_add2::IfcRelPositions(data);
+ case 941: return new ::Ifc4x3_add2::IfcRelProjectsElement(data);
+ case 942: return new ::Ifc4x3_add2::IfcRelReferencedInSpatialStructure(data);
+ case 943: return new ::Ifc4x3_add2::IfcRelSequence(data);
+ case 944: return new ::Ifc4x3_add2::IfcRelServicesBuildings(data);
+ case 945: return new ::Ifc4x3_add2::IfcRelSpaceBoundary(data);
+ case 946: return new ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel(data);
+ case 947: return new ::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel(data);
+ case 948: return new ::Ifc4x3_add2::IfcRelVoidsElement(data);
+ case 949: return new ::Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment(data);
+ case 950: return new ::Ifc4x3_add2::IfcRepresentation(data);
+ case 951: return new ::Ifc4x3_add2::IfcRepresentationContext(data);
+ case 952: return new ::Ifc4x3_add2::IfcRepresentationItem(data);
+ case 953: return new ::Ifc4x3_add2::IfcRepresentationMap(data);
+ case 954: return new ::Ifc4x3_add2::IfcResource(data);
+ case 955: return new ::Ifc4x3_add2::IfcResourceApprovalRelationship(data);
+ case 956: return new ::Ifc4x3_add2::IfcResourceConstraintRelationship(data);
+ case 957: return new ::Ifc4x3_add2::IfcResourceLevelRelationship(data);
+ case 960: return new ::Ifc4x3_add2::IfcResourceTime(data);
+ case 961: return new ::Ifc4x3_add2::IfcRevolvedAreaSolid(data);
+ case 962: return new ::Ifc4x3_add2::IfcRevolvedAreaSolidTapered(data);
+ case 963: return new ::Ifc4x3_add2::IfcRightCircularCone(data);
+ case 964: return new ::Ifc4x3_add2::IfcRightCircularCylinder(data);
+ case 965: return new ::Ifc4x3_add2::IfcRigidOperation(data);
+ case 966: return new ::Ifc4x3_add2::IfcRoad(data);
+ case 967: return new ::Ifc4x3_add2::IfcRoadPart(data);
+ case 968: return new ::Ifc4x3_add2::IfcRoadPartTypeEnum(data);
+ case 969: return new ::Ifc4x3_add2::IfcRoadTypeEnum(data);
+ case 970: return new ::Ifc4x3_add2::IfcRoleEnum(data);
+ case 971: return new ::Ifc4x3_add2::IfcRoof(data);
+ case 972: return new ::Ifc4x3_add2::IfcRoofType(data);
+ case 973: return new ::Ifc4x3_add2::IfcRoofTypeEnum(data);
+ case 974: return new ::Ifc4x3_add2::IfcRoot(data);
+ case 975: return new ::Ifc4x3_add2::IfcRotationalFrequencyMeasure(data);
+ case 976: return new ::Ifc4x3_add2::IfcRotationalMassMeasure(data);
+ case 977: return new ::Ifc4x3_add2::IfcRotationalStiffnessMeasure(data);
+ case 979: return new ::Ifc4x3_add2::IfcRoundedRectangleProfileDef(data);
+ case 980: return new ::Ifc4x3_add2::IfcSanitaryTerminal(data);
+ case 981: return new ::Ifc4x3_add2::IfcSanitaryTerminalType(data);
+ case 982: return new ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum(data);
+ case 983: return new ::Ifc4x3_add2::IfcSchedulingTime(data);
+ case 984: return new ::Ifc4x3_add2::IfcSeamCurve(data);
+ case 985: return new ::Ifc4x3_add2::IfcSecondOrderPolynomialSpiral(data);
+ case 986: return new ::Ifc4x3_add2::IfcSectionalAreaIntegralMeasure(data);
+ case 987: return new ::Ifc4x3_add2::IfcSectionedSolid(data);
+ case 988: return new ::Ifc4x3_add2::IfcSectionedSolidHorizontal(data);
+ case 989: return new ::Ifc4x3_add2::IfcSectionedSpine(data);
+ case 990: return new ::Ifc4x3_add2::IfcSectionedSurface(data);
+ case 991: return new ::Ifc4x3_add2::IfcSectionModulusMeasure(data);
+ case 992: return new ::Ifc4x3_add2::IfcSectionProperties(data);
+ case 993: return new ::Ifc4x3_add2::IfcSectionReinforcementProperties(data);
+ case 994: return new ::Ifc4x3_add2::IfcSectionTypeEnum(data);
+ case 995: return new ::Ifc4x3_add2::IfcSegment(data);
+ case 996: return new ::Ifc4x3_add2::IfcSegmentedReferenceCurve(data);
+ case 998: return new ::Ifc4x3_add2::IfcSensor(data);
+ case 999: return new ::Ifc4x3_add2::IfcSensorType(data);
+ case 1000: return new ::Ifc4x3_add2::IfcSensorTypeEnum(data);
+ case 1001: return new ::Ifc4x3_add2::IfcSequenceEnum(data);
+ case 1002: return new ::Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral(data);
+ case 1003: return new ::Ifc4x3_add2::IfcShadingDevice(data);
+ case 1004: return new ::Ifc4x3_add2::IfcShadingDeviceType(data);
+ case 1005: return new ::Ifc4x3_add2::IfcShadingDeviceTypeEnum(data);
+ case 1006: return new ::Ifc4x3_add2::IfcShapeAspect(data);
+ case 1007: return new ::Ifc4x3_add2::IfcShapeModel(data);
+ case 1008: return new ::Ifc4x3_add2::IfcShapeRepresentation(data);
+ case 1009: return new ::Ifc4x3_add2::IfcShearModulusMeasure(data);
+ case 1011: return new ::Ifc4x3_add2::IfcShellBasedSurfaceModel(data);
+ case 1012: return new ::Ifc4x3_add2::IfcSign(data);
+ case 1013: return new ::Ifc4x3_add2::IfcSignal(data);
+ case 1014: return new ::Ifc4x3_add2::IfcSignalType(data);
+ case 1015: return new ::Ifc4x3_add2::IfcSignalTypeEnum(data);
+ case 1016: return new ::Ifc4x3_add2::IfcSignType(data);
+ case 1017: return new ::Ifc4x3_add2::IfcSignTypeEnum(data);
+ case 1018: return new ::Ifc4x3_add2::IfcSimpleProperty(data);
+ case 1019: return new ::Ifc4x3_add2::IfcSimplePropertyTemplate(data);
+ case 1020: return new ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum(data);
+ case 1022: return new ::Ifc4x3_add2::IfcSineSpiral(data);
+ case 1023: return new ::Ifc4x3_add2::IfcSIPrefix(data);
+ case 1024: return new ::Ifc4x3_add2::IfcSite(data);
+ case 1025: return new ::Ifc4x3_add2::IfcSIUnit(data);
+ case 1026: return new ::Ifc4x3_add2::IfcSIUnitName(data);
+ case 1028: return new ::Ifc4x3_add2::IfcSlab(data);
+ case 1029: return new ::Ifc4x3_add2::IfcSlabType(data);
+ case 1030: return new ::Ifc4x3_add2::IfcSlabTypeEnum(data);
+ case 1031: return new ::Ifc4x3_add2::IfcSlippageConnectionCondition(data);
+ case 1032: return new ::Ifc4x3_add2::IfcSolarDevice(data);
+ case 1033: return new ::Ifc4x3_add2::IfcSolarDeviceType(data);
+ case 1034: return new ::Ifc4x3_add2::IfcSolarDeviceTypeEnum(data);
+ case 1035: return new ::Ifc4x3_add2::IfcSolidAngleMeasure(data);
+ case 1036: return new ::Ifc4x3_add2::IfcSolidModel(data);
+ case 1038: return new ::Ifc4x3_add2::IfcSoundPowerLevelMeasure(data);
+ case 1039: return new ::Ifc4x3_add2::IfcSoundPowerMeasure(data);
+ case 1040: return new ::Ifc4x3_add2::IfcSoundPressureLevelMeasure(data);
+ case 1041: return new ::Ifc4x3_add2::IfcSoundPressureMeasure(data);
+ case 1042: return new ::Ifc4x3_add2::IfcSpace(data);
+ case 1044: return new ::Ifc4x3_add2::IfcSpaceHeater(data);
+ case 1045: return new ::Ifc4x3_add2::IfcSpaceHeaterType(data);
+ case 1046: return new ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum(data);
+ case 1047: return new ::Ifc4x3_add2::IfcSpaceType(data);
+ case 1048: return new ::Ifc4x3_add2::IfcSpaceTypeEnum(data);
+ case 1049: return new ::Ifc4x3_add2::IfcSpatialElement(data);
+ case 1050: return new ::Ifc4x3_add2::IfcSpatialElementType(data);
+ case 1052: return new ::Ifc4x3_add2::IfcSpatialStructureElement(data);
+ case 1053: return new ::Ifc4x3_add2::IfcSpatialStructureElementType(data);
+ case 1054: return new ::Ifc4x3_add2::IfcSpatialZone(data);
+ case 1055: return new ::Ifc4x3_add2::IfcSpatialZoneType(data);
+ case 1056: return new ::Ifc4x3_add2::IfcSpatialZoneTypeEnum(data);
+ case 1057: return new ::Ifc4x3_add2::IfcSpecificHeatCapacityMeasure(data);
+ case 1058: return new ::Ifc4x3_add2::IfcSpecularExponent(data);
+ case 1060: return new ::Ifc4x3_add2::IfcSpecularRoughness(data);
+ case 1061: return new ::Ifc4x3_add2::IfcSphere(data);
+ case 1062: return new ::Ifc4x3_add2::IfcSphericalSurface(data);
+ case 1063: return new ::Ifc4x3_add2::IfcSpiral(data);
+ case 1064: return new ::Ifc4x3_add2::IfcStackTerminal(data);
+ case 1065: return new ::Ifc4x3_add2::IfcStackTerminalType(data);
+ case 1066: return new ::Ifc4x3_add2::IfcStackTerminalTypeEnum(data);
+ case 1067: return new ::Ifc4x3_add2::IfcStair(data);
+ case 1068: return new ::Ifc4x3_add2::IfcStairFlight(data);
+ case 1069: return new ::Ifc4x3_add2::IfcStairFlightType(data);
+ case 1070: return new ::Ifc4x3_add2::IfcStairFlightTypeEnum(data);
+ case 1071: return new ::Ifc4x3_add2::IfcStairType(data);
+ case 1072: return new ::Ifc4x3_add2::IfcStairTypeEnum(data);
+ case 1073: return new ::Ifc4x3_add2::IfcStateEnum(data);
+ case 1074: return new ::Ifc4x3_add2::IfcStrippedOptional(data);
+ case 1075: return new ::Ifc4x3_add2::IfcStructuralAction(data);
+ case 1076: return new ::Ifc4x3_add2::IfcStructuralActivity(data);
+ case 1078: return new ::Ifc4x3_add2::IfcStructuralAnalysisModel(data);
+ case 1079: return new ::Ifc4x3_add2::IfcStructuralConnection(data);
+ case 1080: return new ::Ifc4x3_add2::IfcStructuralConnectionCondition(data);
+ case 1081: return new ::Ifc4x3_add2::IfcStructuralCurveAction(data);
+ case 1082: return new ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum(data);
+ case 1083: return new ::Ifc4x3_add2::IfcStructuralCurveConnection(data);
+ case 1084: return new ::Ifc4x3_add2::IfcStructuralCurveMember(data);
+ case 1085: return new ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum(data);
+ case 1086: return new ::Ifc4x3_add2::IfcStructuralCurveMemberVarying(data);
+ case 1087: return new ::Ifc4x3_add2::IfcStructuralCurveReaction(data);
+ case 1088: return new ::Ifc4x3_add2::IfcStructuralItem(data);
+ case 1089: return new ::Ifc4x3_add2::IfcStructuralLinearAction(data);
+ case 1090: return new ::Ifc4x3_add2::IfcStructuralLoad(data);
+ case 1091: return new ::Ifc4x3_add2::IfcStructuralLoadCase(data);
+ case 1092: return new ::Ifc4x3_add2::IfcStructuralLoadConfiguration(data);
+ case 1093: return new ::Ifc4x3_add2::IfcStructuralLoadGroup(data);
+ case 1094: return new ::Ifc4x3_add2::IfcStructuralLoadLinearForce(data);
+ case 1095: return new ::Ifc4x3_add2::IfcStructuralLoadOrResult(data);
+ case 1096: return new ::Ifc4x3_add2::IfcStructuralLoadPlanarForce(data);
+ case 1097: return new ::Ifc4x3_add2::IfcStructuralLoadSingleDisplacement(data);
+ case 1098: return new ::Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion(data);
+ case 1099: return new ::Ifc4x3_add2::IfcStructuralLoadSingleForce(data);
+ case 1100: return new ::Ifc4x3_add2::IfcStructuralLoadSingleForceWarping(data);
+ case 1101: return new ::Ifc4x3_add2::IfcStructuralLoadStatic(data);
+ case 1102: return new ::Ifc4x3_add2::IfcStructuralLoadTemperature(data);
+ case 1103: return new ::Ifc4x3_add2::IfcStructuralMember(data);
+ case 1104: return new ::Ifc4x3_add2::IfcStructuralPlanarAction(data);
+ case 1105: return new ::Ifc4x3_add2::IfcStructuralPointAction(data);
+ case 1106: return new ::Ifc4x3_add2::IfcStructuralPointConnection(data);
+ case 1107: return new ::Ifc4x3_add2::IfcStructuralPointReaction(data);
+ case 1108: return new ::Ifc4x3_add2::IfcStructuralReaction(data);
+ case 1109: return new ::Ifc4x3_add2::IfcStructuralResultGroup(data);
+ case 1110: return new ::Ifc4x3_add2::IfcStructuralSurfaceAction(data);
+ case 1111: return new ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum(data);
+ case 1112: return new ::Ifc4x3_add2::IfcStructuralSurfaceConnection(data);
+ case 1113: return new ::Ifc4x3_add2::IfcStructuralSurfaceMember(data);
+ case 1114: return new ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum(data);
+ case 1115: return new ::Ifc4x3_add2::IfcStructuralSurfaceMemberVarying(data);
+ case 1116: return new ::Ifc4x3_add2::IfcStructuralSurfaceReaction(data);
+ case 1117: return new ::Ifc4x3_add2::IfcStyledItem(data);
+ case 1118: return new ::Ifc4x3_add2::IfcStyledRepresentation(data);
+ case 1119: return new ::Ifc4x3_add2::IfcStyleModel(data);
+ case 1120: return new ::Ifc4x3_add2::IfcSubContractResource(data);
+ case 1121: return new ::Ifc4x3_add2::IfcSubContractResourceType(data);
+ case 1122: return new ::Ifc4x3_add2::IfcSubContractResourceTypeEnum(data);
+ case 1123: return new ::Ifc4x3_add2::IfcSubedge(data);
+ case 1124: return new ::Ifc4x3_add2::IfcSurface(data);
+ case 1125: return new ::Ifc4x3_add2::IfcSurfaceCurve(data);
+ case 1126: return new ::Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid(data);
+ case 1127: return new ::Ifc4x3_add2::IfcSurfaceFeature(data);
+ case 1128: return new ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum(data);
+ case 1129: return new ::Ifc4x3_add2::IfcSurfaceOfLinearExtrusion(data);
+ case 1130: return new ::Ifc4x3_add2::IfcSurfaceOfRevolution(data);
+ case 1132: return new ::Ifc4x3_add2::IfcSurfaceReinforcementArea(data);
+ case 1133: return new ::Ifc4x3_add2::IfcSurfaceSide(data);
+ case 1134: return new ::Ifc4x3_add2::IfcSurfaceStyle(data);
+ case 1136: return new ::Ifc4x3_add2::IfcSurfaceStyleLighting(data);
+ case 1137: return new ::Ifc4x3_add2::IfcSurfaceStyleRefraction(data);
+ case 1138: return new ::Ifc4x3_add2::IfcSurfaceStyleRendering(data);
+ case 1139: return new ::Ifc4x3_add2::IfcSurfaceStyleShading(data);
+ case 1140: return new ::Ifc4x3_add2::IfcSurfaceStyleWithTextures(data);
+ case 1141: return new ::Ifc4x3_add2::IfcSurfaceTexture(data);
+ case 1142: return new ::Ifc4x3_add2::IfcSweptAreaSolid(data);
+ case 1143: return new ::Ifc4x3_add2::IfcSweptDiskSolid(data);
+ case 1144: return new ::Ifc4x3_add2::IfcSweptDiskSolidPolygonal(data);
+ case 1145: return new ::Ifc4x3_add2::IfcSweptSurface(data);
+ case 1146: return new ::Ifc4x3_add2::IfcSwitchingDevice(data);
+ case 1147: return new ::Ifc4x3_add2::IfcSwitchingDeviceType(data);
+ case 1148: return new ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum(data);
+ case 1149: return new ::Ifc4x3_add2::IfcSystem(data);
+ case 1150: return new ::Ifc4x3_add2::IfcSystemFurnitureElement(data);
+ case 1151: return new ::Ifc4x3_add2::IfcSystemFurnitureElementType(data);
+ case 1152: return new ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum(data);
+ case 1153: return new ::Ifc4x3_add2::IfcTable(data);
+ case 1154: return new ::Ifc4x3_add2::IfcTableColumn(data);
+ case 1155: return new ::Ifc4x3_add2::IfcTableRow(data);
+ case 1156: return new ::Ifc4x3_add2::IfcTank(data);
+ case 1157: return new ::Ifc4x3_add2::IfcTankType(data);
+ case 1158: return new ::Ifc4x3_add2::IfcTankTypeEnum(data);
+ case 1159: return new ::Ifc4x3_add2::IfcTask(data);
+ case 1160: return new ::Ifc4x3_add2::IfcTaskDurationEnum(data);
+ case 1161: return new ::Ifc4x3_add2::IfcTaskTime(data);
+ case 1162: return new ::Ifc4x3_add2::IfcTaskTimeRecurring(data);
+ case 1163: return new ::Ifc4x3_add2::IfcTaskType(data);
+ case 1164: return new ::Ifc4x3_add2::IfcTaskTypeEnum(data);
+ case 1165: return new ::Ifc4x3_add2::IfcTelecomAddress(data);
+ case 1166: return new ::Ifc4x3_add2::IfcTemperatureGradientMeasure(data);
+ case 1167: return new ::Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure(data);
+ case 1168: return new ::Ifc4x3_add2::IfcTendon(data);
+ case 1169: return new ::Ifc4x3_add2::IfcTendonAnchor(data);
+ case 1170: return new ::Ifc4x3_add2::IfcTendonAnchorType(data);
+ case 1171: return new ::Ifc4x3_add2::IfcTendonAnchorTypeEnum(data);
+ case 1172: return new ::Ifc4x3_add2::IfcTendonConduit(data);
+ case 1173: return new ::Ifc4x3_add2::IfcTendonConduitType(data);
+ case 1174: return new ::Ifc4x3_add2::IfcTendonConduitTypeEnum(data);
+ case 1175: return new ::Ifc4x3_add2::IfcTendonType(data);
+ case 1176: return new ::Ifc4x3_add2::IfcTendonTypeEnum(data);
+ case 1177: return new ::Ifc4x3_add2::IfcTessellatedFaceSet(data);
+ case 1178: return new ::Ifc4x3_add2::IfcTessellatedItem(data);
+ case 1179: return new ::Ifc4x3_add2::IfcText(data);
+ case 1180: return new ::Ifc4x3_add2::IfcTextAlignment(data);
+ case 1181: return new ::Ifc4x3_add2::IfcTextDecoration(data);
+ case 1182: return new ::Ifc4x3_add2::IfcTextFontName(data);
+ case 1184: return new ::Ifc4x3_add2::IfcTextLiteral(data);
+ case 1185: return new ::Ifc4x3_add2::IfcTextLiteralWithExtent(data);
+ case 1186: return new ::Ifc4x3_add2::IfcTextPath(data);
+ case 1187: return new ::Ifc4x3_add2::IfcTextStyle(data);
+ case 1188: return new ::Ifc4x3_add2::IfcTextStyleFontModel(data);
+ case 1189: return new ::Ifc4x3_add2::IfcTextStyleForDefinedFont(data);
+ case 1190: return new ::Ifc4x3_add2::IfcTextStyleTextModel(data);
+ case 1191: return new ::Ifc4x3_add2::IfcTextTransformation(data);
+ case 1192: return new ::Ifc4x3_add2::IfcTextureCoordinate(data);
+ case 1193: return new ::Ifc4x3_add2::IfcTextureCoordinateGenerator(data);
+ case 1194: return new ::Ifc4x3_add2::IfcTextureCoordinateIndices(data);
+ case 1195: return new ::Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids(data);
+ case 1196: return new ::Ifc4x3_add2::IfcTextureMap(data);
+ case 1197: return new ::Ifc4x3_add2::IfcTextureVertex(data);
+ case 1198: return new ::Ifc4x3_add2::IfcTextureVertexList(data);
+ case 1199: return new ::Ifc4x3_add2::IfcThermalAdmittanceMeasure(data);
+ case 1200: return new ::Ifc4x3_add2::IfcThermalConductivityMeasure(data);
+ case 1201: return new ::Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure(data);
+ case 1202: return new ::Ifc4x3_add2::IfcThermalResistanceMeasure(data);
+ case 1203: return new ::Ifc4x3_add2::IfcThermalTransmittanceMeasure(data);
+ case 1204: return new ::Ifc4x3_add2::IfcThermodynamicTemperatureMeasure(data);
+ case 1205: return new ::Ifc4x3_add2::IfcThirdOrderPolynomialSpiral(data);
+ case 1206: return new ::Ifc4x3_add2::IfcTime(data);
+ case 1207: return new ::Ifc4x3_add2::IfcTimeMeasure(data);
+ case 1209: return new ::Ifc4x3_add2::IfcTimePeriod(data);
+ case 1210: return new ::Ifc4x3_add2::IfcTimeSeries(data);
+ case 1211: return new ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum(data);
+ case 1212: return new ::Ifc4x3_add2::IfcTimeSeriesValue(data);
+ case 1213: return new ::Ifc4x3_add2::IfcTimeStamp(data);
+ case 1214: return new ::Ifc4x3_add2::IfcTopologicalRepresentationItem(data);
+ case 1215: return new ::Ifc4x3_add2::IfcTopologyRepresentation(data);
+ case 1216: return new ::Ifc4x3_add2::IfcToroidalSurface(data);
+ case 1217: return new ::Ifc4x3_add2::IfcTorqueMeasure(data);
+ case 1218: return new ::Ifc4x3_add2::IfcTrackElement(data);
+ case 1219: return new ::Ifc4x3_add2::IfcTrackElementType(data);
+ case 1220: return new ::Ifc4x3_add2::IfcTrackElementTypeEnum(data);
+ case 1221: return new ::Ifc4x3_add2::IfcTransformer(data);
+ case 1222: return new ::Ifc4x3_add2::IfcTransformerType(data);
+ case 1223: return new ::Ifc4x3_add2::IfcTransformerTypeEnum(data);
+ case 1224: return new ::Ifc4x3_add2::IfcTransitionCode(data);
+ case 1226: return new ::Ifc4x3_add2::IfcTransportationDevice(data);
+ case 1227: return new ::Ifc4x3_add2::IfcTransportationDeviceType(data);
+ case 1228: return new ::Ifc4x3_add2::IfcTransportElement(data);
+ case 1229: return new ::Ifc4x3_add2::IfcTransportElementType(data);
+ case 1230: return new ::Ifc4x3_add2::IfcTransportElementTypeEnum(data);
+ case 1231: return new ::Ifc4x3_add2::IfcTrapeziumProfileDef(data);
+ case 1232: return new ::Ifc4x3_add2::IfcTriangulatedFaceSet(data);
+ case 1233: return new ::Ifc4x3_add2::IfcTriangulatedIrregularNetwork(data);
+ case 1234: return new ::Ifc4x3_add2::IfcTrimmedCurve(data);
+ case 1235: return new ::Ifc4x3_add2::IfcTrimmingPreference(data);
+ case 1237: return new ::Ifc4x3_add2::IfcTShapeProfileDef(data);
+ case 1238: return new ::Ifc4x3_add2::IfcTubeBundle(data);
+ case 1239: return new ::Ifc4x3_add2::IfcTubeBundleType(data);
+ case 1240: return new ::Ifc4x3_add2::IfcTubeBundleTypeEnum(data);
+ case 1241: return new ::Ifc4x3_add2::IfcTypeObject(data);
+ case 1242: return new ::Ifc4x3_add2::IfcTypeProcess(data);
+ case 1243: return new ::Ifc4x3_add2::IfcTypeProduct(data);
+ case 1244: return new ::Ifc4x3_add2::IfcTypeResource(data);
+ case 1246: return new ::Ifc4x3_add2::IfcUnitaryControlElement(data);
+ case 1247: return new ::Ifc4x3_add2::IfcUnitaryControlElementType(data);
+ case 1248: return new ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum(data);
+ case 1249: return new ::Ifc4x3_add2::IfcUnitaryEquipment(data);
+ case 1250: return new ::Ifc4x3_add2::IfcUnitaryEquipmentType(data);
+ case 1251: return new ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum(data);
+ case 1252: return new ::Ifc4x3_add2::IfcUnitAssignment(data);
+ case 1253: return new ::Ifc4x3_add2::IfcUnitEnum(data);
+ case 1254: return new ::Ifc4x3_add2::IfcURIReference(data);
+ case 1255: return new ::Ifc4x3_add2::IfcUShapeProfileDef(data);
+ case 1257: return new ::Ifc4x3_add2::IfcValve(data);
+ case 1258: return new ::Ifc4x3_add2::IfcValveType(data);
+ case 1259: return new ::Ifc4x3_add2::IfcValveTypeEnum(data);
+ case 1260: return new ::Ifc4x3_add2::IfcVaporPermeabilityMeasure(data);
+ case 1261: return new ::Ifc4x3_add2::IfcVector(data);
+ case 1263: return new ::Ifc4x3_add2::IfcVehicle(data);
+ case 1264: return new ::Ifc4x3_add2::IfcVehicleType(data);
+ case 1265: return new ::Ifc4x3_add2::IfcVehicleTypeEnum(data);
+ case 1266: return new ::Ifc4x3_add2::IfcVertex(data);
+ case 1267: return new ::Ifc4x3_add2::IfcVertexLoop(data);
+ case 1268: return new ::Ifc4x3_add2::IfcVertexPoint(data);
+ case 1269: return new ::Ifc4x3_add2::IfcVibrationDamper(data);
+ case 1270: return new ::Ifc4x3_add2::IfcVibrationDamperType(data);
+ case 1271: return new ::Ifc4x3_add2::IfcVibrationDamperTypeEnum(data);
+ case 1272: return new ::Ifc4x3_add2::IfcVibrationIsolator(data);
+ case 1273: return new ::Ifc4x3_add2::IfcVibrationIsolatorType(data);
+ case 1274: return new ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum(data);
+ case 1275: return new ::Ifc4x3_add2::IfcVirtualElement(data);
+ case 1276: return new ::Ifc4x3_add2::IfcVirtualElementTypeEnum(data);
+ case 1277: return new ::Ifc4x3_add2::IfcVirtualGridIntersection(data);
+ case 1278: return new ::Ifc4x3_add2::IfcVoidingFeature(data);
+ case 1279: return new ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum(data);
+ case 1280: return new ::Ifc4x3_add2::IfcVolumeMeasure(data);
+ case 1281: return new ::Ifc4x3_add2::IfcVolumetricFlowRateMeasure(data);
+ case 1282: return new ::Ifc4x3_add2::IfcWall(data);
+ case 1283: return new ::Ifc4x3_add2::IfcWallStandardCase(data);
+ case 1284: return new ::Ifc4x3_add2::IfcWallType(data);
+ case 1285: return new ::Ifc4x3_add2::IfcWallTypeEnum(data);
+ case 1286: return new ::Ifc4x3_add2::IfcWarpingConstantMeasure(data);
+ case 1287: return new ::Ifc4x3_add2::IfcWarpingMomentMeasure(data);
+ case 1289: return new ::Ifc4x3_add2::IfcWasteTerminal(data);
+ case 1290: return new ::Ifc4x3_add2::IfcWasteTerminalType(data);
+ case 1291: return new ::Ifc4x3_add2::IfcWasteTerminalTypeEnum(data);
+ case 1292: return new ::Ifc4x3_add2::IfcWellKnownText(data);
+ case 1293: return new ::Ifc4x3_add2::IfcWellKnownTextLiteral(data);
+ case 1294: return new ::Ifc4x3_add2::IfcWindow(data);
+ case 1295: return new ::Ifc4x3_add2::IfcWindowLiningProperties(data);
+ case 1296: return new ::Ifc4x3_add2::IfcWindowPanelOperationEnum(data);
+ case 1297: return new ::Ifc4x3_add2::IfcWindowPanelPositionEnum(data);
+ case 1298: return new ::Ifc4x3_add2::IfcWindowPanelProperties(data);
+ case 1299: return new ::Ifc4x3_add2::IfcWindowType(data);
+ case 1300: return new ::Ifc4x3_add2::IfcWindowTypeEnum(data);
+ case 1301: return new ::Ifc4x3_add2::IfcWindowTypePartitioningEnum(data);
+ case 1302: return new ::Ifc4x3_add2::IfcWorkCalendar(data);
+ case 1303: return new ::Ifc4x3_add2::IfcWorkCalendarTypeEnum(data);
+ case 1304: return new ::Ifc4x3_add2::IfcWorkControl(data);
+ case 1305: return new ::Ifc4x3_add2::IfcWorkPlan(data);
+ case 1306: return new ::Ifc4x3_add2::IfcWorkPlanTypeEnum(data);
+ case 1307: return new ::Ifc4x3_add2::IfcWorkSchedule(data);
+ case 1308: return new ::Ifc4x3_add2::IfcWorkScheduleTypeEnum(data);
+ case 1309: return new ::Ifc4x3_add2::IfcWorkTime(data);
+ case 1310: return new ::Ifc4x3_add2::IfcZone(data);
+ case 1311: return new ::Ifc4x3_add2::IfcZShapeProfileDef(data);
+ default: throw IfcParse::IfcException(data->type()->name() + " cannot be instantiated");
+ }
+
+ }
+};
+
+
+#if defined(__clang__)
+__attribute__((optnone))
+#elif defined(__GNUC__) || defined(__GNUG__)
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+#elif defined(_MSC_VER)
+#pragma optimize("", off)
+#endif
+
+IfcParse::schema_definition* IFC4X3_ADD2_populate_schema() {
+ IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type = new type_declaration("IfcAbsorbedDoseMeasure", 0, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcAccelerationMeasure_type = new type_declaration("IfcAccelerationMeasure", 1, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("EMAIL");
+ items.push_back("FAX");
+ items.push_back("NOTDEFINED");
+ items.push_back("PHONE");
+ items.push_back("POST");
+ items.push_back("USERDEFINED");
+ items.push_back("VERBAL");
+ IFC4X3_ADD2_IfcActionRequestTypeEnum_type = new enumeration_type("IfcActionRequestTypeEnum", 3, items);
+ }
+ {
+ std::vector items; items.reserve(27);
+ items.push_back("BRAKES");
+ items.push_back("BUOYANCY");
+ items.push_back("COMPLETION_G1");
+ items.push_back("CREEP");
+ items.push_back("CURRENT");
+ items.push_back("DEAD_LOAD_G");
+ items.push_back("EARTHQUAKE_E");
+ items.push_back("ERECTION");
+ items.push_back("FIRE");
+ items.push_back("ICE");
+ items.push_back("IMPACT");
+ items.push_back("IMPULSE");
+ items.push_back("LACK_OF_FIT");
+ items.push_back("LIVE_LOAD_Q");
+ items.push_back("NOTDEFINED");
+ items.push_back("PRESTRESSING_P");
+ items.push_back("PROPPING");
+ items.push_back("RAIN");
+ items.push_back("SETTLEMENT_U");
+ items.push_back("SHRINKAGE");
+ items.push_back("SNOW_S");
+ items.push_back("SYSTEM_IMPERFECTION");
+ items.push_back("TEMPERATURE_T");
+ items.push_back("TRANSPORT");
+ items.push_back("USERDEFINED");
+ items.push_back("WAVE");
+ items.push_back("WIND_W");
+ IFC4X3_ADD2_IfcActionSourceTypeEnum_type = new enumeration_type("IfcActionSourceTypeEnum", 4, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("EXTRAORDINARY_A");
+ items.push_back("NOTDEFINED");
+ items.push_back("PERMANENT_G");
+ items.push_back("USERDEFINED");
+ items.push_back("VARIABLE_Q");
+ IFC4X3_ADD2_IfcActionTypeEnum_type = new enumeration_type("IfcActionTypeEnum", 5, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("ELECTRICACTUATOR");
+ items.push_back("HANDOPERATEDACTUATOR");
+ items.push_back("HYDRAULICACTUATOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("PNEUMATICACTUATOR");
+ items.push_back("THERMOSTATICACTUATOR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcActuatorTypeEnum_type = new enumeration_type("IfcActuatorTypeEnum", 11, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("DISTRIBUTIONPOINT");
+ items.push_back("HOME");
+ items.push_back("OFFICE");
+ items.push_back("SITE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAddressTypeEnum_type = new enumeration_type("IfcAddressTypeEnum", 13, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("CONSTANTFLOW");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("VARIABLEFLOWPRESSUREDEPENDANT");
+ items.push_back("VARIABLEFLOWPRESSUREINDEPENDANT");
+ IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type = new enumeration_type("IfcAirTerminalBoxTypeEnum", 20, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("DIFFUSER");
+ items.push_back("GRILLE");
+ items.push_back("LOUVRE");
+ items.push_back("NOTDEFINED");
+ items.push_back("REGISTER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAirTerminalTypeEnum_type = new enumeration_type("IfcAirTerminalTypeEnum", 22, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("FIXEDPLATECOUNTERFLOWEXCHANGER");
+ items.push_back("FIXEDPLATECROSSFLOWEXCHANGER");
+ items.push_back("FIXEDPLATEPARALLELFLOWEXCHANGER");
+ items.push_back("HEATPIPE");
+ items.push_back("NOTDEFINED");
+ items.push_back("ROTARYWHEEL");
+ items.push_back("RUNAROUNDCOILLOOP");
+ items.push_back("THERMOSIPHONCOILTYPEHEATEXCHANGERS");
+ items.push_back("THERMOSIPHONSEALEDTUBEHEATEXCHANGERS");
+ items.push_back("TWINTOWERENTHALPYRECOVERYLOOPS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type = new enumeration_type("IfcAirToAirHeatRecoveryTypeEnum", 25, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("BELL");
+ items.push_back("BREAKGLASSBUTTON");
+ items.push_back("LIGHT");
+ items.push_back("MANUALPULLBOX");
+ items.push_back("NOTDEFINED");
+ items.push_back("RAILWAYCROCODILE");
+ items.push_back("RAILWAYDETONATOR");
+ items.push_back("SIREN");
+ items.push_back("USERDEFINED");
+ items.push_back("WHISTLE");
+ IFC4X3_ADD2_IfcAlarmTypeEnum_type = new enumeration_type("IfcAlarmTypeEnum", 28, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("BLOSSCURVE");
+ items.push_back("CONSTANTCANT");
+ items.push_back("COSINECURVE");
+ items.push_back("HELMERTCURVE");
+ items.push_back("LINEARTRANSITION");
+ items.push_back("SINECURVE");
+ items.push_back("VIENNESEBEND");
+ IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type = new enumeration_type("IfcAlignmentCantSegmentTypeEnum", 32, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BLOSSCURVE");
+ items.push_back("CIRCULARARC");
+ items.push_back("CLOTHOID");
+ items.push_back("COSINECURVE");
+ items.push_back("CUBIC");
+ items.push_back("HELMERTCURVE");
+ items.push_back("LINE");
+ items.push_back("SINECURVE");
+ items.push_back("VIENNESEBEND");
+ IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type = new enumeration_type("IfcAlignmentHorizontalSegmentTypeEnum", 35, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAlignmentTypeEnum_type = new enumeration_type("IfcAlignmentTypeEnum", 38, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("CIRCULARARC");
+ items.push_back("CLOTHOID");
+ items.push_back("CONSTANTGRADIENT");
+ items.push_back("PARABOLICARC");
+ IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type = new enumeration_type("IfcAlignmentVerticalSegmentTypeEnum", 41, items);
+ }
+ IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type = new type_declaration("IfcAmountOfSubstanceMeasure", 42, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("IN_PLANE_LOADING_2D");
+ items.push_back("LOADING_3D");
+ items.push_back("NOTDEFINED");
+ items.push_back("OUT_PLANE_LOADING_2D");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type = new enumeration_type("IfcAnalysisModelTypeEnum", 43, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("FIRST_ORDER_THEORY");
+ items.push_back("FULL_NONLINEAR_THEORY");
+ items.push_back("NOTDEFINED");
+ items.push_back("SECOND_ORDER_THEORY");
+ items.push_back("THIRD_ORDER_THEORY");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type = new enumeration_type("IfcAnalysisTheoryTypeEnum", 44, items);
+ }
+ IFC4X3_ADD2_IfcAngularVelocityMeasure_type = new type_declaration("IfcAngularVelocityMeasure", 45, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("CONTOURLINE");
+ items.push_back("DIMENSION");
+ items.push_back("ISOBAR");
+ items.push_back("ISOLUX");
+ items.push_back("ISOTHERM");
+ items.push_back("LEADER");
+ items.push_back("NOTDEFINED");
+ items.push_back("SURVEY");
+ items.push_back("SYMBOL");
+ items.push_back("TEXT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAnnotationTypeEnum_type = new enumeration_type("IfcAnnotationTypeEnum", 48, items);
+ }
+ IFC4X3_ADD2_IfcAreaDensityMeasure_type = new type_declaration("IfcAreaDensityMeasure", 58, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcAreaMeasure_type = new type_declaration("IfcAreaMeasure", 59, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ADD");
+ items.push_back("DIVIDE");
+ items.push_back("MODULO");
+ items.push_back("MULTIPLY");
+ items.push_back("SUBTRACT");
+ IFC4X3_ADD2_IfcArithmeticOperatorEnum_type = new enumeration_type("IfcArithmeticOperatorEnum", 60, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("FACTORY");
+ items.push_back("NOTDEFINED");
+ items.push_back("SITE");
+ IFC4X3_ADD2_IfcAssemblyPlaceEnum_type = new enumeration_type("IfcAssemblyPlaceEnum", 61, items);
+ }
+ {
+ std::vector items; items.reserve(15);
+ items.push_back("AMPLIFIER");
+ items.push_back("CAMERA");
+ items.push_back("COMMUNICATIONTERMINAL");
+ items.push_back("DISPLAY");
+ items.push_back("MICROPHONE");
+ items.push_back("NOTDEFINED");
+ items.push_back("PLAYER");
+ items.push_back("PROJECTOR");
+ items.push_back("RECEIVER");
+ items.push_back("RECORDINGEQUIPMENT");
+ items.push_back("SPEAKER");
+ items.push_back("SWITCHER");
+ items.push_back("TELEPHONE");
+ items.push_back("TUNER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type = new enumeration_type("IfcAudioVisualApplianceTypeEnum", 66, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("CIRCULAR_ARC");
+ items.push_back("ELLIPTIC_ARC");
+ items.push_back("HYPERBOLIC_ARC");
+ items.push_back("PARABOLIC_ARC");
+ items.push_back("POLYLINE_FORM");
+ items.push_back("UNSPECIFIED");
+ IFC4X3_ADD2_IfcBSplineCurveForm_type = new enumeration_type("IfcBSplineCurveForm", 108, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("CONICAL_SURF");
+ items.push_back("CYLINDRICAL_SURF");
+ items.push_back("GENERALISED_CONE");
+ items.push_back("PLANE_SURF");
+ items.push_back("QUADRIC_SURF");
+ items.push_back("RULED_SURF");
+ items.push_back("SPHERICAL_SURF");
+ items.push_back("SURF_OF_LINEAR_EXTRUSION");
+ items.push_back("SURF_OF_REVOLUTION");
+ items.push_back("TOROIDAL_SURF");
+ items.push_back("UNSPECIFIED");
+ IFC4X3_ADD2_IfcBSplineSurfaceForm_type = new enumeration_type("IfcBSplineSurfaceForm", 111, items);
+ }
+ {
+ std::vector items; items.reserve(14);
+ items.push_back("BEAM");
+ items.push_back("CORNICE");
+ items.push_back("DIAPHRAGM");
+ items.push_back("EDGEBEAM");
+ items.push_back("GIRDER_SEGMENT");
+ items.push_back("HATSTONE");
+ items.push_back("HOLLOWCORE");
+ items.push_back("JOIST");
+ items.push_back("LINTEL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIERCAP");
+ items.push_back("SPANDREL");
+ items.push_back("T_BEAM");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBeamTypeEnum_type = new enumeration_type("IfcBeamTypeEnum", 74, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("CYLINDRICAL");
+ items.push_back("DISK");
+ items.push_back("ELASTOMERIC");
+ items.push_back("GUIDE");
+ items.push_back("NOTDEFINED");
+ items.push_back("POT");
+ items.push_back("ROCKER");
+ items.push_back("ROLLER");
+ items.push_back("SPHERICAL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBearingTypeEnum_type = new enumeration_type("IfcBearingTypeEnum", 77, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("EQUALTO");
+ items.push_back("GREATERTHAN");
+ items.push_back("GREATERTHANOREQUALTO");
+ items.push_back("INCLUDEDIN");
+ items.push_back("INCLUDES");
+ items.push_back("LESSTHAN");
+ items.push_back("LESSTHANOREQUALTO");
+ items.push_back("NOTEQUALTO");
+ items.push_back("NOTINCLUDEDIN");
+ items.push_back("NOTINCLUDES");
+ IFC4X3_ADD2_IfcBenchmarkEnum_type = new enumeration_type("IfcBenchmarkEnum", 78, items);
+ }
+ IFC4X3_ADD2_IfcBinary_type = new type_declaration("IfcBinary", 80, new simple_type(simple_type::binary_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("STEAM");
+ items.push_back("USERDEFINED");
+ items.push_back("WATER");
+ IFC4X3_ADD2_IfcBoilerTypeEnum_type = new enumeration_type("IfcBoilerTypeEnum", 85, items);
+ }
+ IFC4X3_ADD2_IfcBoolean_type = new type_declaration("IfcBoolean", 86, new simple_type(simple_type::boolean_type));
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("DIFFERENCE");
+ items.push_back("INTERSECTION");
+ items.push_back("UNION");
+ IFC4X3_ADD2_IfcBooleanOperator_type = new enumeration_type("IfcBooleanOperator", 89, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("ABUTMENT");
+ items.push_back("DECK");
+ items.push_back("DECK_SEGMENT");
+ items.push_back("FOUNDATION");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIER");
+ items.push_back("PIER_SEGMENT");
+ items.push_back("PYLON");
+ items.push_back("SUBSTRUCTURE");
+ items.push_back("SUPERSTRUCTURE");
+ items.push_back("SURFACESTRUCTURE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBridgePartTypeEnum_type = new enumeration_type("IfcBridgePartTypeEnum", 105, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("ARCHED");
+ items.push_back("CABLE_STAYED");
+ items.push_back("CANTILEVER");
+ items.push_back("CULVERT");
+ items.push_back("FRAMEWORK");
+ items.push_back("GIRDER");
+ items.push_back("NOTDEFINED");
+ items.push_back("SUSPENSION");
+ items.push_back("TRUSS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBridgeTypeEnum_type = new enumeration_type("IfcBridgeTypeEnum", 106, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("APRON");
+ items.push_back("ARMOURUNIT");
+ items.push_back("INSULATION");
+ items.push_back("NOTDEFINED");
+ items.push_back("PRECASTPANEL");
+ items.push_back("SAFETYCAGE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type = new enumeration_type("IfcBuildingElementPartTypeEnum", 116, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("COMPLEX");
+ items.push_back("ELEMENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("PARTIAL");
+ items.push_back("PROVISIONFORSPACE");
+ items.push_back("PROVISIONFORVOID");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type = new enumeration_type("IfcBuildingElementProxyTypeEnum", 119, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("FENESTRATION");
+ items.push_back("FOUNDATION");
+ items.push_back("LOADBEARING");
+ items.push_back("NOTDEFINED");
+ items.push_back("OUTERSHELL");
+ items.push_back("SHADING");
+ items.push_back("TRANSPORT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type = new enumeration_type("IfcBuildingSystemTypeEnum", 122, items);
+ }
+ {
+ std::vector items; items.reserve(15);
+ items.push_back("EROSIONPREVENTION");
+ items.push_back("FENESTRATION");
+ items.push_back("FOUNDATION");
+ items.push_back("LOADBEARING");
+ items.push_back("MOORING");
+ items.push_back("NOTDEFINED");
+ items.push_back("OUTERSHELL");
+ items.push_back("PRESTRESSING");
+ items.push_back("RAILWAYLINE");
+ items.push_back("RAILWAYTRACK");
+ items.push_back("REINFORCING");
+ items.push_back("SHADING");
+ items.push_back("TRACKCIRCUIT");
+ items.push_back("TRANSPORT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type = new enumeration_type("IfcBuiltSystemTypeEnum", 126, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcBurnerTypeEnum_type = new enumeration_type("IfcBurnerTypeEnum", 129, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BEND");
+ items.push_back("CONNECTOR");
+ items.push_back("CROSS");
+ items.push_back("JUNCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("REDUCER");
+ items.push_back("TEE");
+ items.push_back("TRANSITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type = new enumeration_type("IfcCableCarrierFittingTypeEnum", 132, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("CABLEBRACKET");
+ items.push_back("CABLELADDERSEGMENT");
+ items.push_back("CABLETRAYSEGMENT");
+ items.push_back("CABLETRUNKINGSEGMENT");
+ items.push_back("CATENARYWIRE");
+ items.push_back("CONDUITSEGMENT");
+ items.push_back("DROPPER");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type = new enumeration_type("IfcCableCarrierSegmentTypeEnum", 135, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("CONNECTOR");
+ items.push_back("ENTRY");
+ items.push_back("EXIT");
+ items.push_back("FANOUT");
+ items.push_back("JUNCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("TRANSITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCableFittingTypeEnum_type = new enumeration_type("IfcCableFittingTypeEnum", 138, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("BUSBARSEGMENT");
+ items.push_back("CABLESEGMENT");
+ items.push_back("CONDUCTORSEGMENT");
+ items.push_back("CONTACTWIRESEGMENT");
+ items.push_back("CORESEGMENT");
+ items.push_back("FIBERSEGMENT");
+ items.push_back("FIBERTUBE");
+ items.push_back("NOTDEFINED");
+ items.push_back("OPTICALCABLESEGMENT");
+ items.push_back("STITCHWIRE");
+ items.push_back("USERDEFINED");
+ items.push_back("WIREPAIRSEGMENT");
+ IFC4X3_ADD2_IfcCableSegmentTypeEnum_type = new enumeration_type("IfcCableSegmentTypeEnum", 141, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("CAISSON");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("WELL");
+ IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type = new enumeration_type("IfcCaissonFoundationTypeEnum", 144, items);
+ }
+ IFC4X3_ADD2_IfcCardinalPointReference_type = new type_declaration("IfcCardinalPointReference", 145, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ADDED");
+ items.push_back("DELETED");
+ items.push_back("MODIFIED");
+ items.push_back("NOCHANGE");
+ items.push_back("NOTDEFINED");
+ IFC4X3_ADD2_IfcChangeActionEnum_type = new enumeration_type("IfcChangeActionEnum", 156, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("AIRCOOLED");
+ items.push_back("HEATRECOVERY");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERCOOLED");
+ IFC4X3_ADD2_IfcChillerTypeEnum_type = new enumeration_type("IfcChillerTypeEnum", 159, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcChimneyTypeEnum_type = new enumeration_type("IfcChimneyTypeEnum", 162, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("DXCOOLINGCOIL");
+ items.push_back("ELECTRICHEATINGCOIL");
+ items.push_back("GASHEATINGCOIL");
+ items.push_back("HYDRONICCOIL");
+ items.push_back("NOTDEFINED");
+ items.push_back("STEAMHEATINGCOIL");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERCOOLINGCOIL");
+ items.push_back("WATERHEATINGCOIL");
+ IFC4X3_ADD2_IfcCoilTypeEnum_type = new enumeration_type("IfcCoilTypeEnum", 176, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("COLUMN");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIERSTEM");
+ items.push_back("PIERSTEM_SEGMENT");
+ items.push_back("PILASTER");
+ items.push_back("STANDCOLUMN");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcColumnTypeEnum_type = new enumeration_type("IfcColumnTypeEnum", 184, items);
+ }
+ {
+ std::vector items; items.reserve(26);
+ items.push_back("ANTENNA");
+ items.push_back("AUTOMATON");
+ items.push_back("COMPUTER");
+ items.push_back("FAX");
+ items.push_back("GATEWAY");
+ items.push_back("INTELLIGENTPERIPHERAL");
+ items.push_back("IPNETWORKEQUIPMENT");
+ items.push_back("LINESIDEELECTRONICUNIT");
+ items.push_back("MODEM");
+ items.push_back("NETWORKAPPLIANCE");
+ items.push_back("NETWORKBRIDGE");
+ items.push_back("NETWORKHUB");
+ items.push_back("NOTDEFINED");
+ items.push_back("OPTICALLINETERMINAL");
+ items.push_back("OPTICALNETWORKUNIT");
+ items.push_back("PRINTER");
+ items.push_back("RADIOBLOCKCENTER");
+ items.push_back("REPEATER");
+ items.push_back("ROUTER");
+ items.push_back("SCANNER");
+ items.push_back("TELECOMMAND");
+ items.push_back("TELEPHONYEXCHANGE");
+ items.push_back("TRANSITIONCOMPONENT");
+ items.push_back("TRANSPONDER");
+ items.push_back("TRANSPORTEQUIPMENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type = new enumeration_type("IfcCommunicationsApplianceTypeEnum", 187, items);
+ }
+ IFC4X3_ADD2_IfcComplexNumber_type = new type_declaration("IfcComplexNumber", 188, new aggregation_type(aggregation_type::array_type, 1, 2, new simple_type(simple_type::real_type)));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("P_COMPLEX");
+ items.push_back("Q_COMPLEX");
+ IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type = new enumeration_type("IfcComplexPropertyTemplateTypeEnum", 191, items);
+ }
+ IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type = new type_declaration("IfcCompoundPlaneAngleMeasure", 196, new aggregation_type(aggregation_type::list_type, 3, 4, new simple_type(simple_type::integer_type)));
+ {
+ std::vector items; items.reserve(17);
+ items.push_back("BOOSTER");
+ items.push_back("DYNAMIC");
+ items.push_back("HERMETIC");
+ items.push_back("NOTDEFINED");
+ items.push_back("OPENTYPE");
+ items.push_back("RECIPROCATING");
+ items.push_back("ROLLINGPISTON");
+ items.push_back("ROTARY");
+ items.push_back("ROTARYVANE");
+ items.push_back("SCROLL");
+ items.push_back("SEMIHERMETIC");
+ items.push_back("SINGLESCREW");
+ items.push_back("SINGLESTAGE");
+ items.push_back("TROCHOIDAL");
+ items.push_back("TWINSCREW");
+ items.push_back("USERDEFINED");
+ items.push_back("WELDEDSHELLHERMETIC");
+ IFC4X3_ADD2_IfcCompressorTypeEnum_type = new enumeration_type("IfcCompressorTypeEnum", 199, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("AIRCOOLED");
+ items.push_back("EVAPORATIVECOOLED");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERCOOLED");
+ items.push_back("WATERCOOLEDBRAZEDPLATE");
+ items.push_back("WATERCOOLEDSHELLCOIL");
+ items.push_back("WATERCOOLEDSHELLTUBE");
+ items.push_back("WATERCOOLEDTUBEINTUBE");
+ IFC4X3_ADD2_IfcCondenserTypeEnum_type = new enumeration_type("IfcCondenserTypeEnum", 202, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("ATEND");
+ items.push_back("ATPATH");
+ items.push_back("ATSTART");
+ items.push_back("NOTDEFINED");
+ IFC4X3_ADD2_IfcConnectionTypeEnum_type = new enumeration_type("IfcConnectionTypeEnum", 210, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ADVISORY");
+ items.push_back("HARD");
+ items.push_back("NOTDEFINED");
+ items.push_back("SOFT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcConstraintEnum_type = new enumeration_type("IfcConstraintEnum", 213, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("DEMOLISHING");
+ items.push_back("EARTHMOVING");
+ items.push_back("ERECTING");
+ items.push_back("HEATING");
+ items.push_back("LIGHTING");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAVING");
+ items.push_back("PUMPING");
+ items.push_back("TRANSPORTING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type = new enumeration_type("IfcConstructionEquipmentResourceTypeEnum", 216, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("AGGREGATES");
+ items.push_back("CONCRETE");
+ items.push_back("DRYWALL");
+ items.push_back("FUEL");
+ items.push_back("GYPSUM");
+ items.push_back("MASONRY");
+ items.push_back("METAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PLASTIC");
+ items.push_back("USERDEFINED");
+ items.push_back("WOOD");
+ IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type = new enumeration_type("IfcConstructionMaterialResourceTypeEnum", 219, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("ASSEMBLY");
+ items.push_back("FORMWORK");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type = new enumeration_type("IfcConstructionProductResourceTypeEnum", 222, items);
+ }
+ IFC4X3_ADD2_IfcContextDependentMeasure_type = new type_declaration("IfcContextDependentMeasure", 226, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("FLOATING");
+ items.push_back("MULTIPOSITION");
+ items.push_back("NOTDEFINED");
+ items.push_back("PROGRAMMABLE");
+ items.push_back("PROPORTIONAL");
+ items.push_back("TWOPOSITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcControllerTypeEnum_type = new enumeration_type("IfcControllerTypeEnum", 231, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("BELTCONVEYOR");
+ items.push_back("BUCKETCONVEYOR");
+ items.push_back("CHUTECONVEYOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("SCREWCONVEYOR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type = new enumeration_type("IfcConveyorSegmentTypeEnum", 236, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("ACTIVE");
+ items.push_back("NOTDEFINED");
+ items.push_back("PASSIVE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCooledBeamTypeEnum_type = new enumeration_type("IfcCooledBeamTypeEnum", 239, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("MECHANICALFORCEDDRAFT");
+ items.push_back("MECHANICALINDUCEDDRAFT");
+ items.push_back("NATURALDRAFT");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type = new enumeration_type("IfcCoolingTowerTypeEnum", 242, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCostItemTypeEnum_type = new enumeration_type("IfcCostItemTypeEnum", 248, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BUDGET");
+ items.push_back("COSTPLAN");
+ items.push_back("ESTIMATE");
+ items.push_back("NOTDEFINED");
+ items.push_back("PRICEDBILLOFQUANTITIES");
+ items.push_back("SCHEDULEOFRATES");
+ items.push_back("TENDER");
+ items.push_back("UNPRICEDBILLOFQUANTITIES");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCostScheduleTypeEnum_type = new enumeration_type("IfcCostScheduleTypeEnum", 250, items);
+ }
+ IFC4X3_ADD2_IfcCountMeasure_type = new type_declaration("IfcCountMeasure", 252, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("ARMOUR");
+ items.push_back("BALLASTBED");
+ items.push_back("CORE");
+ items.push_back("FILTER");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAVEMENT");
+ items.push_back("PROTECTION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCourseTypeEnum_type = new enumeration_type("IfcCourseTypeEnum", 255, items);
+ }
+ {
+ std::vector items; items.reserve(14);
+ items.push_back("CEILING");
+ items.push_back("CLADDING");
+ items.push_back("COPING");
+ items.push_back("FLOORING");
+ items.push_back("INSULATION");
+ items.push_back("MEMBRANE");
+ items.push_back("MOLDING");
+ items.push_back("NOTDEFINED");
+ items.push_back("ROOFING");
+ items.push_back("SKIRTINGBOARD");
+ items.push_back("SLEEVING");
+ items.push_back("TOPPING");
+ items.push_back("USERDEFINED");
+ items.push_back("WRAPPING");
+ IFC4X3_ADD2_IfcCoveringTypeEnum_type = new enumeration_type("IfcCoveringTypeEnum", 258, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("OFFICE");
+ items.push_back("SITE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCrewResourceTypeEnum_type = new enumeration_type("IfcCrewResourceTypeEnum", 261, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcCurtainWallTypeEnum_type = new enumeration_type("IfcCurtainWallTypeEnum", 269, items);
+ }
+ IFC4X3_ADD2_IfcCurvatureMeasure_type = new type_declaration("IfcCurvatureMeasure", 270, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("LINEAR");
+ items.push_back("LOG_LINEAR");
+ items.push_back("LOG_LOG");
+ items.push_back("NOTDEFINED");
+ IFC4X3_ADD2_IfcCurveInterpolationEnum_type = new enumeration_type("IfcCurveInterpolationEnum", 275, items);
+ }
+ {
+ std::vector items; items.reserve(13);
+ items.push_back("BACKDRAFTDAMPER");
+ items.push_back("BALANCINGDAMPER");
+ items.push_back("BLASTDAMPER");
+ items.push_back("CONTROLDAMPER");
+ items.push_back("FIREDAMPER");
+ items.push_back("FIRESMOKEDAMPER");
+ items.push_back("FUMEHOODEXHAUST");
+ items.push_back("GRAVITYDAMPER");
+ items.push_back("GRAVITYRELIEFDAMPER");
+ items.push_back("NOTDEFINED");
+ items.push_back("RELIEFDAMPER");
+ items.push_back("SMOKEDAMPER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDamperTypeEnum_type = new enumeration_type("IfcDamperTypeEnum", 288, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("MEASURED");
+ items.push_back("NOTDEFINED");
+ items.push_back("PREDICTED");
+ items.push_back("SIMULATED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDataOriginEnum_type = new enumeration_type("IfcDataOriginEnum", 289, items);
+ }
+ IFC4X3_ADD2_IfcDate_type = new type_declaration("IfcDate", 290, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcDateTime_type = new type_declaration("IfcDateTime", 291, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcDayInMonthNumber_type = new type_declaration("IfcDayInMonthNumber", 292, new simple_type(simple_type::integer_type));
+ IFC4X3_ADD2_IfcDayInWeekNumber_type = new type_declaration("IfcDayInWeekNumber", 293, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(53);
+ items.push_back("ACCELERATIONUNIT");
+ items.push_back("ANGULARVELOCITYUNIT");
+ items.push_back("AREADENSITYUNIT");
+ items.push_back("COMPOUNDPLANEANGLEUNIT");
+ items.push_back("CURVATUREUNIT");
+ items.push_back("DYNAMICVISCOSITYUNIT");
+ items.push_back("HEATFLUXDENSITYUNIT");
+ items.push_back("HEATINGVALUEUNIT");
+ items.push_back("INTEGERCOUNTRATEUNIT");
+ items.push_back("IONCONCENTRATIONUNIT");
+ items.push_back("ISOTHERMALMOISTURECAPACITYUNIT");
+ items.push_back("KINEMATICVISCOSITYUNIT");
+ items.push_back("LINEARFORCEUNIT");
+ items.push_back("LINEARMOMENTUNIT");
+ items.push_back("LINEARSTIFFNESSUNIT");
+ items.push_back("LINEARVELOCITYUNIT");
+ items.push_back("LUMINOUSINTENSITYDISTRIBUTIONUNIT");
+ items.push_back("MASSDENSITYUNIT");
+ items.push_back("MASSFLOWRATEUNIT");
+ items.push_back("MASSPERLENGTHUNIT");
+ items.push_back("MODULUSOFELASTICITYUNIT");
+ items.push_back("MODULUSOFLINEARSUBGRADEREACTIONUNIT");
+ items.push_back("MODULUSOFROTATIONALSUBGRADEREACTIONUNIT");
+ items.push_back("MODULUSOFSUBGRADEREACTIONUNIT");
+ items.push_back("MOISTUREDIFFUSIVITYUNIT");
+ items.push_back("MOLECULARWEIGHTUNIT");
+ items.push_back("MOMENTOFINERTIAUNIT");
+ items.push_back("PHUNIT");
+ items.push_back("PLANARFORCEUNIT");
+ items.push_back("ROTATIONALFREQUENCYUNIT");
+ items.push_back("ROTATIONALMASSUNIT");
+ items.push_back("ROTATIONALSTIFFNESSUNIT");
+ items.push_back("SECTIONAREAINTEGRALUNIT");
+ items.push_back("SECTIONMODULUSUNIT");
+ items.push_back("SHEARMODULUSUNIT");
+ items.push_back("SOUNDPOWERLEVELUNIT");
+ items.push_back("SOUNDPOWERUNIT");
+ items.push_back("SOUNDPRESSURELEVELUNIT");
+ items.push_back("SOUNDPRESSUREUNIT");
+ items.push_back("SPECIFICHEATCAPACITYUNIT");
+ items.push_back("TEMPERATUREGRADIENTUNIT");
+ items.push_back("TEMPERATURERATEOFCHANGEUNIT");
+ items.push_back("THERMALADMITTANCEUNIT");
+ items.push_back("THERMALCONDUCTANCEUNIT");
+ items.push_back("THERMALEXPANSIONCOEFFICIENTUNIT");
+ items.push_back("THERMALRESISTANCEUNIT");
+ items.push_back("THERMALTRANSMITTANCEUNIT");
+ items.push_back("TORQUEUNIT");
+ items.push_back("USERDEFINED");
+ items.push_back("VAPORPERMEABILITYUNIT");
+ items.push_back("VOLUMETRICFLOWRATEUNIT");
+ items.push_back("WARPINGCONSTANTUNIT");
+ items.push_back("WARPINGMOMENTUNIT");
+ IFC4X3_ADD2_IfcDerivedUnitEnum_type = new enumeration_type("IfcDerivedUnitEnum", 301, items);
+ }
+ IFC4X3_ADD2_IfcDescriptiveMeasure_type = new type_declaration("IfcDescriptiveMeasure", 302, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcDimensionCount_type = new type_declaration("IfcDimensionCount", 304, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NEGATIVE");
+ items.push_back("POSITIVE");
+ IFC4X3_ADD2_IfcDirectionSenseEnum_type = new enumeration_type("IfcDirectionSenseEnum", 306, items);
+ }
+ {
+ std::vector items; items.reserve(23);
+ items.push_back("ANCHORPLATE");
+ items.push_back("BIRDPROTECTION");
+ items.push_back("BRACKET");
+ items.push_back("CABLEARRANGER");
+ items.push_back("ELASTIC_CUSHION");
+ items.push_back("EXPANSION_JOINT_DEVICE");
+ items.push_back("FILLER");
+ items.push_back("FLASHING");
+ items.push_back("INSULATOR");
+ items.push_back("LOCK");
+ items.push_back("NOTDEFINED");
+ items.push_back("PANEL_STRENGTHENING");
+ items.push_back("POINTMACHINEMOUNTINGDEVICE");
+ items.push_back("POINT_MACHINE_LOCKING_DEVICE");
+ items.push_back("RAILBRACE");
+ items.push_back("RAILPAD");
+ items.push_back("RAIL_LUBRICATION");
+ items.push_back("RAIL_MECHANICAL_EQUIPMENT");
+ items.push_back("SHOE");
+ items.push_back("SLIDINGCHAIR");
+ items.push_back("SOUNDABSORPTION");
+ items.push_back("TENSIONINGEQUIPMENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type = new enumeration_type("IfcDiscreteAccessoryTypeEnum", 311, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("CONSUMERUNIT");
+ items.push_back("DISPATCHINGBOARD");
+ items.push_back("DISTRIBUTIONBOARD");
+ items.push_back("DISTRIBUTIONFRAME");
+ items.push_back("MOTORCONTROLCENTRE");
+ items.push_back("NOTDEFINED");
+ items.push_back("SWITCHBOARD");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type = new enumeration_type("IfcDistributionBoardTypeEnum", 314, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("FORMEDDUCT");
+ items.push_back("INSPECTIONCHAMBER");
+ items.push_back("INSPECTIONPIT");
+ items.push_back("MANHOLE");
+ items.push_back("METERCHAMBER");
+ items.push_back("NOTDEFINED");
+ items.push_back("SUMP");
+ items.push_back("TRENCH");
+ items.push_back("USERDEFINED");
+ items.push_back("VALVECHAMBER");
+ IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type = new enumeration_type("IfcDistributionChamberElementTypeEnum", 317, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CABLE");
+ items.push_back("CABLECARRIER");
+ items.push_back("DUCT");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIPE");
+ items.push_back("USERDEFINED");
+ items.push_back("WIRELESS");
+ IFC4X3_ADD2_IfcDistributionPortTypeEnum_type = new enumeration_type("IfcDistributionPortTypeEnum", 326, items);
+ }
+ {
+ std::vector items; items.reserve(51);
+ items.push_back("AIRCONDITIONING");
+ items.push_back("AUDIOVISUAL");
+ items.push_back("CATENARY_SYSTEM");
+ items.push_back("CHEMICAL");
+ items.push_back("CHILLEDWATER");
+ items.push_back("COMMUNICATION");
+ items.push_back("COMPRESSEDAIR");
+ items.push_back("CONDENSERWATER");
+ items.push_back("CONTROL");
+ items.push_back("CONVEYING");
+ items.push_back("DATA");
+ items.push_back("DISPOSAL");
+ items.push_back("DOMESTICCOLDWATER");
+ items.push_back("DOMESTICHOTWATER");
+ items.push_back("DRAINAGE");
+ items.push_back("EARTHING");
+ items.push_back("ELECTRICAL");
+ items.push_back("ELECTROACOUSTIC");
+ items.push_back("EXHAUST");
+ items.push_back("FIREPROTECTION");
+ items.push_back("FIXEDTRANSMISSIONNETWORK");
+ items.push_back("FUEL");
+ items.push_back("GAS");
+ items.push_back("HAZARDOUS");
+ items.push_back("HEATING");
+ items.push_back("LIGHTING");
+ items.push_back("LIGHTNINGPROTECTION");
+ items.push_back("MOBILENETWORK");
+ items.push_back("MONITORINGSYSTEM");
+ items.push_back("MUNICIPALSOLIDWASTE");
+ items.push_back("NOTDEFINED");
+ items.push_back("OIL");
+ items.push_back("OPERATIONAL");
+ items.push_back("OPERATIONALTELEPHONYSYSTEM");
+ items.push_back("OVERHEAD_CONTACTLINE_SYSTEM");
+ items.push_back("POWERGENERATION");
+ items.push_back("RAINWATER");
+ items.push_back("REFRIGERATION");
+ items.push_back("RETURN_CIRCUIT");
+ items.push_back("SECURITY");
+ items.push_back("SEWAGE");
+ items.push_back("SIGNAL");
+ items.push_back("STORMWATER");
+ items.push_back("TELEPHONE");
+ items.push_back("TV");
+ items.push_back("USERDEFINED");
+ items.push_back("VACUUM");
+ items.push_back("VENT");
+ items.push_back("VENTILATION");
+ items.push_back("WASTEWATER");
+ items.push_back("WATERSUPPLY");
+ IFC4X3_ADD2_IfcDistributionSystemEnum_type = new enumeration_type("IfcDistributionSystemEnum", 328, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("CONFIDENTIAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PERSONAL");
+ items.push_back("PUBLIC");
+ items.push_back("RESTRICTED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type = new enumeration_type("IfcDocumentConfidentialityEnum", 329, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("DRAFT");
+ items.push_back("FINAL");
+ items.push_back("FINALDRAFT");
+ items.push_back("NOTDEFINED");
+ items.push_back("REVISION");
+ IFC4X3_ADD2_IfcDocumentStatusEnum_type = new enumeration_type("IfcDocumentStatusEnum", 334, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("DOUBLE_ACTING");
+ items.push_back("FIXEDPANEL");
+ items.push_back("FOLDING");
+ items.push_back("NOTDEFINED");
+ items.push_back("REVOLVING");
+ items.push_back("ROLLINGUP");
+ items.push_back("SLIDING");
+ items.push_back("SWINGING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDoorPanelOperationEnum_type = new enumeration_type("IfcDoorPanelOperationEnum", 337, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("LEFT");
+ items.push_back("MIDDLE");
+ items.push_back("NOTDEFINED");
+ items.push_back("RIGHT");
+ IFC4X3_ADD2_IfcDoorPanelPositionEnum_type = new enumeration_type("IfcDoorPanelPositionEnum", 338, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("BOOM_BARRIER");
+ items.push_back("DOOR");
+ items.push_back("GATE");
+ items.push_back("NOTDEFINED");
+ items.push_back("TRAPDOOR");
+ items.push_back("TURNSTILE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDoorTypeEnum_type = new enumeration_type("IfcDoorTypeEnum", 341, items);
+ }
+ {
+ std::vector items; items.reserve(25);
+ items.push_back("DOUBLE_DOOR_DOUBLE_SWING");
+ items.push_back("DOUBLE_DOOR_FOLDING");
+ items.push_back("DOUBLE_DOOR_LIFTING_VERTICAL");
+ items.push_back("DOUBLE_DOOR_SINGLE_SWING");
+ items.push_back("DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT");
+ items.push_back("DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT");
+ items.push_back("DOUBLE_DOOR_SLIDING");
+ items.push_back("DOUBLE_SWING_LEFT");
+ items.push_back("DOUBLE_SWING_RIGHT");
+ items.push_back("FOLDING_TO_LEFT");
+ items.push_back("FOLDING_TO_RIGHT");
+ items.push_back("LIFTING_HORIZONTAL");
+ items.push_back("LIFTING_VERTICAL_LEFT");
+ items.push_back("LIFTING_VERTICAL_RIGHT");
+ items.push_back("NOTDEFINED");
+ items.push_back("REVOLVING");
+ items.push_back("REVOLVING_VERTICAL");
+ items.push_back("ROLLINGUP");
+ items.push_back("SINGLE_SWING_LEFT");
+ items.push_back("SINGLE_SWING_RIGHT");
+ items.push_back("SLIDING_TO_LEFT");
+ items.push_back("SLIDING_TO_RIGHT");
+ items.push_back("SWING_FIXED_LEFT");
+ items.push_back("SWING_FIXED_RIGHT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDoorTypeOperationEnum_type = new enumeration_type("IfcDoorTypeOperationEnum", 342, items);
+ }
+ IFC4X3_ADD2_IfcDoseEquivalentMeasure_type = new type_declaration("IfcDoseEquivalentMeasure", 343, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BEND");
+ items.push_back("CONNECTOR");
+ items.push_back("ENTRY");
+ items.push_back("EXIT");
+ items.push_back("JUNCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("OBSTRUCTION");
+ items.push_back("TRANSITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDuctFittingTypeEnum_type = new enumeration_type("IfcDuctFittingTypeEnum", 348, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("FLEXIBLESEGMENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("RIGIDSEGMENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type = new enumeration_type("IfcDuctSegmentTypeEnum", 351, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("FLATOVAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("RECTANGULAR");
+ items.push_back("ROUND");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type = new enumeration_type("IfcDuctSilencerTypeEnum", 354, items);
+ }
+ IFC4X3_ADD2_IfcDuration_type = new type_declaration("IfcDuration", 355, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcDynamicViscosityMeasure_type = new type_declaration("IfcDynamicViscosityMeasure", 356, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("BASE_EXCAVATION");
+ items.push_back("CUT");
+ items.push_back("DREDGING");
+ items.push_back("EXCAVATION");
+ items.push_back("NOTDEFINED");
+ items.push_back("OVEREXCAVATION");
+ items.push_back("PAVEMENTMILLING");
+ items.push_back("STEPEXCAVATION");
+ items.push_back("TOPSOILREMOVAL");
+ items.push_back("TRENCH");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type = new enumeration_type("IfcEarthworksCutTypeEnum", 358, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BACKFILL");
+ items.push_back("COUNTERWEIGHT");
+ items.push_back("EMBANKMENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("SLOPEFILL");
+ items.push_back("SUBGRADE");
+ items.push_back("SUBGRADEBED");
+ items.push_back("TRANSITIONSECTION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type = new enumeration_type("IfcEarthworksFillTypeEnum", 361, items);
+ }
+ {
+ std::vector items; items.reserve(18);
+ items.push_back("DISHWASHER");
+ items.push_back("ELECTRICCOOKER");
+ items.push_back("FREESTANDINGELECTRICHEATER");
+ items.push_back("FREESTANDINGFAN");
+ items.push_back("FREESTANDINGWATERCOOLER");
+ items.push_back("FREESTANDINGWATERHEATER");
+ items.push_back("FREEZER");
+ items.push_back("FRIDGE_FREEZER");
+ items.push_back("HANDDRYER");
+ items.push_back("KITCHENMACHINE");
+ items.push_back("MICROWAVE");
+ items.push_back("NOTDEFINED");
+ items.push_back("PHOTOCOPIER");
+ items.push_back("REFRIGERATOR");
+ items.push_back("TUMBLEDRYER");
+ items.push_back("USERDEFINED");
+ items.push_back("VENDINGMACHINE");
+ items.push_back("WASHINGMACHINE");
+ IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type = new enumeration_type("IfcElectricApplianceTypeEnum", 367, items);
+ }
+ IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type = new type_declaration("IfcElectricCapacitanceMeasure", 368, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcElectricChargeMeasure_type = new type_declaration("IfcElectricChargeMeasure", 369, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcElectricConductanceMeasure_type = new type_declaration("IfcElectricConductanceMeasure", 370, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcElectricCurrentMeasure_type = new type_declaration("IfcElectricCurrentMeasure", 371, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("CONSUMERUNIT");
+ items.push_back("DISTRIBUTIONBOARD");
+ items.push_back("MOTORCONTROLCENTRE");
+ items.push_back("NOTDEFINED");
+ items.push_back("SWITCHBOARD");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type = new enumeration_type("IfcElectricDistributionBoardTypeEnum", 374, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("BATTERY");
+ items.push_back("CAPACITOR");
+ items.push_back("CAPACITORBANK");
+ items.push_back("COMPENSATOR");
+ items.push_back("HARMONICFILTER");
+ items.push_back("INDUCTOR");
+ items.push_back("INDUCTORBANK");
+ items.push_back("NOTDEFINED");
+ items.push_back("RECHARGER");
+ items.push_back("UPS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type = new enumeration_type("IfcElectricFlowStorageDeviceTypeEnum", 377, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("ELECTRONICFILTER");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type = new enumeration_type("IfcElectricFlowTreatmentDeviceTypeEnum", 380, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("CHP");
+ items.push_back("ENGINEGENERATOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("STANDALONE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type = new enumeration_type("IfcElectricGeneratorTypeEnum", 383, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("DC");
+ items.push_back("INDUCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("POLYPHASE");
+ items.push_back("RELUCTANCESYNCHRONOUS");
+ items.push_back("SYNCHRONOUS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricMotorTypeEnum_type = new enumeration_type("IfcElectricMotorTypeEnum", 386, items);
+ }
+ IFC4X3_ADD2_IfcElectricResistanceMeasure_type = new type_declaration("IfcElectricResistanceMeasure", 387, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("NOTDEFINED");
+ items.push_back("RELAY");
+ items.push_back("TIMECLOCK");
+ items.push_back("TIMEDELAY");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type = new enumeration_type("IfcElectricTimeControlTypeEnum", 390, items);
+ }
+ IFC4X3_ADD2_IfcElectricVoltageMeasure_type = new type_declaration("IfcElectricVoltageMeasure", 391, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(30);
+ items.push_back("ABUTMENT");
+ items.push_back("ACCESSORY_ASSEMBLY");
+ items.push_back("ARCH");
+ items.push_back("BEAM_GRID");
+ items.push_back("BRACED_FRAME");
+ items.push_back("CROSS_BRACING");
+ items.push_back("DECK");
+ items.push_back("DILATATIONPANEL");
+ items.push_back("ENTRANCEWORKS");
+ items.push_back("GIRDER");
+ items.push_back("GRID");
+ items.push_back("MAST");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIER");
+ items.push_back("PYLON");
+ items.push_back("RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY");
+ items.push_back("REINFORCEMENT_UNIT");
+ items.push_back("RIGID_FRAME");
+ items.push_back("SHELTER");
+ items.push_back("SIGNALASSEMBLY");
+ items.push_back("SLAB_FIELD");
+ items.push_back("SUMPBUSTER");
+ items.push_back("SUPPORTINGASSEMBLY");
+ items.push_back("SUSPENSIONASSEMBLY");
+ items.push_back("TRACKPANEL");
+ items.push_back("TRACTION_SWITCHING_ASSEMBLY");
+ items.push_back("TRAFFIC_CALMING_DEVICE");
+ items.push_back("TRUSS");
+ items.push_back("TURNOUTPANEL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type = new enumeration_type("IfcElementAssemblyTypeEnum", 396, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("COMPLEX");
+ items.push_back("ELEMENT");
+ items.push_back("PARTIAL");
+ IFC4X3_ADD2_IfcElementCompositionEnum_type = new enumeration_type("IfcElementCompositionEnum", 399, items);
+ }
+ IFC4X3_ADD2_IfcEnergyMeasure_type = new type_declaration("IfcEnergyMeasure", 406, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("EXTERNALCOMBUSTION");
+ items.push_back("INTERNALCOMBUSTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEngineTypeEnum_type = new enumeration_type("IfcEngineTypeEnum", 409, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("DIRECTEVAPORATIVEAIRWASHER");
+ items.push_back("DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER");
+ items.push_back("DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER");
+ items.push_back("DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER");
+ items.push_back("DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER");
+ items.push_back("INDIRECTDIRECTCOMBINATION");
+ items.push_back("INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER");
+ items.push_back("INDIRECTEVAPORATIVEPACKAGEAIRCOOLER");
+ items.push_back("INDIRECTEVAPORATIVEWETCOIL");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type = new enumeration_type("IfcEvaporativeCoolerTypeEnum", 412, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("DIRECTEXPANSION");
+ items.push_back("DIRECTEXPANSIONBRAZEDPLATE");
+ items.push_back("DIRECTEXPANSIONSHELLANDTUBE");
+ items.push_back("DIRECTEXPANSIONTUBEINTUBE");
+ items.push_back("FLOODEDSHELLANDTUBE");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHELLANDCOIL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEvaporatorTypeEnum_type = new enumeration_type("IfcEvaporatorTypeEnum", 415, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("EVENTCOMPLEX");
+ items.push_back("EVENTMESSAGE");
+ items.push_back("EVENTRULE");
+ items.push_back("EVENTTIME");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEventTriggerTypeEnum_type = new enumeration_type("IfcEventTriggerTypeEnum", 418, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ENDEVENT");
+ items.push_back("INTERMEDIATEEVENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("STARTEVENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcEventTypeEnum_type = new enumeration_type("IfcEventTypeEnum", 420, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("EXTERNAL");
+ items.push_back("EXTERNAL_EARTH");
+ items.push_back("EXTERNAL_FIRE");
+ items.push_back("EXTERNAL_WATER");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type = new enumeration_type("IfcExternalSpatialElementTypeEnum", 429, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("ABOVEGROUND");
+ items.push_back("BELOWGROUND");
+ items.push_back("JUNCTION");
+ items.push_back("LEVELCROSSING");
+ items.push_back("NOTDEFINED");
+ items.push_back("SEGMENT");
+ items.push_back("SUBSTRUCTURE");
+ items.push_back("SUPERSTRUCTURE");
+ items.push_back("TERMINAL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type = new enumeration_type("IfcFacilityPartCommonTypeEnum", 443, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("LATERAL");
+ items.push_back("LONGITUDINAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("REGION");
+ items.push_back("USERDEFINED");
+ items.push_back("VERTICAL");
+ IFC4X3_ADD2_IfcFacilityUsageEnum_type = new enumeration_type("IfcFacilityUsageEnum", 444, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("CENTRIFUGALAIRFOIL");
+ items.push_back("CENTRIFUGALBACKWARDINCLINEDCURVED");
+ items.push_back("CENTRIFUGALFORWARDCURVED");
+ items.push_back("CENTRIFUGALRADIAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PROPELLORAXIAL");
+ items.push_back("TUBEAXIAL");
+ items.push_back("USERDEFINED");
+ items.push_back("VANEAXIAL");
+ IFC4X3_ADD2_IfcFanTypeEnum_type = new enumeration_type("IfcFanTypeEnum", 448, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("GLUE");
+ items.push_back("MORTAR");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("WELD");
+ IFC4X3_ADD2_IfcFastenerTypeEnum_type = new enumeration_type("IfcFastenerTypeEnum", 451, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("AIRPARTICLEFILTER");
+ items.push_back("COMPRESSEDAIRFILTER");
+ items.push_back("NOTDEFINED");
+ items.push_back("ODORFILTER");
+ items.push_back("OILFILTER");
+ items.push_back("STRAINER");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERFILTER");
+ IFC4X3_ADD2_IfcFilterTypeEnum_type = new enumeration_type("IfcFilterTypeEnum", 461, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("BREECHINGINLET");
+ items.push_back("FIREHYDRANT");
+ items.push_back("FIREMONITOR");
+ items.push_back("HOSEREEL");
+ items.push_back("NOTDEFINED");
+ items.push_back("SPRINKLER");
+ items.push_back("SPRINKLERDEFLECTOR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type = new enumeration_type("IfcFireSuppressionTerminalTypeEnum", 464, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("SINK");
+ items.push_back("SOURCE");
+ items.push_back("SOURCEANDSINK");
+ IFC4X3_ADD2_IfcFlowDirectionEnum_type = new enumeration_type("IfcFlowDirectionEnum", 468, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("AMMETER");
+ items.push_back("COMBINED");
+ items.push_back("FREQUENCYMETER");
+ items.push_back("NOTDEFINED");
+ items.push_back("PHASEANGLEMETER");
+ items.push_back("POWERFACTORMETER");
+ items.push_back("PRESSUREGAUGE");
+ items.push_back("THERMOMETER");
+ items.push_back("USERDEFINED");
+ items.push_back("VOLTMETER");
+ items.push_back("VOLTMETER_PEAK");
+ items.push_back("VOLTMETER_RMS");
+ IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type = new enumeration_type("IfcFlowInstrumentTypeEnum", 473, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("ENERGYMETER");
+ items.push_back("GASMETER");
+ items.push_back("NOTDEFINED");
+ items.push_back("OILMETER");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERMETER");
+ IFC4X3_ADD2_IfcFlowMeterTypeEnum_type = new enumeration_type("IfcFlowMeterTypeEnum", 476, items);
+ }
+ IFC4X3_ADD2_IfcFontStyle_type = new type_declaration("IfcFontStyle", 487, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcFontVariant_type = new type_declaration("IfcFontVariant", 488, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcFontWeight_type = new type_declaration("IfcFontWeight", 489, new simple_type(simple_type::string_type));
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CAISSON_FOUNDATION");
+ items.push_back("FOOTING_BEAM");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAD_FOOTING");
+ items.push_back("PILE_CAP");
+ items.push_back("STRIP_FOOTING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcFootingTypeEnum_type = new enumeration_type("IfcFootingTypeEnum", 492, items);
+ }
+ IFC4X3_ADD2_IfcForceMeasure_type = new type_declaration("IfcForceMeasure", 493, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcFrequencyMeasure_type = new type_declaration("IfcFrequencyMeasure", 494, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("BED");
+ items.push_back("CHAIR");
+ items.push_back("DESK");
+ items.push_back("FILECABINET");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHELF");
+ items.push_back("SOFA");
+ items.push_back("TABLE");
+ items.push_back("TECHNICALCABINET");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcFurnitureTypeEnum_type = new enumeration_type("IfcFurnitureTypeEnum", 499, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("NOTDEFINED");
+ items.push_back("SOIL_BORING_POINT");
+ items.push_back("TERRAIN");
+ items.push_back("USERDEFINED");
+ items.push_back("VEGETATION");
+ IFC4X3_ADD2_IfcGeographicElementTypeEnum_type = new enumeration_type("IfcGeographicElementTypeEnum", 503, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("ELEVATION_VIEW");
+ items.push_back("GRAPH_VIEW");
+ items.push_back("MODEL_VIEW");
+ items.push_back("NOTDEFINED");
+ items.push_back("PLAN_VIEW");
+ items.push_back("REFLECTED_PLAN_VIEW");
+ items.push_back("SECTION_VIEW");
+ items.push_back("SKETCH_VIEW");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcGeometricProjectionEnum_type = new enumeration_type("IfcGeometricProjectionEnum", 505, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("NOTDEFINED");
+ items.push_back("SOLID");
+ items.push_back("USERDEFINED");
+ items.push_back("VOID");
+ items.push_back("WATER");
+ IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type = new enumeration_type("IfcGeotechnicalStratumTypeEnum", 516, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("GLOBAL_COORDS");
+ items.push_back("LOCAL_COORDS");
+ IFC4X3_ADD2_IfcGlobalOrLocalEnum_type = new enumeration_type("IfcGlobalOrLocalEnum", 518, items);
+ }
+ IFC4X3_ADD2_IfcGloballyUniqueId_type = new type_declaration("IfcGloballyUniqueId", 517, new simple_type(simple_type::string_type));
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("IRREGULAR");
+ items.push_back("NOTDEFINED");
+ items.push_back("RADIAL");
+ items.push_back("RECTANGULAR");
+ items.push_back("TRIANGULAR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcGridTypeEnum_type = new enumeration_type("IfcGridTypeEnum", 524, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("NOTDEFINED");
+ items.push_back("PLATE");
+ items.push_back("SHELLANDTUBE");
+ items.push_back("TURNOUTHEATING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type = new enumeration_type("IfcHeatExchangerTypeEnum", 530, items);
+ }
+ IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type = new type_declaration("IfcHeatFluxDensityMeasure", 531, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcHeatingValueMeasure_type = new type_declaration("IfcHeatingValueMeasure", 532, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(15);
+ items.push_back("ADIABATICAIRWASHER");
+ items.push_back("ADIABATICATOMIZING");
+ items.push_back("ADIABATICCOMPRESSEDAIRNOZZLE");
+ items.push_back("ADIABATICPAN");
+ items.push_back("ADIABATICRIGIDMEDIA");
+ items.push_back("ADIABATICULTRASONIC");
+ items.push_back("ADIABATICWETTEDELEMENT");
+ items.push_back("ASSISTEDBUTANE");
+ items.push_back("ASSISTEDELECTRIC");
+ items.push_back("ASSISTEDNATURALGAS");
+ items.push_back("ASSISTEDPROPANE");
+ items.push_back("ASSISTEDSTEAM");
+ items.push_back("NOTDEFINED");
+ items.push_back("STEAMINJECTION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcHumidifierTypeEnum_type = new enumeration_type("IfcHumidifierTypeEnum", 535, items);
+ }
+ IFC4X3_ADD2_IfcIdentifier_type = new type_declaration("IfcIdentifier", 536, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcIlluminanceMeasure_type = new type_declaration("IfcIlluminanceMeasure", 537, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("BUMPER");
+ items.push_back("CRASHCUSHION");
+ items.push_back("DAMPINGSYSTEM");
+ items.push_back("FENDER");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type = new enumeration_type("IfcImpactProtectionDeviceTypeEnum", 541, items);
+ }
+ IFC4X3_ADD2_IfcInductanceMeasure_type = new type_declaration("IfcInductanceMeasure", 549, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcInteger_type = new type_declaration("IfcInteger", 550, new simple_type(simple_type::integer_type));
+ IFC4X3_ADD2_IfcIntegerCountRateMeasure_type = new type_declaration("IfcIntegerCountRateMeasure", 551, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("CYCLONIC");
+ items.push_back("GREASE");
+ items.push_back("NOTDEFINED");
+ items.push_back("OIL");
+ items.push_back("PETROL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcInterceptorTypeEnum_type = new enumeration_type("IfcInterceptorTypeEnum", 554, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("EXTERNAL");
+ items.push_back("EXTERNAL_EARTH");
+ items.push_back("EXTERNAL_FIRE");
+ items.push_back("EXTERNAL_WATER");
+ items.push_back("INTERNAL");
+ items.push_back("NOTDEFINED");
+ IFC4X3_ADD2_IfcInternalOrExternalEnum_type = new enumeration_type("IfcInternalOrExternalEnum", 556, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ASSETINVENTORY");
+ items.push_back("FURNITUREINVENTORY");
+ items.push_back("NOTDEFINED");
+ items.push_back("SPACEINVENTORY");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcInventoryTypeEnum_type = new enumeration_type("IfcInventoryTypeEnum", 559, items);
+ }
+ IFC4X3_ADD2_IfcIonConcentrationMeasure_type = new type_declaration("IfcIonConcentrationMeasure", 560, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type = new type_declaration("IfcIsothermalMoistureCapacityMeasure", 564, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("DATA");
+ items.push_back("NOTDEFINED");
+ items.push_back("POWER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type = new enumeration_type("IfcJunctionBoxTypeEnum", 567, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcKerbTypeEnum_type = new enumeration_type("IfcKerbTypeEnum", 570, items);
+ }
+ IFC4X3_ADD2_IfcKinematicViscosityMeasure_type = new type_declaration("IfcKinematicViscosityMeasure", 571, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("PIECEWISE_BEZIER_KNOTS");
+ items.push_back("QUASI_UNIFORM_KNOTS");
+ items.push_back("UNIFORM_KNOTS");
+ items.push_back("UNSPECIFIED");
+ IFC4X3_ADD2_IfcKnotType_type = new enumeration_type("IfcKnotType", 572, items);
+ }
+ IFC4X3_ADD2_IfcLabel_type = new type_declaration("IfcLabel", 573, new simple_type(simple_type::string_type));
+ {
+ std::vector items; items.reserve(21);
+ items.push_back("ADMINISTRATION");
+ items.push_back("CARPENTRY");
+ items.push_back("CLEANING");
+ items.push_back("CONCRETE");
+ items.push_back("DRYWALL");
+ items.push_back("ELECTRIC");
+ items.push_back("FINISHING");
+ items.push_back("FLOORING");
+ items.push_back("GENERAL");
+ items.push_back("HVAC");
+ items.push_back("LANDSCAPING");
+ items.push_back("MASONRY");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAINTING");
+ items.push_back("PAVING");
+ items.push_back("PLUMBING");
+ items.push_back("ROOFING");
+ items.push_back("SITEGRADING");
+ items.push_back("STEELWORK");
+ items.push_back("SURVEYING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcLaborResourceTypeEnum_type = new enumeration_type("IfcLaborResourceTypeEnum", 576, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("COMPACTFLUORESCENT");
+ items.push_back("FLUORESCENT");
+ items.push_back("HALOGEN");
+ items.push_back("HIGHPRESSUREMERCURY");
+ items.push_back("HIGHPRESSURESODIUM");
+ items.push_back("LED");
+ items.push_back("METALHALIDE");
+ items.push_back("NOTDEFINED");
+ items.push_back("OLED");
+ items.push_back("TUNGSTENFILAMENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcLampTypeEnum_type = new enumeration_type("IfcLampTypeEnum", 580, items);
+ }
+ IFC4X3_ADD2_IfcLanguageId_type = new type_declaration("IfcLanguageId", 581, new named_type(IFC4X3_ADD2_IfcIdentifier_type));
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("AXIS1");
+ items.push_back("AXIS2");
+ items.push_back("AXIS3");
+ IFC4X3_ADD2_IfcLayerSetDirectionEnum_type = new enumeration_type("IfcLayerSetDirectionEnum", 583, items);
+ }
+ IFC4X3_ADD2_IfcLengthMeasure_type = new type_declaration("IfcLengthMeasure", 584, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("TYPE_A");
+ items.push_back("TYPE_B");
+ items.push_back("TYPE_C");
+ IFC4X3_ADD2_IfcLightDistributionCurveEnum_type = new enumeration_type("IfcLightDistributionCurveEnum", 588, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("COMPACTFLUORESCENT");
+ items.push_back("FLUORESCENT");
+ items.push_back("HIGHPRESSUREMERCURY");
+ items.push_back("HIGHPRESSURESODIUM");
+ items.push_back("LIGHTEMITTINGDIODE");
+ items.push_back("LOWPRESSURESODIUM");
+ items.push_back("LOWVOLTAGEHALOGEN");
+ items.push_back("MAINVOLTAGEHALOGEN");
+ items.push_back("METALHALIDE");
+ items.push_back("NOTDEFINED");
+ items.push_back("TUNGSTENFILAMENT");
+ IFC4X3_ADD2_IfcLightEmissionSourceEnum_type = new enumeration_type("IfcLightEmissionSourceEnum", 591, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("DIRECTIONSOURCE");
+ items.push_back("NOTDEFINED");
+ items.push_back("POINTSOURCE");
+ items.push_back("SECURITYLIGHTING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcLightFixtureTypeEnum_type = new enumeration_type("IfcLightFixtureTypeEnum", 594, items);
+ }
+ IFC4X3_ADD2_IfcLinearForceMeasure_type = new type_declaration("IfcLinearForceMeasure", 604, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcLinearMomentMeasure_type = new type_declaration("IfcLinearMomentMeasure", 605, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcLinearStiffnessMeasure_type = new type_declaration("IfcLinearStiffnessMeasure", 608, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcLinearVelocityMeasure_type = new type_declaration("IfcLinearVelocityMeasure", 609, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("HOSEREEL");
+ items.push_back("LOADINGARM");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type = new enumeration_type("IfcLiquidTerminalTypeEnum", 613, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("LOAD_CASE");
+ items.push_back("LOAD_COMBINATION");
+ items.push_back("LOAD_GROUP");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcLoadGroupTypeEnum_type = new enumeration_type("IfcLoadGroupTypeEnum", 614, items);
+ }
+ IFC4X3_ADD2_IfcLogical_type = new type_declaration("IfcLogical", 616, new simple_type(simple_type::logical_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("LOGICALAND");
+ items.push_back("LOGICALNOTAND");
+ items.push_back("LOGICALNOTOR");
+ items.push_back("LOGICALOR");
+ items.push_back("LOGICALXOR");
+ IFC4X3_ADD2_IfcLogicalOperatorEnum_type = new enumeration_type("IfcLogicalOperatorEnum", 617, items);
+ }
+ IFC4X3_ADD2_IfcLuminousFluxMeasure_type = new type_declaration("IfcLuminousFluxMeasure", 620, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type = new type_declaration("IfcLuminousIntensityDistributionMeasure", 621, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcLuminousIntensityMeasure_type = new type_declaration("IfcLuminousIntensityMeasure", 622, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type = new type_declaration("IfcMagneticFluxDensityMeasure", 623, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMagneticFluxMeasure_type = new type_declaration("IfcMagneticFluxMeasure", 624, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(21);
+ items.push_back("BARRIERBEACH");
+ items.push_back("BREAKWATER");
+ items.push_back("CANAL");
+ items.push_back("DRYDOCK");
+ items.push_back("FLOATINGDOCK");
+ items.push_back("HYDROLIFT");
+ items.push_back("JETTY");
+ items.push_back("LAUNCHRECOVERY");
+ items.push_back("MARINEDEFENCE");
+ items.push_back("NAVIGATIONALCHANNEL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PORT");
+ items.push_back("QUAY");
+ items.push_back("REVETMENT");
+ items.push_back("SHIPLIFT");
+ items.push_back("SHIPLOCK");
+ items.push_back("SHIPYARD");
+ items.push_back("SLIPWAY");
+ items.push_back("USERDEFINED");
+ items.push_back("WATERWAY");
+ items.push_back("WATERWAYSHIPLIFT");
+ IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type = new enumeration_type("IfcMarineFacilityTypeEnum", 630, items);
+ }
+ {
+ std::vector items; items.reserve(26);
+ items.push_back("ABOVEWATERLINE");
+ items.push_back("ANCHORAGE");
+ items.push_back("APPROACHCHANNEL");
+ items.push_back("BELOWWATERLINE");
+ items.push_back("BERTHINGSTRUCTURE");
+ items.push_back("CHAMBER");
+ items.push_back("CILL_LEVEL");
+ items.push_back("COPELEVEL");
+ items.push_back("CORE");
+ items.push_back("CREST");
+ items.push_back("GATEHEAD");
+ items.push_back("GUDINGSTRUCTURE");
+ items.push_back("HIGHWATERLINE");
+ items.push_back("LANDFIELD");
+ items.push_back("LEEWARDSIDE");
+ items.push_back("LOWWATERLINE");
+ items.push_back("MANUFACTURING");
+ items.push_back("NAVIGATIONALAREA");
+ items.push_back("NOTDEFINED");
+ items.push_back("PROTECTION");
+ items.push_back("SHIPTRANSFER");
+ items.push_back("STORAGEAREA");
+ items.push_back("USERDEFINED");
+ items.push_back("VEHICLESERVICING");
+ items.push_back("WATERFIELD");
+ items.push_back("WEATHERSIDE");
+ IFC4X3_ADD2_IfcMarinePartTypeEnum_type = new enumeration_type("IfcMarinePartTypeEnum", 632, items);
+ }
+ IFC4X3_ADD2_IfcMassDensityMeasure_type = new type_declaration("IfcMassDensityMeasure", 633, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMassFlowRateMeasure_type = new type_declaration("IfcMassFlowRateMeasure", 634, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMassMeasure_type = new type_declaration("IfcMassMeasure", 635, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMassPerLengthMeasure_type = new type_declaration("IfcMassPerLengthMeasure", 636, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(17);
+ items.push_back("ANCHORBOLT");
+ items.push_back("BOLT");
+ items.push_back("CHAIN");
+ items.push_back("COUPLER");
+ items.push_back("DOWEL");
+ items.push_back("NAIL");
+ items.push_back("NAILPLATE");
+ items.push_back("NOTDEFINED");
+ items.push_back("RAILFASTENING");
+ items.push_back("RAILJOINT");
+ items.push_back("RIVET");
+ items.push_back("ROPE");
+ items.push_back("SCREW");
+ items.push_back("SHEARCONNECTOR");
+ items.push_back("STAPLE");
+ items.push_back("STUDSHEARCONNECTOR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type = new enumeration_type("IfcMechanicalFastenerTypeEnum", 661, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("AIRSTATION");
+ items.push_back("FEEDAIRUNIT");
+ items.push_back("NOTDEFINED");
+ items.push_back("OXYGENGENERATOR");
+ items.push_back("OXYGENPLANT");
+ items.push_back("USERDEFINED");
+ items.push_back("VACUUMSTATION");
+ IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type = new enumeration_type("IfcMedicalDeviceTypeEnum", 664, items);
+ }
+ {
+ std::vector items; items.reserve(21);
+ items.push_back("ARCH_SEGMENT");
+ items.push_back("BRACE");
+ items.push_back("CHORD");
+ items.push_back("COLLAR");
+ items.push_back("MEMBER");
+ items.push_back("MULLION");
+ items.push_back("NOTDEFINED");
+ items.push_back("PLATE");
+ items.push_back("POST");
+ items.push_back("PURLIN");
+ items.push_back("RAFTER");
+ items.push_back("STAY_CABLE");
+ items.push_back("STIFFENING_RIB");
+ items.push_back("STRINGER");
+ items.push_back("STRUCTURALCABLE");
+ items.push_back("STRUT");
+ items.push_back("STUD");
+ items.push_back("SUSPENDER");
+ items.push_back("SUSPENSION_CABLE");
+ items.push_back("TIEBAR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcMemberTypeEnum_type = new enumeration_type("IfcMemberTypeEnum", 667, items);
+ }
+ {
+ std::vector items; items.reserve(15);
+ items.push_back("ACCESSPOINT");
+ items.push_back("BASEBANDUNIT");
+ items.push_back("BASETRANSCEIVERSTATION");
+ items.push_back("E_UTRAN_NODE_B");
+ items.push_back("GATEWAY_GPRS_SUPPORT_NODE");
+ items.push_back("MASTERUNIT");
+ items.push_back("MOBILESWITCHINGCENTER");
+ items.push_back("MSCSERVER");
+ items.push_back("NOTDEFINED");
+ items.push_back("PACKETCONTROLUNIT");
+ items.push_back("REMOTERADIOUNIT");
+ items.push_back("REMOTEUNIT");
+ items.push_back("SERVICE_GPRS_SUPPORT_NODE");
+ items.push_back("SUBSCRIBERSERVER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type = new enumeration_type("IfcMobileTelecommunicationsApplianceTypeEnum", 673, items);
+ }
+ IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type = new type_declaration("IfcModulusOfElasticityMeasure", 674, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type = new type_declaration("IfcModulusOfLinearSubgradeReactionMeasure", 675, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type = new type_declaration("IfcModulusOfRotationalSubgradeReactionMeasure", 676, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcBoolean_type);
+ items.push_back(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type);
+ IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type = new select_type("IfcModulusOfRotationalSubgradeReactionSelect", 677, items);
+ }
+ IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type = new type_declaration("IfcModulusOfSubgradeReactionMeasure", 678, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcBoolean_type);
+ items.push_back(IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type);
+ IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type = new select_type("IfcModulusOfSubgradeReactionSelect", 679, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcBoolean_type);
+ items.push_back(IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type);
+ IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type = new select_type("IfcModulusOfTranslationalSubgradeReactionSelect", 680, items);
+ }
+ IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type = new type_declaration("IfcMoistureDiffusivityMeasure", 681, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMolecularWeightMeasure_type = new type_declaration("IfcMolecularWeightMeasure", 682, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type = new type_declaration("IfcMomentOfInertiaMeasure", 683, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMonetaryMeasure_type = new type_declaration("IfcMonetaryMeasure", 684, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcMonthInYearNumber_type = new type_declaration("IfcMonthInYearNumber", 686, new simple_type(simple_type::integer_type));
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("BOLLARD");
+ items.push_back("LINETENSIONER");
+ items.push_back("MAGNETICDEVICE");
+ items.push_back("MOORINGHOOKS");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("VACUUMDEVICE");
+ IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type = new enumeration_type("IfcMooringDeviceTypeEnum", 689, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("BELTDRIVE");
+ items.push_back("COUPLING");
+ items.push_back("DIRECTDRIVE");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type = new enumeration_type("IfcMotorConnectionTypeEnum", 692, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("BEACON");
+ items.push_back("BUOY");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcNavigationElementTypeEnum_type = new enumeration_type("IfcNavigationElementTypeEnum", 696, items);
+ }
+ IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type = new type_declaration("IfcNonNegativeLengthMeasure", 697, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type));
+ IFC4X3_ADD2_IfcNumericMeasure_type = new type_declaration("IfcNumericMeasure", 699, new simple_type(simple_type::number_type));
+ {
+ std::vector items; items.reserve(13);
+ items.push_back("CODECOMPLIANCE");
+ items.push_back("CODEWAIVER");
+ items.push_back("DESIGNINTENT");
+ items.push_back("EXTERNAL");
+ items.push_back("HEALTHANDSAFETY");
+ items.push_back("MERGECONFLICT");
+ items.push_back("MODELVIEW");
+ items.push_back("NOTDEFINED");
+ items.push_back("PARAMETER");
+ items.push_back("REQUIREMENT");
+ items.push_back("SPECIFICATION");
+ items.push_back("TRIGGERCONDITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcObjectiveEnum_type = new enumeration_type("IfcObjectiveEnum", 703, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("ASSIGNEE");
+ items.push_back("ASSIGNOR");
+ items.push_back("LESSEE");
+ items.push_back("LESSOR");
+ items.push_back("LETTINGAGENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("OWNER");
+ items.push_back("TENANT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcOccupantTypeEnum_type = new enumeration_type("IfcOccupantTypeEnum", 707, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("OPENING");
+ items.push_back("RECESS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcOpeningElementTypeEnum_type = new enumeration_type("IfcOpeningElementTypeEnum", 714, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("AUDIOVISUALOUTLET");
+ items.push_back("COMMUNICATIONSOUTLET");
+ items.push_back("DATAOUTLET");
+ items.push_back("NOTDEFINED");
+ items.push_back("POWEROUTLET");
+ items.push_back("TELEPHONEOUTLET");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcOutletTypeEnum_type = new enumeration_type("IfcOutletTypeEnum", 722, items);
+ }
+ IFC4X3_ADD2_IfcPHMeasure_type = new type_declaration("IfcPHMeasure", 739, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcParameterValue_type = new type_declaration("IfcParameterValue", 725, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("FLEXIBLE");
+ items.push_back("NOTDEFINED");
+ items.push_back("RIGID");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPavementTypeEnum_type = new enumeration_type("IfcPavementTypeEnum", 729, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type = new enumeration_type("IfcPerformanceHistoryTypeEnum", 732, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("GRILL");
+ items.push_back("LOUVER");
+ items.push_back("NOTDEFINED");
+ items.push_back("SCREEN");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type = new enumeration_type("IfcPermeableCoveringOperationEnum", 733, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("ACCESS");
+ items.push_back("BUILDING");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("WORK");
+ IFC4X3_ADD2_IfcPermitTypeEnum_type = new enumeration_type("IfcPermitTypeEnum", 736, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("NOTDEFINED");
+ items.push_back("PHYSICAL");
+ items.push_back("VIRTUAL");
+ IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type = new enumeration_type("IfcPhysicalOrVirtualEnum", 741, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("CAST_IN_PLACE");
+ items.push_back("COMPOSITE");
+ items.push_back("NOTDEFINED");
+ items.push_back("PRECAST_CONCRETE");
+ items.push_back("PREFAB_STEEL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPileConstructionEnum_type = new enumeration_type("IfcPileConstructionEnum", 745, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("BORED");
+ items.push_back("COHESION");
+ items.push_back("DRIVEN");
+ items.push_back("FRICTION");
+ items.push_back("JETGROUTING");
+ items.push_back("NOTDEFINED");
+ items.push_back("SUPPORT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPileTypeEnum_type = new enumeration_type("IfcPileTypeEnum", 747, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("BEND");
+ items.push_back("CONNECTOR");
+ items.push_back("ENTRY");
+ items.push_back("EXIT");
+ items.push_back("JUNCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("OBSTRUCTION");
+ items.push_back("TRANSITION");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPipeFittingTypeEnum_type = new enumeration_type("IfcPipeFittingTypeEnum", 750, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CULVERT");
+ items.push_back("FLEXIBLESEGMENT");
+ items.push_back("GUTTER");
+ items.push_back("NOTDEFINED");
+ items.push_back("RIGIDSEGMENT");
+ items.push_back("SPOOL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type = new enumeration_type("IfcPipeSegmentTypeEnum", 753, items);
+ }
+ IFC4X3_ADD2_IfcPlanarForceMeasure_type = new type_declaration("IfcPlanarForceMeasure", 758, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcPlaneAngleMeasure_type = new type_declaration("IfcPlaneAngleMeasure", 760, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("BASE_PLATE");
+ items.push_back("COVER_PLATE");
+ items.push_back("CURTAIN_PANEL");
+ items.push_back("FLANGE_PLATE");
+ items.push_back("GUSSET_PLATE");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHEET");
+ items.push_back("SPLICE_PLATE");
+ items.push_back("STIFFENER_PLATE");
+ items.push_back("USERDEFINED");
+ items.push_back("WEB_PLATE");
+ IFC4X3_ADD2_IfcPlateTypeEnum_type = new enumeration_type("IfcPlateTypeEnum", 763, items);
+ }
+ IFC4X3_ADD2_IfcPositiveInteger_type = new type_declaration("IfcPositiveInteger", 776, new named_type(IFC4X3_ADD2_IfcInteger_type));
+ IFC4X3_ADD2_IfcPositiveLengthMeasure_type = new type_declaration("IfcPositiveLengthMeasure", 777, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type));
+ IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type = new type_declaration("IfcPositivePlaneAngleMeasure", 778, new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type));
+ IFC4X3_ADD2_IfcPowerMeasure_type = new type_declaration("IfcPowerMeasure", 781, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("CURVE3D");
+ items.push_back("PCURVE_S1");
+ items.push_back("PCURVE_S2");
+ IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type = new enumeration_type("IfcPreferredSurfaceCurveRepresentation", 788, items);
+ }
+ IFC4X3_ADD2_IfcPresentableText_type = new type_declaration("IfcPresentableText", 789, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcPressureMeasure_type = new type_declaration("IfcPressureMeasure", 794, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("ADVICE_CAUTION");
+ items.push_back("ADVICE_NOTE");
+ items.push_back("ADVICE_WARNING");
+ items.push_back("CALIBRATION");
+ items.push_back("DIAGNOSTIC");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHUTDOWN");
+ items.push_back("STARTUP");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcProcedureTypeEnum_type = new enumeration_type("IfcProcedureTypeEnum", 797, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("AREA");
+ items.push_back("CURVE");
+ IFC4X3_ADD2_IfcProfileTypeEnum_type = new enumeration_type("IfcProfileTypeEnum", 807, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CHANGEORDER");
+ items.push_back("MAINTENANCEWORKORDER");
+ items.push_back("MOVEORDER");
+ items.push_back("NOTDEFINED");
+ items.push_back("PURCHASEORDER");
+ items.push_back("USERDEFINED");
+ items.push_back("WORKORDER");
+ IFC4X3_ADD2_IfcProjectOrderTypeEnum_type = new enumeration_type("IfcProjectOrderTypeEnum", 815, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("PROJECTED_LENGTH");
+ items.push_back("TRUE_LENGTH");
+ IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type = new enumeration_type("IfcProjectedOrTrueLengthEnum", 810, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("BLISTER");
+ items.push_back("DEVIATOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcProjectionElementTypeEnum_type = new enumeration_type("IfcProjectionElementTypeEnum", 812, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("NOTDEFINED");
+ items.push_back("PSET_MATERIALDRIVEN");
+ items.push_back("PSET_OCCURRENCEDRIVEN");
+ items.push_back("PSET_PERFORMANCEDRIVEN");
+ items.push_back("PSET_PROFILEDRIVEN");
+ items.push_back("PSET_TYPEDRIVENONLY");
+ items.push_back("PSET_TYPEDRIVENOVERRIDE");
+ items.push_back("QTO_OCCURRENCEDRIVEN");
+ items.push_back("QTO_TYPEDRIVENONLY");
+ items.push_back("QTO_TYPEDRIVENOVERRIDE");
+ IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type = new enumeration_type("IfcPropertySetTemplateTypeEnum", 830, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("ELECTROMAGNETIC");
+ items.push_back("ELECTRONIC");
+ items.push_back("NOTDEFINED");
+ items.push_back("RESIDUALCURRENT");
+ items.push_back("THERMAL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type = new enumeration_type("IfcProtectiveDeviceTrippingUnitTypeEnum", 838, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("ANTI_ARCING_DEVICE");
+ items.push_back("CIRCUITBREAKER");
+ items.push_back("EARTHINGSWITCH");
+ items.push_back("EARTHLEAKAGECIRCUITBREAKER");
+ items.push_back("FUSEDISCONNECTOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("RESIDUALCURRENTCIRCUITBREAKER");
+ items.push_back("RESIDUALCURRENTSWITCH");
+ items.push_back("SPARKGAP");
+ items.push_back("USERDEFINED");
+ items.push_back("VARISTOR");
+ items.push_back("VOLTAGELIMITER");
+ IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type = new enumeration_type("IfcProtectiveDeviceTypeEnum", 840, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("CIRCULATOR");
+ items.push_back("ENDSUCTION");
+ items.push_back("NOTDEFINED");
+ items.push_back("SPLITCASE");
+ items.push_back("SUBMERSIBLEPUMP");
+ items.push_back("SUMPPUMP");
+ items.push_back("USERDEFINED");
+ items.push_back("VERTICALINLINE");
+ items.push_back("VERTICALTURBINE");
+ IFC4X3_ADD2_IfcPumpTypeEnum_type = new enumeration_type("IfcPumpTypeEnum", 843, items);
+ }
+ IFC4X3_ADD2_IfcRadioActivityMeasure_type = new type_declaration("IfcRadioActivityMeasure", 852, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("BLADE");
+ items.push_back("CHECKRAIL");
+ items.push_back("GUARDRAIL");
+ items.push_back("NOTDEFINED");
+ items.push_back("RACKRAIL");
+ items.push_back("RAIL");
+ items.push_back("STOCKRAIL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRailTypeEnum_type = new enumeration_type("IfcRailTypeEnum", 858, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("BALUSTRADE");
+ items.push_back("FENCE");
+ items.push_back("GUARDRAIL");
+ items.push_back("HANDRAIL");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRailingTypeEnum_type = new enumeration_type("IfcRailingTypeEnum", 856, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("ABOVETRACK");
+ items.push_back("DILATIONTRACK");
+ items.push_back("LINESIDE");
+ items.push_back("LINESIDEPART");
+ items.push_back("NOTDEFINED");
+ items.push_back("PLAINTRACK");
+ items.push_back("SUBSTRUCTURE");
+ items.push_back("TRACK");
+ items.push_back("TRACKPART");
+ items.push_back("TURNOUTTRACK");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRailwayPartTypeEnum_type = new enumeration_type("IfcRailwayPartTypeEnum", 861, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRailwayTypeEnum_type = new enumeration_type("IfcRailwayTypeEnum", 862, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("SPIRAL");
+ items.push_back("STRAIGHT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRampFlightTypeEnum_type = new enumeration_type("IfcRampFlightTypeEnum", 866, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("HALF_TURN_RAMP");
+ items.push_back("NOTDEFINED");
+ items.push_back("QUARTER_TURN_RAMP");
+ items.push_back("SPIRAL_RAMP");
+ items.push_back("STRAIGHT_RUN_RAMP");
+ items.push_back("TWO_QUARTER_TURN_RAMP");
+ items.push_back("TWO_STRAIGHT_RUN_RAMP");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRampTypeEnum_type = new enumeration_type("IfcRampTypeEnum", 868, items);
+ }
+ IFC4X3_ADD2_IfcRatioMeasure_type = new type_declaration("IfcRatioMeasure", 869, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcReal_type = new type_declaration("IfcReal", 872, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("BY_DAY_COUNT");
+ items.push_back("BY_WEEKDAY_COUNT");
+ items.push_back("DAILY");
+ items.push_back("MONTHLY_BY_DAY_OF_MONTH");
+ items.push_back("MONTHLY_BY_POSITION");
+ items.push_back("WEEKLY");
+ items.push_back("YEARLY_BY_DAY_OF_MONTH");
+ items.push_back("YEARLY_BY_POSITION");
+ IFC4X3_ADD2_IfcRecurrenceTypeEnum_type = new enumeration_type("IfcRecurrenceTypeEnum", 878, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("BOUNDARY");
+ items.push_back("INTERSECTION");
+ items.push_back("KILOPOINT");
+ items.push_back("LANDMARK");
+ items.push_back("MILEPOINT");
+ items.push_back("NOTDEFINED");
+ items.push_back("POSITION");
+ items.push_back("REFERENCEMARKER");
+ items.push_back("STATION");
+ items.push_back("SUPERELEVATIONEVENT");
+ items.push_back("USERDEFINED");
+ items.push_back("WIDTHEVENT");
+ IFC4X3_ADD2_IfcReferentTypeEnum_type = new enumeration_type("IfcReferentTypeEnum", 881, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("BLINN");
+ items.push_back("FLAT");
+ items.push_back("GLASS");
+ items.push_back("MATT");
+ items.push_back("METAL");
+ items.push_back("MIRROR");
+ items.push_back("NOTDEFINED");
+ items.push_back("PHONG");
+ items.push_back("PHYSICAL");
+ items.push_back("PLASTIC");
+ items.push_back("STRAUSS");
+ IFC4X3_ADD2_IfcReflectanceMethodEnum_type = new enumeration_type("IfcReflectanceMethodEnum", 882, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("DYNAMICALLYCOMPACTED");
+ items.push_back("GROUTED");
+ items.push_back("NOTDEFINED");
+ items.push_back("REPLACED");
+ items.push_back("ROLLERCOMPACTED");
+ items.push_back("SURCHARGEPRELOADED");
+ items.push_back("USERDEFINED");
+ items.push_back("VERTICALLYDRAINED");
+ IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type = new enumeration_type("IfcReinforcedSoilTypeEnum", 885, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("ANCHORING");
+ items.push_back("EDGE");
+ items.push_back("LIGATURE");
+ items.push_back("MAIN");
+ items.push_back("NOTDEFINED");
+ items.push_back("PUNCHING");
+ items.push_back("RING");
+ items.push_back("SHEAR");
+ items.push_back("STUD");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type = new enumeration_type("IfcReinforcingBarRoleEnum", 889, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("PLAIN");
+ items.push_back("TEXTURED");
+ IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type = new enumeration_type("IfcReinforcingBarSurfaceEnum", 890, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("ANCHORING");
+ items.push_back("EDGE");
+ items.push_back("LIGATURE");
+ items.push_back("MAIN");
+ items.push_back("NOTDEFINED");
+ items.push_back("PUNCHING");
+ items.push_back("RING");
+ items.push_back("SHEAR");
+ items.push_back("SPACEBAR");
+ items.push_back("STUD");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type = new enumeration_type("IfcReinforcingBarTypeEnum", 892, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type = new enumeration_type("IfcReinforcingMeshTypeEnum", 897, items);
+ }
+ {
+ std::vector items; items.reserve(26);
+ items.push_back("BICYCLECROSSING");
+ items.push_back("BUS_STOP");
+ items.push_back("CARRIAGEWAY");
+ items.push_back("CENTRALISLAND");
+ items.push_back("CENTRALRESERVE");
+ items.push_back("HARDSHOULDER");
+ items.push_back("INTERSECTION");
+ items.push_back("LAYBY");
+ items.push_back("NOTDEFINED");
+ items.push_back("PARKINGBAY");
+ items.push_back("PASSINGBAY");
+ items.push_back("PEDESTRIAN_CROSSING");
+ items.push_back("RAILWAYCROSSING");
+ items.push_back("REFUGEISLAND");
+ items.push_back("ROADSEGMENT");
+ items.push_back("ROADSIDE");
+ items.push_back("ROADSIDEPART");
+ items.push_back("ROADWAYPLATEAU");
+ items.push_back("ROUNDABOUT");
+ items.push_back("SHOULDER");
+ items.push_back("SIDEWALK");
+ items.push_back("SOFTSHOULDER");
+ items.push_back("TOLLPLAZA");
+ items.push_back("TRAFFICISLAND");
+ items.push_back("TRAFFICLANE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRoadPartTypeEnum_type = new enumeration_type("IfcRoadPartTypeEnum", 968, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRoadTypeEnum_type = new enumeration_type("IfcRoadTypeEnum", 969, items);
+ }
+ {
+ std::vector items; items.reserve(23);
+ items.push_back("ARCHITECT");
+ items.push_back("BUILDINGOPERATOR");
+ items.push_back("BUILDINGOWNER");
+ items.push_back("CIVILENGINEER");
+ items.push_back("CLIENT");
+ items.push_back("COMMISSIONINGENGINEER");
+ items.push_back("CONSTRUCTIONMANAGER");
+ items.push_back("CONSULTANT");
+ items.push_back("CONTRACTOR");
+ items.push_back("COSTENGINEER");
+ items.push_back("ELECTRICALENGINEER");
+ items.push_back("ENGINEER");
+ items.push_back("FACILITIESMANAGER");
+ items.push_back("FIELDCONSTRUCTIONMANAGER");
+ items.push_back("MANUFACTURER");
+ items.push_back("MECHANICALENGINEER");
+ items.push_back("OWNER");
+ items.push_back("PROJECTMANAGER");
+ items.push_back("RESELLER");
+ items.push_back("STRUCTURALENGINEER");
+ items.push_back("SUBCONTRACTOR");
+ items.push_back("SUPPLIER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRoleEnum_type = new enumeration_type("IfcRoleEnum", 970, items);
+ }
+ {
+ std::vector items; items.reserve(15);
+ items.push_back("BARREL_ROOF");
+ items.push_back("BUTTERFLY_ROOF");
+ items.push_back("DOME_ROOF");
+ items.push_back("FLAT_ROOF");
+ items.push_back("FREEFORM");
+ items.push_back("GABLE_ROOF");
+ items.push_back("GAMBREL_ROOF");
+ items.push_back("HIPPED_GABLE_ROOF");
+ items.push_back("HIP_ROOF");
+ items.push_back("MANSARD_ROOF");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAVILION_ROOF");
+ items.push_back("RAINBOW_ROOF");
+ items.push_back("SHED_ROOF");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcRoofTypeEnum_type = new enumeration_type("IfcRoofTypeEnum", 973, items);
+ }
+ IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type = new type_declaration("IfcRotationalFrequencyMeasure", 975, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcRotationalMassMeasure_type = new type_declaration("IfcRotationalMassMeasure", 976, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type = new type_declaration("IfcRotationalStiffnessMeasure", 977, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcBoolean_type);
+ items.push_back(IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type);
+ IFC4X3_ADD2_IfcRotationalStiffnessSelect_type = new select_type("IfcRotationalStiffnessSelect", 978, items);
+ }
+ {
+ std::vector items; items.reserve(16);
+ items.push_back("ATTO");
+ items.push_back("CENTI");
+ items.push_back("DECA");
+ items.push_back("DECI");
+ items.push_back("EXA");
+ items.push_back("FEMTO");
+ items.push_back("GIGA");
+ items.push_back("HECTO");
+ items.push_back("KILO");
+ items.push_back("MEGA");
+ items.push_back("MICRO");
+ items.push_back("MILLI");
+ items.push_back("NANO");
+ items.push_back("PETA");
+ items.push_back("PICO");
+ items.push_back("TERA");
+ IFC4X3_ADD2_IfcSIPrefix_type = new enumeration_type("IfcSIPrefix", 1023, items);
+ }
+ {
+ std::vector items; items.reserve(30);
+ items.push_back("AMPERE");
+ items.push_back("BECQUEREL");
+ items.push_back("CANDELA");
+ items.push_back("COULOMB");
+ items.push_back("CUBIC_METRE");
+ items.push_back("DEGREE_CELSIUS");
+ items.push_back("FARAD");
+ items.push_back("GRAM");
+ items.push_back("GRAY");
+ items.push_back("HENRY");
+ items.push_back("HERTZ");
+ items.push_back("JOULE");
+ items.push_back("KELVIN");
+ items.push_back("LUMEN");
+ items.push_back("LUX");
+ items.push_back("METRE");
+ items.push_back("MOLE");
+ items.push_back("NEWTON");
+ items.push_back("OHM");
+ items.push_back("PASCAL");
+ items.push_back("RADIAN");
+ items.push_back("SECOND");
+ items.push_back("SIEMENS");
+ items.push_back("SIEVERT");
+ items.push_back("SQUARE_METRE");
+ items.push_back("STERADIAN");
+ items.push_back("TESLA");
+ items.push_back("VOLT");
+ items.push_back("WATT");
+ items.push_back("WEBER");
+ IFC4X3_ADD2_IfcSIUnitName_type = new enumeration_type("IfcSIUnitName", 1026, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("BATH");
+ items.push_back("BIDET");
+ items.push_back("CISTERN");
+ items.push_back("NOTDEFINED");
+ items.push_back("SANITARYFOUNTAIN");
+ items.push_back("SHOWER");
+ items.push_back("SINK");
+ items.push_back("TOILETPAN");
+ items.push_back("URINAL");
+ items.push_back("USERDEFINED");
+ items.push_back("WASHHANDBASIN");
+ items.push_back("WCSEAT");
+ IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type = new enumeration_type("IfcSanitaryTerminalTypeEnum", 982, items);
+ }
+ IFC4X3_ADD2_IfcSectionModulusMeasure_type = new type_declaration("IfcSectionModulusMeasure", 991, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back("TAPERED");
+ items.push_back("UNIFORM");
+ IFC4X3_ADD2_IfcSectionTypeEnum_type = new enumeration_type("IfcSectionTypeEnum", 994, items);
+ }
+ IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type = new type_declaration("IfcSectionalAreaIntegralMeasure", 986, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(34);
+ items.push_back("CO2SENSOR");
+ items.push_back("CONDUCTANCESENSOR");
+ items.push_back("CONTACTSENSOR");
+ items.push_back("COSENSOR");
+ items.push_back("EARTHQUAKESENSOR");
+ items.push_back("FIRESENSOR");
+ items.push_back("FLOWSENSOR");
+ items.push_back("FOREIGNOBJECTDETECTIONSENSOR");
+ items.push_back("FROSTSENSOR");
+ items.push_back("GASSENSOR");
+ items.push_back("HEATSENSOR");
+ items.push_back("HUMIDITYSENSOR");
+ items.push_back("IDENTIFIERSENSOR");
+ items.push_back("IONCONCENTRATIONSENSOR");
+ items.push_back("LEVELSENSOR");
+ items.push_back("LIGHTSENSOR");
+ items.push_back("MOISTURESENSOR");
+ items.push_back("MOVEMENTSENSOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("OBSTACLESENSOR");
+ items.push_back("PHSENSOR");
+ items.push_back("PRESSURESENSOR");
+ items.push_back("RADIATIONSENSOR");
+ items.push_back("RADIOACTIVITYSENSOR");
+ items.push_back("RAINSENSOR");
+ items.push_back("SMOKESENSOR");
+ items.push_back("SNOWDEPTHSENSOR");
+ items.push_back("SOUNDSENSOR");
+ items.push_back("TEMPERATURESENSOR");
+ items.push_back("TRAINSENSOR");
+ items.push_back("TURNOUTCLOSURESENSOR");
+ items.push_back("USERDEFINED");
+ items.push_back("WHEELSENSOR");
+ items.push_back("WINDSENSOR");
+ IFC4X3_ADD2_IfcSensorTypeEnum_type = new enumeration_type("IfcSensorTypeEnum", 1000, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("FINISH_FINISH");
+ items.push_back("FINISH_START");
+ items.push_back("NOTDEFINED");
+ items.push_back("START_FINISH");
+ items.push_back("START_START");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSequenceEnum_type = new enumeration_type("IfcSequenceEnum", 1001, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("AWNING");
+ items.push_back("JALOUSIE");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHUTTER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type = new enumeration_type("IfcShadingDeviceTypeEnum", 1005, items);
+ }
+ IFC4X3_ADD2_IfcShearModulusMeasure_type = new type_declaration("IfcShearModulusMeasure", 1009, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("MARKER");
+ items.push_back("MIRROR");
+ items.push_back("NOTDEFINED");
+ items.push_back("PICTORAL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSignTypeEnum_type = new enumeration_type("IfcSignTypeEnum", 1017, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("AUDIO");
+ items.push_back("MIXED");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ items.push_back("VISUAL");
+ IFC4X3_ADD2_IfcSignalTypeEnum_type = new enumeration_type("IfcSignalTypeEnum", 1015, items);
+ }
+ {
+ std::vector items; items.reserve(13);
+ items.push_back("P_BOUNDEDVALUE");
+ items.push_back("P_ENUMERATEDVALUE");
+ items.push_back("P_LISTVALUE");
+ items.push_back("P_REFERENCEVALUE");
+ items.push_back("P_SINGLEVALUE");
+ items.push_back("P_TABLEVALUE");
+ items.push_back("Q_AREA");
+ items.push_back("Q_COUNT");
+ items.push_back("Q_LENGTH");
+ items.push_back("Q_NUMBER");
+ items.push_back("Q_TIME");
+ items.push_back("Q_VOLUME");
+ items.push_back("Q_WEIGHT");
+ IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type = new enumeration_type("IfcSimplePropertyTemplateTypeEnum", 1020, items);
+ }
+ {
+ std::vector items; items.reserve(11);
+ items.push_back("APPROACH_SLAB");
+ items.push_back("BASESLAB");
+ items.push_back("FLOOR");
+ items.push_back("LANDING");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAVING");
+ items.push_back("ROOF");
+ items.push_back("SIDEWALK");
+ items.push_back("TRACKSLAB");
+ items.push_back("USERDEFINED");
+ items.push_back("WEARING");
+ IFC4X3_ADD2_IfcSlabTypeEnum_type = new enumeration_type("IfcSlabTypeEnum", 1030, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("SOLARCOLLECTOR");
+ items.push_back("SOLARPANEL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type = new enumeration_type("IfcSolarDeviceTypeEnum", 1034, items);
+ }
+ IFC4X3_ADD2_IfcSolidAngleMeasure_type = new type_declaration("IfcSolidAngleMeasure", 1035, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type = new type_declaration("IfcSoundPowerLevelMeasure", 1038, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSoundPowerMeasure_type = new type_declaration("IfcSoundPowerMeasure", 1039, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type = new type_declaration("IfcSoundPressureLevelMeasure", 1040, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSoundPressureMeasure_type = new type_declaration("IfcSoundPressureMeasure", 1041, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("CONVECTOR");
+ items.push_back("NOTDEFINED");
+ items.push_back("RADIATOR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type = new enumeration_type("IfcSpaceHeaterTypeEnum", 1046, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("BERTH");
+ items.push_back("EXTERNAL");
+ items.push_back("GFA");
+ items.push_back("INTERNAL");
+ items.push_back("NOTDEFINED");
+ items.push_back("PARKING");
+ items.push_back("SPACE");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSpaceTypeEnum_type = new enumeration_type("IfcSpaceTypeEnum", 1048, items);
+ }
+ {
+ std::vector items; items.reserve(12);
+ items.push_back("CONSTRUCTION");
+ items.push_back("FIRESAFETY");
+ items.push_back("INTERFERENCE");
+ items.push_back("LIGHTING");
+ items.push_back("NOTDEFINED");
+ items.push_back("OCCUPANCY");
+ items.push_back("RESERVATION");
+ items.push_back("SECURITY");
+ items.push_back("THERMAL");
+ items.push_back("TRANSPORT");
+ items.push_back("USERDEFINED");
+ items.push_back("VENTILATION");
+ IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type = new enumeration_type("IfcSpatialZoneTypeEnum", 1056, items);
+ }
+ IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type = new type_declaration("IfcSpecificHeatCapacityMeasure", 1057, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSpecularExponent_type = new type_declaration("IfcSpecularExponent", 1058, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcSpecularRoughness_type = new type_declaration("IfcSpecularRoughness", 1060, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("BIRDCAGE");
+ items.push_back("COWL");
+ items.push_back("NOTDEFINED");
+ items.push_back("RAINWATERHOPPER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStackTerminalTypeEnum_type = new enumeration_type("IfcStackTerminalTypeEnum", 1066, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CURVED");
+ items.push_back("FREEFORM");
+ items.push_back("NOTDEFINED");
+ items.push_back("SPIRAL");
+ items.push_back("STRAIGHT");
+ items.push_back("USERDEFINED");
+ items.push_back("WINDER");
+ IFC4X3_ADD2_IfcStairFlightTypeEnum_type = new enumeration_type("IfcStairFlightTypeEnum", 1070, items);
+ }
+ {
+ std::vector items; items.reserve(17);
+ items.push_back("CURVED_RUN_STAIR");
+ items.push_back("DOUBLE_RETURN_STAIR");
+ items.push_back("HALF_TURN_STAIR");
+ items.push_back("HALF_WINDING_STAIR");
+ items.push_back("LADDER");
+ items.push_back("NOTDEFINED");
+ items.push_back("QUARTER_TURN_STAIR");
+ items.push_back("QUARTER_WINDING_STAIR");
+ items.push_back("SPIRAL_STAIR");
+ items.push_back("STRAIGHT_RUN_STAIR");
+ items.push_back("THREE_QUARTER_TURN_STAIR");
+ items.push_back("THREE_QUARTER_WINDING_STAIR");
+ items.push_back("TWO_CURVED_RUN_STAIR");
+ items.push_back("TWO_QUARTER_TURN_STAIR");
+ items.push_back("TWO_QUARTER_WINDING_STAIR");
+ items.push_back("TWO_STRAIGHT_RUN_STAIR");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStairTypeEnum_type = new enumeration_type("IfcStairTypeEnum", 1072, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("LOCKED");
+ items.push_back("READONLY");
+ items.push_back("READONLYLOCKED");
+ items.push_back("READWRITE");
+ items.push_back("READWRITELOCKED");
+ IFC4X3_ADD2_IfcStateEnum_type = new enumeration_type("IfcStateEnum", 1073, items);
+ }
+ IFC4X3_ADD2_IfcStrippedOptional_type = new type_declaration("IfcStrippedOptional", 1074, new simple_type(simple_type::boolean_type));
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("CONST");
+ items.push_back("DISCRETE");
+ items.push_back("EQUIDISTANT");
+ items.push_back("LINEAR");
+ items.push_back("NOTDEFINED");
+ items.push_back("PARABOLA");
+ items.push_back("POLYGONAL");
+ items.push_back("SINUS");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type = new enumeration_type("IfcStructuralCurveActivityTypeEnum", 1082, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CABLE");
+ items.push_back("COMPRESSION_MEMBER");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIN_JOINED_MEMBER");
+ items.push_back("RIGID_JOINED_MEMBER");
+ items.push_back("TENSION_MEMBER");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type = new enumeration_type("IfcStructuralCurveMemberTypeEnum", 1085, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("BILINEAR");
+ items.push_back("CONST");
+ items.push_back("DISCRETE");
+ items.push_back("ISOCONTOUR");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type = new enumeration_type("IfcStructuralSurfaceActivityTypeEnum", 1111, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("BENDING_ELEMENT");
+ items.push_back("MEMBRANE_ELEMENT");
+ items.push_back("NOTDEFINED");
+ items.push_back("SHELL");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type = new enumeration_type("IfcStructuralSurfaceMemberTypeEnum", 1114, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("NOTDEFINED");
+ items.push_back("PURCHASE");
+ items.push_back("USERDEFINED");
+ items.push_back("WORK");
+ IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type = new enumeration_type("IfcSubContractResourceTypeEnum", 1122, items);
+ }
+ {
+ std::vector items; items.reserve(13);
+ items.push_back("DEFECT");
+ items.push_back("HATCHMARKING");
+ items.push_back("LINEMARKING");
+ items.push_back("MARK");
+ items.push_back("NONSKIDSURFACING");
+ items.push_back("NOTDEFINED");
+ items.push_back("PAVEMENTSURFACEMARKING");
+ items.push_back("RUMBLESTRIP");
+ items.push_back("SYMBOLMARKING");
+ items.push_back("TAG");
+ items.push_back("TRANSVERSERUMBLESTRIP");
+ items.push_back("TREATMENT");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type = new enumeration_type("IfcSurfaceFeatureTypeEnum", 1128, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("BOTH");
+ items.push_back("NEGATIVE");
+ items.push_back("POSITIVE");
+ IFC4X3_ADD2_IfcSurfaceSide_type = new enumeration_type("IfcSurfaceSide", 1133, items);
+ }
+ {
+ std::vector items; items.reserve(13);
+ items.push_back("CONTACTOR");
+ items.push_back("DIMMERSWITCH");
+ items.push_back("EMERGENCYSTOP");
+ items.push_back("KEYPAD");
+ items.push_back("MOMENTARYSWITCH");
+ items.push_back("NOTDEFINED");
+ items.push_back("RELAY");
+ items.push_back("SELECTORSWITCH");
+ items.push_back("STARTER");
+ items.push_back("START_AND_STOP_EQUIPMENT");
+ items.push_back("SWITCHDISCONNECTOR");
+ items.push_back("TOGGLESWITCH");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type = new enumeration_type("IfcSwitchingDeviceTypeEnum", 1148, items);
+ }
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("NOTDEFINED");
+ items.push_back("PANEL");
+ items.push_back("SUBRACK");
+ items.push_back("USERDEFINED");
+ items.push_back("WORKSURFACE");
+ IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type = new enumeration_type("IfcSystemFurnitureElementTypeEnum", 1152, items);
+ }
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("BASIN");
+ items.push_back("BREAKPRESSURE");
+ items.push_back("EXPANSION");
+ items.push_back("FEEDANDEXPANSION");
+ items.push_back("NOTDEFINED");
+ items.push_back("OILRETENTIONTRAY");
+ items.push_back("PRESSUREVESSEL");
+ items.push_back("STORAGE");
+ items.push_back("USERDEFINED");
+ items.push_back("VESSEL");
+ IFC4X3_ADD2_IfcTankTypeEnum_type = new enumeration_type("IfcTankTypeEnum", 1158, items);
+ }
+ {
+ std::vector items; items.reserve(3);
+ items.push_back("ELAPSEDTIME");
+ items.push_back("NOTDEFINED");
+ items.push_back("WORKTIME");
+ IFC4X3_ADD2_IfcTaskDurationEnum_type = new enumeration_type("IfcTaskDurationEnum", 1160, items);
+ }
+ {
+ std::vector items; items.reserve(23);
+ items.push_back("ADJUSTMENT");
+ items.push_back("ATTENDANCE");
+ items.push_back("CALIBRATION");
+ items.push_back("CONSTRUCTION");
+ items.push_back("DEMOLITION");
+ items.push_back("DISMANTLE");
+ items.push_back("DISPOSAL");
+ items.push_back("EMERGENCY");
+ items.push_back("INSPECTION");
+ items.push_back("INSTALLATION");
+ items.push_back("LOGISTIC");
+ items.push_back("MAINTENANCE");
+ items.push_back("MOVE");
+ items.push_back("NOTDEFINED");
+ items.push_back("OPERATION");
+ items.push_back("REMOVAL");
+ items.push_back("RENOVATION");
+ items.push_back("SAFETY");
+ items.push_back("SHUTDOWN");
+ items.push_back("STARTUP");
+ items.push_back("TESTING");
+ items.push_back("TROUBLESHOOTING");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcTaskTypeEnum_type = new enumeration_type("IfcTaskTypeEnum", 1164, items);
+ }
+ IFC4X3_ADD2_IfcTemperatureGradientMeasure_type = new type_declaration("IfcTemperatureGradientMeasure", 1166, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type = new type_declaration("IfcTemperatureRateOfChangeMeasure", 1167, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(5);
+ items.push_back("COUPLER");
+ items.push_back("FIXED_END");
+ items.push_back("NOTDEFINED");
+ items.push_back("TENSIONING_END");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type = new enumeration_type("IfcTendonAnchorTypeEnum", 1171, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("COUPLER");
+ items.push_back("DIABOLO");
+ items.push_back("DUCT");
+ items.push_back("GROUTING_DUCT");
+ items.push_back("NOTDEFINED");
+ items.push_back("TRUMPET");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcTendonConduitTypeEnum_type = new enumeration_type("IfcTendonConduitTypeEnum", 1174, items);
+ }
+ {
+ std::vector items; items.reserve(6);
+ items.push_back("BAR");
+ items.push_back("COATED");
+ items.push_back("NOTDEFINED");
+ items.push_back("STRAND");
+ items.push_back("USERDEFINED");
+ items.push_back("WIRE");
+ IFC4X3_ADD2_IfcTendonTypeEnum_type = new enumeration_type("IfcTendonTypeEnum", 1176, items);
+ }
+ IFC4X3_ADD2_IfcText_type = new type_declaration("IfcText", 1179, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcTextAlignment_type = new type_declaration("IfcTextAlignment", 1180, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcTextDecoration_type = new type_declaration("IfcTextDecoration", 1181, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcTextFontName_type = new type_declaration("IfcTextFontName", 1182, new simple_type(simple_type::string_type));
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("DOWN");
+ items.push_back("LEFT");
+ items.push_back("RIGHT");
+ items.push_back("UP");
+ IFC4X3_ADD2_IfcTextPath_type = new enumeration_type("IfcTextPath", 1186, items);
+ }
+ IFC4X3_ADD2_IfcTextTransformation_type = new type_declaration("IfcTextTransformation", 1191, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type = new type_declaration("IfcThermalAdmittanceMeasure", 1199, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcThermalConductivityMeasure_type = new type_declaration("IfcThermalConductivityMeasure", 1200, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type = new type_declaration("IfcThermalExpansionCoefficientMeasure", 1201, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcThermalResistanceMeasure_type = new type_declaration("IfcThermalResistanceMeasure", 1202, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type = new type_declaration("IfcThermalTransmittanceMeasure", 1203, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type = new type_declaration("IfcThermodynamicTemperatureMeasure", 1204, new simple_type(simple_type::real_type));
+ IFC4X3_ADD2_IfcTime_type = new type_declaration("IfcTime", 1206, new simple_type(simple_type::string_type));
+ IFC4X3_ADD2_IfcTimeMeasure_type = new type_declaration("IfcTimeMeasure", 1207, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcDuration_type);
+ items.push_back(IFC4X3_ADD2_IfcRatioMeasure_type);
+ IFC4X3_ADD2_IfcTimeOrRatioSelect_type = new select_type("IfcTimeOrRatioSelect", 1208, items);
+ }
+ {
+ std::vector items; items.reserve(7);
+ items.push_back("CONTINUOUS");
+ items.push_back("DISCRETE");
+ items.push_back("DISCRETEBINARY");
+ items.push_back("NOTDEFINED");
+ items.push_back("PIECEWISEBINARY");
+ items.push_back("PIECEWISECONSTANT");
+ items.push_back("PIECEWISECONTINUOUS");
+ IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type = new enumeration_type("IfcTimeSeriesDataTypeEnum", 1211, items);
+ }
+ IFC4X3_ADD2_IfcTimeStamp_type = new type_declaration("IfcTimeStamp", 1213, new simple_type(simple_type::integer_type));
+ IFC4X3_ADD2_IfcTorqueMeasure_type = new type_declaration("IfcTorqueMeasure", 1217, new simple_type(simple_type::real_type));
+ {
+ std::vector items; items.reserve(10);
+ items.push_back("BLOCKINGDEVICE");
+ items.push_back("DERAILER");
+ items.push_back("FROG");
+ items.push_back("HALF_SET_OF_BLADES");
+ items.push_back("NOTDEFINED");
+ items.push_back("SLEEPER");
+ items.push_back("SPEEDREGULATOR");
+ items.push_back("TRACKENDOFALIGNMENT");
+ items.push_back("USERDEFINED");
+ items.push_back("VEHICLESTOP");
+ IFC4X3_ADD2_IfcTrackElementTypeEnum_type = new enumeration_type("IfcTrackElementTypeEnum", 1220, items);
+ }
+ {
+ std::vector items; items.reserve(9);
+ items.push_back("CHOPPER");
+ items.push_back("COMBINED");
+ items.push_back("CURRENT");
+ items.push_back("FREQUENCY");
+ items.push_back("INVERTER");
+ items.push_back("NOTDEFINED");
+ items.push_back("RECTIFIER");
+ items.push_back("USERDEFINED");
+ items.push_back("VOLTAGE");
+ IFC4X3_ADD2_IfcTransformerTypeEnum_type = new enumeration_type("IfcTransformerTypeEnum", 1223, items);
+ }
+ {
+ std::vector items; items.reserve(4);
+ items.push_back("CONTINUOUS");
+ items.push_back("CONTSAMEGRADIENT");
+ items.push_back("CONTSAMEGRADIENTSAMECURVATURE");
+ items.push_back("DISCONTINUOUS");
+ IFC4X3_ADD2_IfcTransitionCode_type = new enumeration_type("IfcTransitionCode", 1224, items);
+ }
+ {
+ std::vector items; items.reserve(2);
+ items.push_back(IFC4X3_ADD2_IfcBoolean_type);
+ items.push_back(IFC4X3_ADD2_IfcLinearStiffnessMeasure_type);
+ IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type = new select_type("IfcTranslationalStiffnessSelect", 1225, items);
+ }
+ {
+ std::vector items; items.reserve(8);
+ items.push_back("CRANEWAY");
+ items.push_back("ELEVATOR");
+ items.push_back("ESCALATOR");
+ items.push_back("HAULINGGEAR");
+ items.push_back("LIFTINGGEAR");
+ items.push_back("MOVINGWALKWAY");
+ items.push_back("NOTDEFINED");
+ items.push_back("USERDEFINED");
+ IFC4X3_ADD2_IfcTransportElementTypeEnum_type = new enumeration_type("IfcTransportElementTypeEnum", 1230, items);
+ }
+ {
+ std::vector